我有一个在Windows上开发的Web应用程序,之后我将其部署到Linux(暂存和生产)。
我为每个环境创建了3个.properties文件:
我决定实施以下sollution - 在每台具有相关值(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时 - 我在那里看到它。
我尝试创建简单的java类 - main,它打印System.getenv(“APP_ENV”)的值和正在打印的“staging”值。
但在我的应用程序中,我总是看到 - 开发而不是暂存。
我看到分段的唯一方法是在web.xml中添加“硬编码”活动配置文件
<context-param>
<param-name>spring.profiles.active</param-name>
<param-value>dev</param-value>
</context-param>
但我真的不想以这种方式工作,我希望它能自动识别和dinamycally。
请帮助:)
答案 0 :(得分:0)
其中一个原因可能是您的tomcat在不同的用户下运行,因此您可能需要为运行tomcat的 用户设置环境变量。
您还可以在$CATALINA_BASE/bin/setenv.sh
文件
答案 1 :(得分:0)
显然,setenv.sh的正确位置是:usr/share/tomcat7/bin
我在那里有一个带有“dev”值的旧文件:)
因此,在修复此文件后 - 它完美地运行:)