Spring 启动找不到 JdbcTemplate 的数据源
Spring Boot can't find DataSource for JdbcTemplate
我有一个 Spring 启动应用程序恰好将 Camunda 用于 BPMN。一切正常。我的 application.properties 文件中有 Hikairi DBPool 和数据源属性。一切都运行良好,工作流程工作等...
我现在想通过 JdbcTemplate 使用相同的数据源访问我的数据库,因为所有表都在同一个数据库中。我添加这个 class:
@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
。为此,请花点时间阅读 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);
}
我有一个 Spring 启动应用程序恰好将 Camunda 用于 BPMN。一切正常。我的 application.properties 文件中有 Hikairi DBPool 和数据源属性。一切都运行良好,工作流程工作等...
我现在想通过 JdbcTemplate 使用相同的数据源访问我的数据库,因为所有表都在同一个数据库中。我添加这个 class:
@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
。为此,请花点时间阅读 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);
}