簡體   English   中英

Spring 引導定義兩個數據源

[英]Spring Boot defining two datasources

我有一個 Java 4 和 Spring Boot 2.4.0-SNAPSHOT 應用程序。

它需要訪問兩個單獨的數據源。 我也在使用 Spring jdbc 來查詢數據庫。

我已經嘗試了一個實現(見下文),但我得到了錯誤。

我有以下內容:

應用程序屬性

# pims datasource
spring.datasource1.driver-class-name=org.postgresql.Driver
spring.datasource1.url=jdbc:postgresql://localhost:5432/pims
spring.datasource1.username=postgres
spring.datasource1.password=
spring.jpa.database-platform=postgres
#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.show-sql=false
# approval datasource
spring.datasource2.driver-class-name=org.postgresql.Driver
spring.datasource2.url=jdbc:postgresql://localhost:5432/approval
spring.datasource2.username=postgres
spring.datasource2.password=

MultipleDBConfig.java

@Configuration
@ComponentScan(basePackages = "com.nexct")
public class MultipleDBConfig {

    @Bean(name = "datasource1")
    @ConfigurationProperties("spring.datasource1")
    @Primary
    public DataSource dataSource1(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "datasource2")
    @ConfigurationProperties("spring.datasource2")
    public DataSource dataSource2(){
        return DataSourceBuilder.create().build();
    }
}

然后在 DAO 中,我定義了 jdbcTemplate。

公司聯系DAOImpl.java

@Repository
public class CompanyContactDAOImpl implements CompanyContactDAO {

    @Autowired
    @Qualifier("datasource1") // pims datasource
    private JdbcTemplate jdbcTemplate;

ApprovalRequestDAOImpl.java

@Repository
public class ApprovalRequestDAOImpl implements ApprovalRequestDAO {

    @Autowired
    @Qualifier("datasource2") // approval datasource
    private JdbcTemplate jdbcTemplate;

現在當我啟動 Spring Boot 時,我收到以下錯誤:

無法自動接線。 合格的 bean 必須是“JdbcTemplate”類型。

上下文初始化期間遇到異常 - 取消刷新嘗試:org.springframework.beans.factory.UnsatisfiedDependencyException:創建名稱為“approvalRequestDAOImpl”的bean時出錯:通過字段“jdbcTemplate”表示的依賴關系不滿足; 嵌套異常是 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("datasource2")}

org.springframework.beans.factory.UnsatisfiedDependencyException:創建名為“approvalRequestDAOImpl”的bean時出錯:通過字段“jdbcTemplate”表示的依賴關系不滿足; 嵌套異常是 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("datasource2")} 原因: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("datasource2")}

堆棧跟蹤與其他內容有關。 您的 JdbcTemplates需要數據源,它們本身不是數據源。 創建一個 JdbcTemplate 並注入數據源,而不是在 JdbcTemplates 上設置限定符,例如:

@Repository
public class ApprovalRequestDAOImpl implements ApprovalRequestDAO {

    private JdbcTemplate jdbcTemplate;

    public ApprovalRequestDAOImple(@Qualifier("datasource2") DataSource ds) {
        this.jdbcTemplate = new JdbcTemplate(ds);
    }
}

更多信息在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM