我是靠谱客的博主 稳重方盒,最近开发中收集的这篇文章主要介绍spring+mybatis-plus 基于注解注入DataSource失败的解决,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

//Mybatis-plus的配置类(略去无关代码)
@Configuration
public class MyBatisConfig {
@Resource
private DruidDataSource dataSource;
@Bean
public MybatisSqlSessionFactoryBean sqlSessionFactory(){
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setGlobalConfig(globalConfig());
return sqlSessionFactoryBean;
}
}
//Druid的配置类(略去无关代码)
@Configuration
public class DruidConfig {
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Value("${jdbc.url}")
private String url;
@Bean
public DruidDataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
//dataSource.setDriverClassName(driverClassName);//如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
}
}

这种写法在启动时一直报错

Caused by: java.lang.IllegalArgumentException: Property 'dataSource' is required

分析报错日志,是在创建mapper的时候需要用到sqlSessionFactory,于是spring去创建sqlSessionFactory,创建时又依赖于DataSrouce,然后从spring容器中获取,而此时dataSource尚未创建,则获取的dataSource是null,在set之后就报错了。

于是尝试把2个配置类合并到一起,直接调用dataSource()方法来获取dataSource,则所有的Value属性都是null,此时创建DataSource就失败了。于是查找@Value注入失败的解决方案,也始终未找到解决办法。

把DruidDataSource放入@Bean注解的方法参数里,问题得以解决

@Configuration
public class MyBatisConfig {
@Bean
public MybatisSqlSessionFactoryBean sqlSessionFactory(DruidDataSource dataSource){
MybatisSqlSessionFactoryBean sqlSessionFactoryBean = new MybatisSqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setGlobalConfig(globalConfig());
return sqlSessionFactoryBean;
}
}

最后

以上就是稳重方盒为你收集整理的spring+mybatis-plus 基于注解注入DataSource失败的解决的全部内容,希望文章能够帮你解决spring+mybatis-plus 基于注解注入DataSource失败的解决所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部