有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是否可以在没有@qualifier和@resource的情况下自动连接同一类的两个不同bean?如果是,如何进行?

我在jarfole中有一个组件,它有一个自动连接的数据源

 @Service
 Class ReadService{
      @Autowire
       DataSource readDataSource
 }


@Service
 Class WriteService{
      @Autowire
      DataSource writeDataSource
 }

我必须配置两个不同的服务器,一个用于读取,另一个用于写入。。我如何将这些数据源注入到这些从Jar插件创建的bean中


共 (2) 个答案

  1. # 1 楼答案

    你可以阅读更多here

    换句话说,您可以在属性文件中指定不同的数据源配置,并分别创建数据源bean

    app.datasource.member.url=jdbc:mysql://localhost:3306/memberdb?createDatabaseIfNotExist=true
    app.datasource.member.username=root
    app.datasource.member.password=P@ssw0rd#
    app.datasource.member.driverClassName=com.mysql.cj.jdbc.Driver
    #card number  (cardholder id, cardnumber)
    app.datasource.cardholder.url=jdbc:mysql://localhost:3306/cardholderdb?createDatabaseIfNotExist=true
    app.datasource.cardholder.username=root
    app.datasource.cardholder.password=P@ssw0rd#
    app.datasource.cardholder.driverClassName=com.mysql.cj.jdbc.Driver
    #expiration date (card id, expiration month, expiration year)
    app.datasource.card.url=jdbc:mysql://localhost:3306/carddb?createDatabaseIfNotExist=true
    app.datasource.card.username=root
    app.datasource.card.password=P@ssw0rd#
    app.datasource.card.driverClassName=com.mysql.cj.jdbc.Driver
    

    主要数据源

    @Bean
    @Primary
    @ConfigurationProperties("app.datasource.member")
    public DataSourceProperties memberDataSourceProperties() {
        return new DataSourceProperties();
    }
    @Bean
    @Primary
    @ConfigurationProperties("app.datasource.member.configuration")
    public DataSource memberDataSource() {
        return memberDataSourceProperties().initializeDataSourceBuilder()
                .type(HikariDataSource.class).build();
    
    

    用于辅助数据源

    /*cardholder data source */
    @Bean
    @ConfigurationProperties("app.datasource.cardholder")
    public DataSourceProperties cardHolderDataSourceProperties() {
        return new DataSourceProperties();
    }
    @Bean
    @ConfigurationProperties("app.datasource.cardholder.configuration")
    public DataSource cardholderDataSource() {
        return cardHolderDataSourceProperties().initializeDataSourceBuilder()
                .type(BasicDataSource.class).build();
    }
    /*card data source*/
    @Bean
    @ConfigurationProperties("app.datasource.card")
    public DataSourceProperties cardDataSourceProperties() {
        return new DataSourceProperties();
    }
    @Bean
    @ConfigurationProperties("app.datasource.card.configuration")
    public DataSource cardDataSource() {
        return cardDataSourceProperties().initializeDataSourceBuilder()
                .type(BasicDataSource.class).build();
    }
    

    并在实体声明中指定模式

    @Table(name = "member", schema = "memberdb")
    
  2. # 2 楼答案

    如果基于同一个组件构建两个独立的应用程序,只需在两个应用程序的application.yml(或application.properties)中使用不同的数据库连接设置即可

    对于“编写”应用程序:

    spring:
      datasource:
        url: jdbc:postgresql://localhost:5433/writeDB
        username: "username"
        password: "password"
    

    对于“阅读”应用程序:

    spring:
      datasource:
        url: jdbc:postgresql://localhost:5433/readDB
        username: "username"
        password: "password"