java - 如何在springboot中自动装配jdbcTemplate?
问题描述
尝试使用带有 SpringBoot 2.1.4.RELEASE 的 JdbcTemplate 访问 Oracle 数据库,但出现空指针异常
根据 SpringBoot 文档在下面尝试过,我仍然遇到空指针异常。
@Component
public class DataAccessObject {
private final JdbcTemplate jdbcTemplate;
@Autowired
public DataAccessObject(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
// ...
}
getCircleCount() 中抛出空指针异常
@Component
public class DataAccessObject {
@Autowired
private JdbcTemplate jdbcTemplate;
public void getCircleCount() {
int count = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM CIRCLE", Integer.class);
System.out.println(count);
}
}
而我在这里得到圈数
@SpringBootApplication
@ComponentScan("org.vinodh.camunda")
public class DatabaseDemoApplication {
public static void main(String[] args) {
SpringApplication.run(DatabaseDemoApplication.class, args);
DataAccessObject dao = new DataAccessObject();
dao.getCircleCount();
}
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext context) {
JdbcTemplate jdbcTemplate = (JdbcTemplate) context.getBean("jdbcTemplate");
int count = jdbcTemplate.queryForObject("SELECT COUNT(*) FROM CIRCLE", Integer.class);
System.out.println(count);
return null;
}
}
实际上我不应该在这两个地方都得到计数吗?
解决方案
在 main 方法中,您自己实例化 DataAccessObject。对象创建中不涉及 Spring,因此自动装配不起作用。
public static void main(String[] args) {
SpringApplication.run(DatabaseDemoApplication.class, args);
DataAccessObject dao = new DataAccessObject();
dao.getCircleCount();
}
请尝试以下代码:
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(DatabaseDemoApplication.class, args);
DataAccessObject dao = context.getBean(DataAccessObject.class);
dao.getCircleCount();
}
推荐阅读
- list - 如何将列表索引(网格)与片段元素进行比较?
- html - 使用引导封面模板时出现页脚错误
- c++ - 与处于有点爆炸状态的串行端口通信
- entity-framework-core - 如何 EF.Property
方法适用于包含的查询 - css - 使用带有滚动事件的 margin-top 来修复一个在某些滚动区域中具有相对位置的 div 会导致滞后
- reactjs - 修改循环中生成的组件列表中的道具
- java - 将几个链表的内容添加到一个更大的链表中并不断更新它
- django - 停止自引用模型中的无限循环
- php - 如何验证格式的表单域 - 00.000.000.0-000.000
- javascript - 如何检查 nodeJS 中的前 3 个或 4 个元素是否为真?