2017-08-26 8 views
-1

MySqlMongoデータベースのプロパティファイルは、Mavenプロファイルに基づいて起動時に読み込まれます。それは、MySQLのためであるとして、代わりにCrudRepositoryMongoRepository:モンゴについてはapplication.propertiesに基づいて異なるリポジトリクラスを注入することは可能ですか?

は、他のレポジトリを注入するために必要とされます。

application.propertiesのプロパティでこれを解決することができます。このプロパティに基づいて、1つまたは別のリポジトリを挿入しますか?

私のアプリは単純なスプリングブートアプリケーションで、リポジトリはコントローラから注入されます。

+0

「MongoRepository」、「CrudRepository」のサンプルコード、およびそれらを注入する場所を指定する必要があります。 – alirabiee

答えて

0

両方のリポジトリに、実際のBeanをロードする共通のインタフェースがあると仮定します。はいそれはある

@Bean 
public Repository actualRepository(@Value("isMongo") boolean isMongo, MongoRepository mongoRepository, CrudRepository crudRepository) { 
    isMongo ? mongoRepository : crudRepository; 
} 
0

を:(私はそれをテストしていない)

@Autowired 
MongoRepository mongoRepository; 
@Autowired 
CrudRepository crudRepository; 

@Value("isMongo") 
boolean isMongo; 

private Repository actualRepository; 

@PostConstruct 
    public void init() { 
    actualRepository = isMongo ? mongoRepository : crudRepository; 
    } 

あなたは、いくつかの他のBeanにこのリポジトリが必要な場合は、おそらくあなたもBeanを作成することができます。私はこのような何かを試してみました非常に実行可能です。 Spring Bootでは、profilesでこれを行います。プロファイルを使用すると、@Repository(および他の@Components)を有効または無効にすることができます。

@Repository 
@Profile("mongo") 
public interface MyMongoRepo extends MongoRepository<SomeObject, String> { 

} 


@Repository 
@Profile("mysql") 
public interface MyMysqlRepo extends CrudRepository<SomeObject, String> { 

} 

明らかに、必要なプロファイル名を使用できます。プロファイルは、コマンドラインまたはapplication.propertiesファイルを介して設定できます。

spring.profiles.active=mysql 
関連する問題