2

フィルタリングされている spring.profiles.active という名前のキーを含む initParameters.properties という名前のファイルがありますが、Spring はまだこのプロパティを認識していないため、それだけでは十分ではありません。
私はAbstractAnnotationConfigDispatcherServletInitializerを WebAppInitializer として使用して
いますが、その重要な部分は次のとおりです。

@Override
public void onStartup(ServletContext servletContext) throws ServletException {
    super.onStartup(servletContext);
    setInitParameters(servletContext);
}

@SneakyThrows
private void setInitParameters(ServletContext servletContext) {
    Properties initParams = new Properties();
    initParams.load(new ClassPathResource("initParameters.properties").getInputStream());
    initParams.stringPropertyNames().stream().forEach(propertyName -> CHOOSE_OPTION_HERE);
}

オプション1:

servletContext.setInitParameter(propertyName, initParams.getProperty(propertyName))

オプション 2:

System.setProperty(propertyName, initParams.getProperty(propertyName))

どちらの方法でも機能しますが、一方がシステム プロパティであり、もう一方が initParameter であることを除けば、それらの違いは何なのかわかりません。
多くの場合、アプリケーションの起動中にシステム プロパティ -Dspring.profiles.active=someProfile を設定すると、.properties ファイルのフィルタリングも含めてすべてが上書きされるので、問題ありません。
私はいくつかの説明、賛否両論を求めてインターネット全体を探していましたが、何も見つかりませんでした。
また、.properties ファイルから直接プロパティについてスプリングに通知する方法がある場合は、その方法も知りたいです (つまり、setInitParameters の部分をスキップします)。Spring Boot は自動的にそれを検出すると思いますが、私はそれを使用していないので、Spring にそのようなものがあるかどうか疑問に思っていました。御時間ありがとうございます。

4

0 に答える 0