Spring Boot无法找到JdbcTemplate

时间:2017-10-17 16:55:01

标签: java spring spring-boot spring-data camunda

我有一个Spring Boot应用程序碰巧将Camunda用于BPMN。一切正常。我在application.properties文件中有Hikairi DBPool和数据源属性。每件事情都运行良好,工作流程也很有效......

我现在想通过JdbcTemplate使用相同的DataSource访问我的数据库,因为所有表都在同一个数据库中。我添加这个类:

@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?

1 个答案:

答案 0 :(得分:3)

首先,您应该使用MyDao注释注释@Repository,而不是@Component注释。因此,请花点时间阅读What's the difference between @Component, @Repository & @Service annotations in Spring?

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

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

但是,如果您使用JdbcTemplate,则可以在MyDao内添加setter注入,如下所示:

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