0

yml に複数のデータベースがあります。国固有のリポジ​​トリを取得するにはどうすればよいですか? 実行時に国名を取得しています。国名に基づいて、その国のデータベースで操作を行う必要があります。単一のデータベースで、yml からデフォルトのデータベース リポジトリを取得します。

micronaut ドキュメントに従って: 複数のデータソースのシナリオでは、@io.micronaut.data.annotation.Repository アノテーションを使用して、使用するデータソース構成を指定できます。デフォルトでは、Micronaut Data はデフォルトのデータソースを探します。

私のクエリはすべてのデータベースで同じままで、操作のために実行時に選択されるのはdbインスタンスのみです。

https://micronaut-projects.github.io/micronaut-data/snapshot/guide/index.html

エラー:

Caused by: io.micronaut.context.exceptions.NonUniqueBeanException: Multiple possible bean candidates found: [io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations, io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations, io.micronaut.data.jdbc.operations.DefaultJdbcRepositoryOperations]

yml

datasources:
  india-db:
    validationQuery: SELECT 1 FROM DUAL
    driverClass: oracle.jdbc.driver.OracleDriver
    url: url-1
    autoCommit: true
    username: username
    password: password
  australia-db:
    validationQuery: SELECT 1 FROM DUAL
    driverClass: oracle.jdbc.driver.OracleDriver
    url: url-2
    autoCommit: true
    username: password
    password: password
  japan-db:
    validationQuery: SELECT 1 FROM DUAL
    driverClass: oracle.jdbc.driver.OracleDriver
    url: url-3
    autoCommit: true
    username: username
    password: password

リポジトリ

//@Repository(value = "india-db")
@JdbcRepository(dialect = Dialect.ORACLE)
public class AppRepository {

    private final JdbcOperations jdbcOperations;

    @Inject
    public AppRepository(JdbcOperations jdbcOperations) {
        this.jdbcOperations = jdbcOperations;
    }
    
    @Transactional
    public String operation(){
    }
}

サービス

@Singleton
public class AppService {
   
    AppRepository appRepository;
   
    @Inject
    public AppService(AppRepository appRepository){
      this.appRepository=appRepository;
    }
    
    public void method(String country){
    if(country.equals("india"){  
       //do india operation with india-db
       appRepository.operation();
    }else if(australia){
      //do australia operation with australia -db
        appRepository.operation();
     }else if(japan){
      //do japan operation with japan-db
       appRepository.operation();
     }
     else{
     throw exception();
     }
    }
}   
4

1 に答える 1