SpringBoot启动出现Caused by: java.lang.IllegalArgumentException: Property ‘sqlSessionFactory’ or ‘sqlSessionTemplate’ are required的解决办法
前几天,用springboot集成flyway的功能。一开始的功能并不需要项目启动时与数据库交互(flyway与数据库交互通过配置及被动调用实现),但后来测试提了一些查询功能,就又需要集成mybatis-plus进行使用。
本地用main方法测试mybatis-plus的功能都没问题,都可以查出数据,但是springboot启动时就报了这个错误。完整的错误信息如下:
Caused by: java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
at org.springframework.util.Assert.notNull(Assert.java:201)
at org.mybatis.spring.support.SqlSessionDaoSupport.checkDaoConfig(SqlSessionDaoSupport.java:123)
at org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:73)
at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782)
... 45 common frames omitted
网上查了一些,大部分都是说mybatis的报引入错误或者版本不对。可我的问题不是这个。我的错误是在springboot的启动类上加了这个注解导致的,如下图,去掉这个注解就可以了
参考: link.
(exclude = {DataSourceAutoConfiguration.class})
这个注解的作用:
exclude,排除此类的AutoConfig,即禁止 SpringBoot 自动注入数据源配置。
DataSourceAutoConfiguration.class 会自动查找 application.yml 或者 properties 文件里的 spring.datasource.* 相关属性并自动配置单数据源。
简单来说就是数据源手动配置,不需要springboot自动注入进行配置。
之前增加这个注解的原因是,原来不需要直接与数据库进行交互,仅依赖flyway与数据库交互,而且是手动配置数据源的。
但后来又提了查询的需求,使用了mybatis的相关功能,在springboot启动时需要注入实体对象,因此导致了该错误。
再补充一下,由于去掉了该注解,项目在启动时就回开启flyway的功能,但我们有时候并不想在项目启动时就进行迁移,或者项目启动报错,如图:
ERROR o.s.b.diagnostics.LoggingFailureAnalysisReporter -
***************************
APPLICATION FAILED TO START
***************************
Description:
Flyway failed to initialize: none of the following migration scripts locations could be found:
- classpath:db/migration
Action:
Review the locations above or check your Flyway configuration
这时我们可以在项目启动时禁止flyway启动,又两种方式写法,如下:
在application.properties文件中
#spring启动时禁用flyway功能
spring.flyway.enabled=false
或在yml文件中(例如:application-dev.yml)
spring:
#spring启动时禁用flyway功能
flyway:
enabled: false
这样在项目启动时就不会进行flyway的迁移了