2017-01-20 15 views
6

ターゲットフォルダには、2つのフォルダ、lib、confがあります。すべてのプロパティファイルはconfフォルダに置かれ、jarファイルはlibフォルダーに置かれます。スプリングブートjar以外のプロパティファイルを読む方法

ブートを春に以前、我々は

<context:property-placeholder location="classpath*:*.properties"/> 

@valueなどのJavaコードで使用するspring.xml内の設定を以下の使用します。

@Value("${name}") 

private String name; 

が、春ブーツで、私はしないでくださいJavaコードで同じことをする方法を知っている。

私は、次の試してみました

ではなく、解決策が見つかり

@Configuration 
@PropertySource(value = "classpath:aaa.properties") 
public class AppConfig { 
    @Bean 
    public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
    return new PropertySourcesPlaceholderConfigurer(); 
    } 
} 

答えて

13

に設定ファイルを読み込むことができ、私は質問のタイトルと説明で混乱ビットです。うまくいけば私はあなたに私のコメントをさらに混乱させません。

一般に、Springのブートは、作成されたバイナリだけでなく、プロジェクトの構造についても非常によく知られています。推薦された方法(Spring Bootの意見)は、内部のすべての依存関係(jarファイル)を持つjarファイルを作成することです。ファットjarの外に定義された構成プロパティー(またはそれがビルドされている場合は戦争)が必要な場合、Spring Bootは多くのオプションを提供します(リファレンス1を参照)。あなたが定義するために、環境変数を使用することにより、同様の何かを行うことができます

java -jar -Dspring.config.location=<path-to-file> myBootProject.jar 

お知らせ:私は私のアプリは、システムのプロパティで設定することができますフラグを使用して外部ファイル(spring.config.location)を指すのが好きあなたの外部ファイルがどこにあるか。

こちらがお役に立てば幸いです。

参考:別の解決策を見つけた 1. https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

+0

私は乗算プロパティファイルを持っている場合おかげで、このオファー大きな価値 –

+0

あなたは別の設定クラスでそれを読み込む方法を、知っていますファイル? –

+0

複数の外部ファイルを参照していますか? – Alberto

1

仕事:

最初のクラスを作成し、@ConfigurationProperties

@ConfigurationProperties(prefix = "asdf", locations = "file:conf/aaa.properties") 
public class ASDF { 
    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

を追加してくださいは、場所に注意し、私は、ファイルを使用します、クラスパスではありません。アプリケーションクラスで、その後

、@EnableConfigurationProperties

@SpringBootApplication 
@EnableConfigurationProperties({ASDF.class, BBB.class}) 
public class InitialBeanTestApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(InitialBeanTestApplication.class, args); 
    } 
} 

を追加し、あなたはconfフォルダ

0

すべての設定を1つのapplication.propertiesファイルに置き、コードで@Value( "$ {name}")を使用して読み取ります。

アセンブリファイルを使用して、リソースフォルダのファイルをターゲット構成フォルダにコピーします。

と配備後、configフォルダ内のapplication.propertiesファイルを変更してアプリケーションを実行するだけで済みます。

これは、春のブートアプリケーションのプロパティファイルを次の順序で読み込んでいるためです。

カレントディレクトリクラスパスの/ configパッケージクラスパスのルート

•カレントディレクトリ

にある/ configサブディレクトリ•

が、これは1つの特性のために働きますファイル。

4

私と同じ状況に対処しているのかどうかはわかりませんが、私の場合は、その外にjarファイルと* .propertiesファイルがあります。私は瓶の外側に配置* .propertiesファイルを取得するためにやったことは次だった:

@Configuration 
public class ApplicationContext { 

    @Bean 
    public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
    PropertySourcesPlaceholderConfigurer properties = new PropertySourcesPlaceholderConfigurer(); 
    properties.setLocation(new FileSystemResource("application.properties")); 
    properties.setIgnoreResourceNotFound(false); 

    return properties; 
    } 
} 

私は私がproperties.filesを得ることができた、私はFileSystemResourceオブジェクトを作成しapplication.propertiesファイルの場所を設定していますそれは瓶の隣にあります。たとえば、.propertiesファイルがクラスパスにある場合は、ClassPathResourceなどの他のクラスを使用できます。あなたは、org.springframework.core.ioパッケージの下でResourceオブジェクトを取得するために春に提供する他のクラスを読むことができます。

このコメントが役立ちますようお願いいたします。

+0

これはもっと汎用的な解決策です。代わりに 'setLocations'メソッドを使用して複数の場所を設定したい場合。 – SashikaXP

1

Spring Boot docsで述べたように、

SpringApplicationは、次の場所にapplication.properties ファイルからプロパティをロードし、春 環境に追加します:

  1. 現在のA/configサブディレクトリディレクトリ。
  2. カレントディレクトリ
  3. クラスパス/コンフィグパッケージ
  4. クラスパス・ルート

リストは優先順位(リストオーバーライドが高い場所 に定義されたプロパティ低い場所で定義されたもの)によって順序付けされます。

「conf」ディレクトリの名前を「config」に変更すると、問題なく動作します。したがって、上記の4以外の場所でプロパティファイルを必要としない限り、追加の設定を行う必要はありません。

この場合、プロパティのソースを明示的に定義することができます。

@PropertySource("classpath:config.properties") 

と複数のプロパティのための

@PropertySources({ 
    @PropertySource("classpath:config.properties"), 
    @PropertySource("classpath:logging.properties"), 
    @PropertySource(value="classpath:missing.properties", ignoreResourceNotFound=true) 
}) 
関連する問題