![](/img/trans.png)
[英]Multiple DataSource and JdbcTemplate in Spring Boot (> 1.1.0)
[英]Spring Boot can't find DataSource for JdbcTemplate
我有一個 Spring Boot 應用程序,恰好將 Camunda 用於 BPMN。 一切正常。 我的 application.properties 文件中有 Hikairi DBPool 和數據源屬性。 一切都運行良好,工作流程工作等......
我現在想通過 JdbcTemplate 訪問我的數據庫,使用相同的數據源,因為所有表都在同一個數據庫上。 我添加這個類:
@Component
public class MyDao extends JdbcDaoSupport {
public MyRow getMyRowById(int id) {
String sql = "select * from MyTable where id = ?";
try {
MyRow myRow = (MyRow)getJdbcTemplate().queryForObject(sql, new Object[] { id }, new MyRowMapper());
return myRow;
} catch (Exception e) {
System.out.println(e.getMessage());
}
return null;
}
}
我得到錯誤:
Caused by: java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required
當我知道它在那里時,這怎么可能。 我在日志中看到 Hikari 正在使用它並將自己添加為用於池的數據源。 如果我簡單地刪除 @Component 並且它至少會部署,但正如您所想的那樣,它會在 getJdbcTemplate() 調用中拋出一個空指針。
是否缺少注釋以使其正確自動裝配並將數據源公開給我的 JdbcTemplate?
首先,您應該使用@Repository
注釋而不是僅使用@Component
注釋來注釋您的MyDao
。 為此,請花點時間閱讀Spring 中 @Component、@Repository 和 @Service 注釋之間的區別是什么? .
其次,查看您的異常,似乎您錯過了MyDao
jdbcTemplate/datasource 的MyDao
。 對於這一點,如果您使用的是數據源本身而不是JdbcTemplate
,則可以按如下方式注入數據源:
@Autowired
public void setDs(DataSource dataSource) {
setDataSource(dataSource);
}
但是,如果您使用的是JdbcTemplate
,則可以在MyDao
添加一個 setter 注入,如下所示:
@Autowired
public void setJt(JdbcTemplate jdbcTemplate) {
setJdbcTemplate(jdbcTemplate);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.