2017-01-20 4 views
0

私はプロジェクトの構造は、このプロジェクトでは この依存モジュールで@Valueを解決できないのはなぜですか?

以下
example(artifactId = example) 
+- demo(artifactId = demo) 
| +- src 
| | +-main 
| |  +-java 
| |  +-com 
| |   +-example 
| |    +-DemoService 
| |  +-resources 
| |   +-application.properties 
| +- pom.xml 
+- demo2(artifactId = demo2) 
| +- src 
| | +-main 
| |  +-java 
| |  +-resources 
| |   +-application.properties 
| +- pom.xml 
+-pom.xml 

のように見える春のブートプロジェクト「をDEMO2」を持っているが、「デモ」の依存性です。 "example"モジュールはdemoとdemo2の両方の親です。

問題は、私はデモのapplication.propertiesに財産(site.password =パスワード)を設定したときに、私はこの

@Service 
public class DemoService { 

    @Value("${site.password}") 
    private String password; 
} 

のようなデモモジュールでそれを解決するしかし、私は設定している場合ではないということですdemo2のapplication.propertiesには、デモモジュールのDemoServiceで解決できます。

ありがとうございます!

明確にする: Demo2がメインクラスです。あなたのjarファイル内にパッケージ

答えて

0

のように使用するファイルどの設定することができますclasspath:application.properties)を使用すると、1つだけが表示されます。通常、構成をjarファイルにパッケージ化しないでください。それはmainメソッド(あなたの場合はdemo2)のパッケージで指定する必要があります。

あなたはまた、のような@Value注釈のためのいくつかのデフォルト値を指定することができます:あなたはまだjarファイルのプロパティを含める場合のようなユニークなディレクトリに入れてみてください、@Value("${site.password:mypassword}")Details

を:spring.config.location経由demo2src/main/resources/com/example/demo.propertiesとそれを含めます。

+0

ありがとうございます。私は設定がjarにパッケージ化されるべきではないことに同意します。私のプロジェクトでは、mysqlとredisなどのモジュール( "demo2"、 "demo3" ...)でデータを取得するモジュール(デモ)があります。私はmysql/redisプロパティを他のすべてのモジュールにコピーしたくないので、 "デモ"のプロパティを設定しました。プロジェクトを編成するより良い方法はありますか?たとえば、プロジェクトをいくつかの小さなプロジェクトに分けます。各モジュールはプロジェクトです。 "demo2"などがRPC経由で "デモ"からデータを取得 – Max

+0

@Maxモジュール管理について混乱しているようですあなたのケースには2つの一般的な選択肢があります1.各モジュールは単独で動作し、REST API、RPC 、またはMQであり、 'main'メソッドはたくさんあります。それぞれのモジュールは独自の設定を持っています。これはマイクロサービスアーキテクチャとも呼ばれます2.一つの' main'モジュールがあり、それは依存モジュールのメソッドを呼びます(これはRPCではありません)。あなたのケースは2番目のケースに合っていなければなりません。N個の実行インスタンスはN個の設定を意味するので、全てのconfを1つのモジュールに入れてください。 – bekce

0

アプリケーションプロパティが優先され、詳細はhttps://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

が見つけることができますしかし、あなたはまた、性質が(あなたが同じクラスパスのリソースを持っているこの

--spring.config.location=classpath:/mydefault.properties 
+0

ありがとうございました。 Demo2とDemoには独自のプロパティファイルがあります。私がしたいのは、彼ら自身のプロパティをロードさせることです。コマンド "--spring.config.location = classpath:/mydefault.properties"によって同じものが読み込まれますか? – Max

+0

このようなプロパティファイルを与えることができます--spring.config.location = classpath:/default.properties,classpath:/override.properties – ravthiru

関連する問題