簡體   English   中英

Spring Boot 找不到 JdbcTemplate 的數據源

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM