私は Windows で開発した Web アプリケーションを持っています。その後、それを Linux (Staging nad Production) にデプロイします。
環境ごとに 3 つの .properties ファイルを作成しました。
- application-dev.properties
- application-staging.properties
- application-prod.properties
次の解決策を実装することにしました。関連する値(dev / staging / prod)を使用して各マシンに環境変数を作成し、これに従って、corect .properties ファイルをロードできるようにします。
このソリューションは Windows では完全に機能しますが、Linux では同じように機能させることができません。
これは私のコードです:
Web.xml
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>com.app.server.configuration.ConfigurableApplicationContextInitializer</param-value>
</context-param>
ConfigurableApplicationContextInitializer クラス:
import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
public class ConfigurableApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext context) {
String APP_ENV = System.getenv("APP_ENV");
context.getEnvironment().setActiveProfiles(APP_ENV);
System.setProperty("spring.profiles.active", APP_ENV);
}
}
ContextsConfiguration クラス:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
@Configuration
@PropertySource("classpath:application-${spring.profiles.active}.properties")
public class ContextsConfiguration {
@Bean
public static PropertySourcesPlaceholderConfigurer configurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Value("${FTPport}")
public String FTPport;
@Value("${FTPserver}")
Linux では、この変数 (APP_ENV) を何百万もの場所で定義しました。.environment ファイル、.bash ファイル、setenv.sh ファイル。また、printenvを実行すると、そこに表示されます。
System.getenv("APP_ENV") の値と出力される「ステージング」値を出力するメインの単純な Java クラスを作成しようとしました。
しかし、私のアプリケーションでは、ステージングではなく開発が常に表示されます。
ステージングを確認する唯一の方法は、「ハードコードされた」アクティブ プロファイルを web.xml に追加することです。
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
しかし、私は本当にこの方法で作業したくありません。自動的かつ動的に認識されるようにしたいのです。
助けてください :)