SpringBoot和SpringJDBC多个数据源
我正在尝试在SpringBoot应用程序中使用两个数据源,但无法将第二个数据源自动装配。我尝试了很多事情,但这是我最近来的事情:
我的Yaml文件:
spring: first-datasource:
url: MyURLString1
username: User
password: Password
driver-class-name: oracle.jdbc.OracleDriver
second-datasource:
url: MyURLString2
username: User
password: Password
driver-class-name: oracle.jdbc.OracleDriver
我的申请类别:
@SpringBootApplicationpublic class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.first-datasource")
public DataSource firstDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@ConfigurationProperties(prefix = "spring.second-datasource")
public DataSource secondDataSource() {
return DataSourceBuilder.create().build();
}
}
最后是我的DAO:
@Repositorypublic class MyDao {
private static final String FIRST_SELECT = "select * from SomeTableInDB1";
private static final String SECOND_SELECT = "select * from AnotherTableInDB2";
@Autowired
private JdbcTemplate firstJdbcTemplate;
@Autowired
@Qualifier("secondDataSource")
private JdbcTemplate secondJdbcTemplate;
List<DB1Entity> getDB1Entity(Long id) {
return firstJdbcTemplate.query(FIRST_SELECT, new Object[] {id}, new BeanPropertyRowMapper(DB1Entity.class));
}
List<DB2Entity> getDB2Entity(Long id) {
return secondJdbcTemplate.query(SECOND_SELECT, new Object[] {id}, new BeanPropertyRowMapper(DB2Entity.class));
}
}
这是我到目前为止最接近的。我说这是最接近的,因为如果我删除@Qualifier,那么我的两个dao方法都可以正常工作,假设SECOND_SELECT语句对我的DB1是有效的SQL。一旦为非主要datasouce输入@Qualifier,我就会收到自动装配错误,因为Spring期望使用Datasouce对象,而不是JdbcTemplate对象。这对我来说很奇怪,因为它可以与主要数据源一起使用。
这是我的错误:
无法自动连线栏位:私人org.springframework.jdbc.core.JdbcTemplate
org.my.classpath.secondJdbcTemplate;
嵌套的异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有找到类型为[org.springframework.jdbc.core.JdbcTemplate]的合格Bean作为依赖项:至少需要1个有资格作为此依赖项的自动装配候选的bean。依赖项注释:{@
org.springframework.beans.factory.annotation.Autowired(required = true),@
org.springframework.beans.factory.annotation.Qualifier(value =
secondDataSource)}
回答:
您创建了类型的Bean ,但是尝试自动 装配 JdbcTemplate,这是不匹配的。您可能应该有这样的东西
private JdbcTemplate jdbcTemplate1;private JdbcTemplate jdbcTemplate2;
@Autowired
@Qualifier("firstDataSource")
public void setDataSource(DataSource dataSource){
this.jdbcTemplate1=new JdbcTemplate(dataSource);
}
@Autowired
@Qualifier("secondDataSource")
public void setDataSource(DataSource dataSource){
this.jdbcTemplate2=new JdbcTemplate(dataSource);
}
以上是 SpringBoot和SpringJDBC多个数据源 的全部内容, 来源链接: utcz.com/qa/413039.html