Java 弹簧靴筒';找不到JdbcTemplate的数据源

Java 弹簧靴筒';找不到JdbcTemplate的数据源,java,spring,spring-boot,spring-data,camunda,Java,Spring,Spring Boot,Spring Data,Camunda,我有一个Spring Boot应用程序,它恰好使用Camunda for BPMN。一切正常。我在application.properties文件中有Hikairi数据库池和数据源属性。一切正常,工作流程正常等等 现在,我希望使用相同的数据源通过JdbcTemplate访问我的数据库,因为所有的表都在同一个数据库中。我添加了这个类: @Component public class MyDao extends JdbcDaoSupport { public MyRow getMyRowByI

我有一个Spring Boot应用程序,它恰好使用Camunda for BPMN。一切正常。我在application.properties文件中有Hikairi数据库池和数据源属性。一切正常,工作流程正常等等

现在,我希望使用相同的数据源通过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
注释来注释你的
MyDao
,而不仅仅是
@组件。因此,请花点时间阅读

其次,看看您的异常,您似乎缺少了
MyDao
中jdbcTemplate/datasource的注入。对于这一点,如果您使用的是数据源本身,而不是
JdbcTemplate
,则可以按如下方式注入数据源:

@Autowired
public void setDs(DataSource dataSource) {
     setDataSource(dataSource);
}
@Autowired
public void setJt(JdbcTemplate jdbcTemplate) {
     setJdbcTemplate(jdbcTemplate);
}
但是,如果您使用的是
JdbcTemplate
,则可以在
MyDao
内部添加setter注入,如下所示:

@Autowired
public void setDs(DataSource dataSource) {
     setDataSource(dataSource);
}
@Autowired
public void setJt(JdbcTemplate jdbcTemplate) {
     setJdbcTemplate(jdbcTemplate);
}