问题:Spring boot 启动报错 Failed to auto-configure a DataSource

今天完了一下mybatis的通用mapper,但是启动后报错。

***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to auto-configure a DataSource: 'spring.datasource.url' is not specified and no embedded datasource could be auto-configured.
Reason: Failed to determine a suitable driver class
Action:
Consider the following:
    If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.

    If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).

遂百度之,
参考https://blog.csdn.net/daxiang52/article/details/79420777

原理大概是,在pom中添加了数据库相关的依赖,当时没有配置数据源,所以启动的时候初始化数据源失败了,导致启动失败。

但是我的配置是没有问题的,application.yml中数据源神马的都配置好的。

后来我打开看了一下target文件夹,居然打包的时候maven没把application.yml拷贝过去。wtf,想了一下,是这段配置除了问题:

  <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>

因为我直接把mapper.xml文件放在mapper接口的包里,然后些人maven的资源拷贝的。但是天杀的没有写.yml格式的,导致打包后没有appliation.yml,所以问题也就明了了。

所以出现这个问题有两种情况

1.添加了数据库相关组件,但是没有配置数据源,spring-boo启动时候自动配置失败。

解决办法:
需要在启动类的@EnableAutoConfiguration或@SpringBootApplication中添加exclude= {DataSourceAutoConfiguration.class},排除此类的autoconfig。启动以后就可以正常运行。

这是因为添加了数据库组件,所以autoconfig会去读取数据源配置,而我新建的项目还没有配置数据源,所以会导致异常出现。

2.资源拷贝的问题,检查一下打包后的target文件就可以看出来。

解决办法:
配置一下在文件maven打包的时候吧拷贝进去,如果出现application.yml存在但是读取有问题,多半是application.yml编码格式的问题,utf-8解决。

    原文作者:叫我图图就可以了
    原文地址: https://www.jianshu.com/p/549f99b6b618
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞