2017-03-31 6 views
0

にWEB-INFディレクトリからファイルを、私はプロパティを読み取るしようとしているエラーが私のJavaサービスでは春

@Configuration 
@ComponentScan(basePackages = { "com.site.xxx.*" }) 
@PropertySource("classpath:application.properties") 
@Service("someService") 
public class SomeService { 
    @Autowired 
    private Environment env; 
    ... 
} 

以下のようにファイルとそれから、私のいずれかの方法で、私は

を行います
String closeDate = env.getProperty("close.date"); 

解決策として2つの問題があります。

1>これは、application.propertiesファイルがクラスパスにある場合、ファイルを読み込む方法で機能します。私はそれをsrc/main/resourcesの下に置き、変更を配備した後にファイルを読み込みます。このプロパティファイル内の日付を変更すると、コードがコンパイルされたときに最初に入力された日付が表示されます。読み込み部分は動作しますが、ファイルの内容を変更しても変更されません。

2>私は次の行

@PropertySource("classpath:WEB-INF/application.properties") 

の内容を変更し、私は私のWEB-INFディレクトリの下にファイルを配置した場合、ファイルが存在しているにもかかわらず、それはファイルが見つかりませんでしたと言います。

私は仕事には2番を好むでしょうが、それが動作しない(私は思っていません)方法がなければ、プロパティファイルのように動作する限り#1で作業できます。

+0

オプション(1)を使用して、プロパティを変更してサーバーを再起動すると正常に動作しますか? – developer

+0

私はそれを試していない。サーバーが値を上書きするかどうかはわかりませんか? – p0tta

+0

いいえそれは上書きされません – developer

答えて

1

Springはコンテナの起動時にプロパティファイルをロードします。したがって、application.propertiesのプロパティを変更するたびに、サーバーを再起動する必要があります。だから、あなたの選択肢(1)がうまくいかない理由かもしれません。

あなたは以下の通りとあなたがmyproject.home(または任意の他の名前)を設定する必要があるとして、環境(OS)と(2)、あなたはfile:(ないclasspath:)でPropertySourceを設定することができますオプションで作業したい場合またはシステム変数。

@PropertySource("file:${myproject.home}/WEB-INF/application.properties") 

は、プロパティファイルの変更は、通常、サーバーの再起動を保証しますか?

はい、コンテナを再起動する必要があります。

+0

私はそれを試しました。再起動はファイルを上書きしないので、私はうまくいくはずです。 – p0tta

+0

システム変数や環境変数に触れずに#2を達成する方法はありますか?私は、このファイルと同じ文脈にあるWEB-INFの場所を取得するのはかなり簡単であると思いますか? – p0tta

+0

Springbootの起動時にコマンドライン引数として渡すこともできます。 – developer

関連する問題