springboot中JdbcTemplate 无法自动注入的问题

springboot中JdbcTemplate 无法自动注入的问题


声明:这只是我遇到的问题。

正常情况下JdbcTemplate自动注入的条件

  1. 在application.yml或application.properties中配置了spring.datasource。如下为application.yml中的事例:
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: 演示用密码
  1. 对JdbcTemplate使用了@Autowired之类的注解。如下
    @Autowired
    private JdbcTemplate jdbcTemplate;
  1. 只需要以上两个条件,并不需要手动为JdbcTemplate创建@Bean

遇到的问题

报错,显示找不到JdbcTemplate的Bean。由于我最开始也不是很懂,就只好根据AI的建议自己创建了@Configuration

@Configuration
public class DataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSourceProperties dataSourceProperties() {
        return new DataSourceProperties();
    }

    @Bean
    public DataSource dataSource(DataSourceProperties properties) {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl(properties.getUrl());
        dataSource.setUsername(properties.getUsername());
        dataSource.setPassword(properties.getPassword());
        return dataSource;
    }

    @Bean
    public JdbcTemplate jdbcTemplate(DataSource dataSource) {
        return new JdbcTemplate(dataSource);
    }
}

@Component
@Data
public class DataSourceProperties {
    private String url;
    private String username;
    private String password;
}

倒是能用了,但我越想越不对,我看过一个mybatis的项目,直接就能自行完成配置,没这么麻烦。
在查看了JdbcTemplateAutoConfiguration.class和JdbcTemplate.class后更是觉得spring应该自动根据application.yml注入spring.datasource到DataSource,然后自动注入JdbcTemplate。

问题的解决

偶然间,我搜了一下DataSourceAutoConfiguration,想看看DataSourceAutoConfiguration.class是怎么实现的,却没想到存在于我的项目中。进一步一看,居然有这么一行语句:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

这导致根据application.yml注入spring.datasource到DataSource失败,自动注入JdbcTemplate也就跟着失败了。

我根本没有印象,因为这是我项目最初时写的。AI明明提醒了我很多次可能存在

exclude = {DataSourceAutoConfiguration.class}

但我坚定地认为我没这样写过。
服了,真是手贱,花了我两三天时间解决这个问题。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值