springboot中JdbcTemplate 无法自动注入的问题
声明:这只是我遇到的问题。
正常情况下JdbcTemplate自动注入的条件
- 在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: 演示用密码
- 对JdbcTemplate使用了@Autowired之类的注解。如下
@Autowired
private JdbcTemplate jdbcTemplate;
- 只需要以上两个条件,并不需要手动为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}
但我坚定地认为我没这样写过。
服了,真是手贱,花了我两三天时间解决这个问题。

538

被折叠的 条评论
为什么被折叠?



