Spring JDBC基础应用问题:JdbcTemplate Bean未找到
老哥,看你这情况,核心问题就是Spring容器里压根没生成JdbcTemplate的Bean实例,所以@Autowired自然拿不到东西——你把配置JdbcTemplate的@Bean代码注释掉了,这可不就出问题了嘛!咱们一步步把它搞定:
1. 先确认依赖是否齐全
不管你用Maven还是Gradle,得把Spring JDBC、数据库驱动和数据源的依赖都加上。以Maven为例,在pom.xml里加这些:
<!-- Spring JDBC核心依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>你的Spring版本号,比如5.3.27</version> </dependency> <!-- MySQL驱动(根据你用的数据库换) --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> <scope>runtime</scope> </dependency> <!-- 数据源用HikariCP(Spring默认推荐) --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>5.0.1</version> </dependency>
2. 必须显式配置DataSource和JdbcTemplate的Bean
Spring不会自动帮你创建JdbcTemplate,除非你用Spring Boot的自动配置(后面说)。所以得在你的Application类上加上@Configuration注解(把它变成配置类),然后把之前注释掉的@Bean代码恢复:
@Configuration @ComponentScan(basePackages = "com.yourpackage") // 替换成你的项目根包路径,扫描组件 public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } // 读取配置文件里的数据源参数 @Value("${spring.datasource.url}") private String dbUrl; @Value("${spring.datasource.username}") private String dbUsername; @Value("${spring.datasource.password}") private String dbPassword; @Value("${spring.datasource.driver-class-name}") private String dbDriver; // 配置数据源Bean @Bean public DataSource dataSource() { HikariDataSource hikariDataSource = new HikariDataSource(); hikariDataSource.setJdbcUrl(dbUrl); hikariDataSource.setUsername(dbUsername); hikariDataSource.setPassword(dbPassword); hikariDataSource.setDriverClassName(dbDriver); return hikariDataSource; } // 配置JdbcTemplate Bean,依赖上面的数据源 @Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } // 你的原有代码 @Value("${spring.name}") private String name; @Autowired private JdbcTemplate jdbcTemplate; private static final Logger log = LoggerFactory.getLogger(Application.class); }
敲黑板:JdbcTemplate必须依赖DataSource才能创建,所以先配DataSource的Bean,再把它注入到JdbcTemplate的Bean里。
3. 检查配置文件是否正确
在application.properties(或application.yml)里补全数据源配置:
# 数据源配置 spring.datasource.url=jdbc:mysql://localhost:3306/你的数据库名?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=你的数据库密码 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver # 你的自定义配置 spring.name=MySpringJDBCApp
4. 如果你用的是Spring Boot,有更简单的办法
要是你是Spring Boot项目,只要引入spring-boot-starter-jdbc依赖,上面的DataSource和JdbcTemplate的Bean会自动创建,你根本不用手动写@Bean:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency>
然后只要配置好application.properties里的数据源参数,直接@Autowired JdbcTemplate就行,省心!
总结一下:你之前把配置JdbcTemplate的@Bean注释掉了,导致Spring容器里没有这个Bean,所以注入失败。把上面的步骤走完,问题就解决啦!
内容的提问来源于stack exchange,提问作者ScaVenGerS

