2017-01-04 15 views
7

SpringApplicationは、次の場所にapplication.properties ファイルからプロパティをロードし、春 環境に追加します:Tomcat Webサーバーでapplication.propertiesをSpring用に外部化する方法は?

- A /config subdirectory of the current directory. 
- The current directory 
- A classpath /config package 
- The classpath root 

リストはプロパティは、リスト内の 高い場所で定義されている(優先順位順に並べられ下位の場所で定義されたものを上書きする)。

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files

質問:tomcatサーバー上warファイルを実行している:どのように私はd:\application.propertiesのように、application.properties外のクラスパスやTomcatコンテナ用の追加場所を追加することができますか?

上記の場所では、カスタムの場所が最も優先されます。

問題:開かれた戦争の中で、/configフォルダをtomcat webappsフォルダに追加することはできますが、webappsフォルダがクリーンアップされ、warが再展開されると、カスタム設定が失われます。

このように、私は外側に追加の場所を追加したいと思います。

+0

Tomcatのクラスパスに 'application.propeties'を入れてみましたか? –

+0

私は複数の 'war'ファイルを持ち、それぞれに' application.properties'を持っていれば、どこに置いておきますか? – membersound

+1

jarを起動するときに外部ファイルの場所を指定できます。 'java -jar myproject.jar -spring.config.location = D:/ application.properties' – Jobin

答えて

1

、私はそれを数回しなければならなかったし、私が見つけた最良の方法は、容器内のクラスパスリソースとしての外部ディレクトリを設定することです:

Tomcat classpath

その後、リソースは、あなたがしたいディレクトリの場所に外部化するとすべてが正常に動作します。 、

<beans:bean id="externalProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
      <beans:property name="location" value="classpath:[my-application-name]/applicationProperties.properties" /> 
      <beans:property name="placeholderPrefix" value="!applicationProperties{" /> 
      <beans:property name="placeholderSuffix" value="}" /> 
     </beans:bean> 

あなたはそれを見ることができるあなたは、各Tomcatに配備複数のアプリケーションを持っている場合がありますことを言ったように、あなたは、単に内のディレクトリ構造を作成することができます。春にリソースをロードするには、この方法を行うことができますフォルダあなたがあなたのSpring構成でdinamicallyアプリケーション名のセクションを維持したい場合は、あなたのwarアプリケーション

enter image description here

ごとに異なるapplication.propertiesを維持するために、クラスパスに設定され、あなたが中に、いくつかの方法でそれを行うことができますパックギアプリケーションのコンテキストパスを使用する場合もあります。

3

私にとっては、最も簡単な方法は、コンテキストファイルをTomcatのconfigフォルダ内に置くことでした。たとえば、アプリケーションがルートパス(たとえば、http://your_domain.com/)で実行されている場合は、ファイル[path_to_your_tomcat]/conf/Catalina/localhost/ROOT.xmlを作成する必要があります。アプリケーションが別のパスで実行されている場合、たとえばhttp://your_domain.com/example_pathの場合、ファイル名は[path_to_your_tomcat]/conf/Catalina/localhost/example_path.xmlのようにする必要があります。このファイルの中に、ハードドライブのどこにでも置くことができる外部のapplication.propertiesファイルへのパスを指定することができます。

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
    <Environment name="spring.config.location" value="file:/path/to/your/application/properties/file/" type="java.lang.String"/> 
</Context> 
4

はあなたのapplication.propertiesファイルを含むフォルダにspring_config_location環境変数ポインティングを設定することができます。プロパティは、そのフォルダ内のファイル

export spring_config_location=/usr/local/tomcat/conf/ 

場所:あなたの<TOMCAT_HOME>/bin/setenv.shファイル(見つからない場合は、ファイルを作成します)に次の行を追加することでこれを行うことができますTomcatの場合には

。複数のアプリがある場合は、各アプリのプロパティファイルの名前を一意に設定できます。私はこれを次のようにしています:

@SpringBootApplication 
public class MyApplication { 

    public static void main(String[] args) { 
     System.setProperty("spring.config.name", "my-app"); 
     SpringApplication.run(MyApplication.class, args); 
    } 
} 

これはBOOTで実行すると新しい名前が選択されます。 、あまりにもTomcat上に配備するとき設定した名前を持っているので、同じようSpringBootServletInitializerの構成]を上書きするには:my-app.properties

public class ServletInitializer extends SpringBootServletInitializer { 

    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 
     return application.sources(MyApplication.class).properties("spring.config.name: my-app"); 
    } 

} 

その後、あなたの特性は以下のようにファイル名が。デフォルトの名前の代わりに、Springがそれを探します。私たちのサンプルでは、​​指定したフォルダ/usr/local/tomcat/conf/にすべてのアプリケーションプロパティファイルを置くことができます。外部のプロパティが優先されます。優先順位についてはこちらをご覧ください:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

+0

これは非常に良い答えです。 –

関連する問題