2016-07-25 6 views
1

@EnableJpaRepositories annotaionのjpa構成ファイルがあります。私はこのようなapplication.propertiesファイルからこのannotaion値を設定します。プロパティファイルから@EnableJpaRepositoriesに文字列の配列を設定する方法

@EnableJpaRepositories("${jpa.repository.packages}") 
public class JPAConfiguration { 
    .... 
} 

とここに私のapplication.propertiesファイルです:

jpa.repository.packages=com.epms.model 

、それは完璧に動作します。しかし、私は@EnableJpaRepositoriesに複数のパッケージを指定したい。これに

jpa.repository.packages=com.epms.model,com.ecms.model 

も設定ファイルを:

@EnableJpaRepositories("#{'${jpa.repository.packages}'.split(',')}") 
public class JPAConfiguration { 
} 

をそれが働いていないので、私はこれに私の設定ファイルを変更しました。何か案が ?私はどのように私の設定ファイルでこれを行うことができますか?

+0

スキャンしたいすべてのパッケージはcomパッケージの下にありますか? – amicoderozer

+0

いいえ、設定ファイルからロードする必要があります – zhozhe

+0

@zhozhe私はまったく同じ問題を扱っています。私はリポジトリパッケージをハードコードしたくないが、それを行う方法を見つけていない。回避策を見つけましたか? – zerayaqob

答えて

4

@amicoderozerが尋ねるように、クラスが共通の基本パッケージを共有している場合は、ルートパッケージを指定する必要があります。

多分問題を(あなたが設定ファイルからロードしているか、手動でそれらを宣言しているにもかかわらず)それはあなたのケースではない場合(が任意の例外またはランタイム・トレースを掲示するのに役立ちますが)split方法が使用されている方法です。配列を返し、生成されたコードは次のようになります:

@EnableJpaRepositories("jpa.repository.packages1","jpa.repository.packages2") 

このコードはコンパイルされません。

は、コンポーネントの注釈内の春ELを試したことはありませんが、これにもかかわらず、多分あなたはbasePackagesをこのように示すべきである:

@EnableJpaRepositories(basePackages = "#{'${jpa.repository.packages}'.split(',')}") 

私はお勧め、動作しない場合まず手動配列宣言でテストしてください:

@EnableJpaRepositories(basePackages = { "com.epms.model","com.ecms.model" }) 

期待どおりに動作し、次に設定ファイルからの読み込みと解析を再試行します。


UPDATE:いくつかの測定値の後 、私はそれはあなたがやりたいことができないと結論付けました。 SpELにはin many placesが許可されていますが、アノテーションには@Value注釈付きの文書と実例のみがあります。

+0

私の場合は@amicoderozerに言われたように、さまざまなパッケージがあり、私はこのアプローチを使用しなければなりません。私は手動の配列宣言でこれを試してみましたが、完璧に動作しますが、SPELを使用したいときには失敗します。(あなたの推奨された方法でも) – zhozhe

+0

失敗したら何が出力されますか? – exoddus

+0

このパッケージではBeanのロードに失敗し、Springではこの例外がスローされます。[ir.epms.model.user.UserRepository]タイプの適格なBeanは見つかりませんでした。 – zhozhe

関連する問題