今天完了一下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解决。