1

私は 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>

しかし、私は本当にこの方法で作業したくありません。自動的かつ動的に認識されるようにしたいのです。

助けてください :)

4

2 に答える 2

0

どうやらsetenv.shの正しい場所は次のとおりです。usr/share/tomcat7/bin そして、「dev」値を持つ古いファイルがありました:)したがって、このファイルを修正した後、完全に機能します:)

于 2015-11-25T08:22:10.467 に答える
0

考えられる理由の 1 つは、Tomcat が別のユーザーで実行されているため、Tomcat を実行しているそのユーザーの環境変数を設定する必要がある場合があります。

$CATALINA_BASE/bin/setenv.shファイルでTomcatに必要な環境変数を設定することもできます

于 2015-11-24T18:23:58.273 に答える