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;
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!出现 "Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required" 的错误通常是因为在您的 Spring Boot + MyBatis Plus 项目中,Mapper 注入时未正确配置相关的依赖项。 首先,确保您的项目中已添加了正确的依赖项。您可以在您的 pom.xml 文件中添加以下依赖项: ```xml <dependencies> <!-- Spring Boot Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- MyBatis Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version> </dependency> <!-- MySQL Connector --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> <!-- MyBatis Plus Code Generator (Optional) --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.3.1</version> <scope>test</scope> </dependency> </dependencies> ``` 接下来,您需要在您的配置文件(如 application.properties 或 application.yml)中添加 MyBatis Plus 的相关配置。 如果您使用的是 application.properties,可以添加以下配置项: ```properties # 数据库连接配置 spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name spring.datasource.username=your_username spring.datasource.password=your_password spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # MyBatis Plus 配置 mybatis-plus.mapper-locations=classpath*:mapper/**/*.xml ``` 如果您使用的是 application.yml,可以添加以下配置项: ```yaml # 数据库连接配置 spring: datasource: url: jdbc:mysql://localhost:3306/your_database_name username: your_username password: your_password driver-class-name: com.mysql.cj.jdbc.Driver # MyBatis Plus 配置 mybatis-plus: mapper-locations: classpath*:mapper/**/*.xml ``` 请注意,上述配置中的 "your_database_name"、"your_username" 和 "your_password" 需要替换为您自己的数据库信息。 最后,确保您的 Mapper 接口正确继承了 MyBatis Plus 的 BaseMapper 接口,并且使用了 `@Mapper` 注解进行扫描和注册。 如果您按照以上步骤进行配置仍然遇到问题,请检查您的项目结构和配置是否正确,以及依赖项的版本是否与您的项目兼容。 希望对您有所帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值