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

我的申请类别:

@SpringBootApplication

public 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:

@Repository

public 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

回到顶部