2017-10-17 109 views
1

我有一個恰好使用Camunda for BPMN的Spring Boot應用程序。一切正常。我有我的application.properties文件中的Hikairi DBPool和數據源屬性。每一件事情運行正常,工作流程和工作等..Spring Boot找不到JdbcTemplate的DataSource

我現在想通過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正在使用它並將其自身添加爲用於池化的DataSource。如果我只是刪除了@Component並且它至少部署了,但正如你所想的那樣,它會在getJdbcTemplate()調用中引發一個空指針。

是否有一個註釋我錯過了,讓它自動裝載正確並將DataSource暴露給我的JdbcTemplate?

回答

2

首先,您應該用@Repository註釋標註MyDao,而不是僅用@Component標註。爲此,請花一點時間閱讀What's the difference between @Component, @Repository & @Service annotations in Spring?

其次,看你的例外,看來你是缺少的JdbcTemplate的注入在MyDao /數據源。對於這一點,如果您正在使用的數據源本身的工作並沒有隨着JdbcTemplate,你可以注入數據源如下:

@Autowired 
public void setDs(DataSource dataSource) { 
    setDataSource(dataSource); 
} 

但是,如果您使用的是JdbcTemplate,你可以添加你體內的setter注入MyDao如下:

@Autowired 
public void setJT(JdbcTemplate jdbcTemplate) { 
    setJdbcTemplate(jdbcTemplate); 
}