3

スタートアップ クラスとして WarLauncher (Spring ブート ローダーの一部) を指定して、実行可能な war ファイルを作成しました。すべての構成ファイル (プロパティ、Spring コンテキストなど) がリソース フォルダーの一部である場合、正常に動作します。私は、私の戦争の消費者がプロパティファイルの制御を必要とすることを期待しています. したがって、war ファイルの外にロードする必要があります。プロパティ ファイルが config フォルダーにあることを期待しています (war ファイルと並行してデプロイされます)。Maven プラグインを使用して適切なクラスパス エントリをマニフェストに追加しようとしましたが、うまくいきませんでした。

以下は、私のmaven POMファイルの関連セクションがどのように見えるかです:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-war-plugin</artifactId>
   <version>2.3</version>
   <configuration>
      <archive>
         <manifest>
            <addClasspath>true</addClasspath>
            <mainClass>org.springframework.boot.loader.WarLauncher</mainClass>
         </manifest>
         <manifestEntries>
            <Start-Class><<myclass_dont_worry_about_this>></Start-Class>
            <Class-Path>config/</Class-Path>
         </manifestEntries>
      </archive>
      <failOnMissingWebXml>false</failOnMissingWebXml>
   </configuration>
</plugin>

プロパティ ファイルの読み込みに Spring ClassPathResource() を使用しています。以下は、同じコード スニペットを示しています。

 InputStream stream = new ClassPathResource(classPathConfigFilePath).getInputStream();
 Proerties properties = new Properties();
 properties.load(stream);

実行時にプロパティ ファイルを見つけることができず、FileNotFoundException が発生します。

ありがとう。

4

1 に答える 1

5

デフォルトでは、Spring-Boot は次の場所でapplication.propertiesファイルを検索します

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

これらのファイルはすべて、利用可能な場合、その順序でロードされます。つまり、1 のプロパティを 2、3、4 でオーバーライドできます。ロードされたすべてのプロパティは の一部として利用Environmentできるため、設定用のプレースホルダーで使用できます。

上記のロード ルールに加えて、プロファイル固有のファイルをロードすることもできます。特定のプロファイルについては、application-{profile}.properties. その特定のファイルについては、上記のロード ルールも考慮されます。

ロードされたすべてのプロパティは、EnvironmentSpring の統合されたプロパティ管理を通じて利用できる手段を通じて利用できます。Environmentを直接使用して構成パラメーターを取得するか、プレースホルダーを使用し@Valueて構成用の注釈を付けることができます。

@Configuration
public class SomeConfigClass {
    @Autowired
    private Environment env;

    public DataSource dataSource() {
        SimpleDriverDataSource ds = new SimpleDriverDataSource();
        ds.setUsername(env.getProperty("jdbc.username"));
        ds.setPassword(env.getProperty("jdbc.password"));
        ds.setDriverClass(Driver.class);
        ds.setUrl(env.getProperty("jdbc.url"));
        return ds;
    }
}

または@Value

 @Configuration
public class SomeConfigClass {

    @Value("${jdbc.username}")
    private String username;

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

    @Value("${jdbc.url}")
    private String url


    public DataSource dataSource() {
        SimpleDriverDataSource ds = new SimpleDriverDataSource();
        ds.setUsername(username);
        ds.setPassword(password);
        ds.setDriverClass(Driver.class);
        ds.setUrl(url);
        return ds;
    }
}

リンク

  1. スプリング ブートREAD-ME
  2. Spring Framework プロファイルのドキュメント
  3. 春の物件管理ブログ
  4. Spring Boot ローダーの READ-ME
于 2013-12-06T08:14:29.050 に答える