2021-04-19

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的迁移了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值