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();
}
}
}