我正在运行 Tomcat 7,我需要向两个 Web 应用程序传递一个具有相同名称但每个 Web 应用程序具有不同值的环境变量。
有没有办法在不使用 JNDI 的情况下拥有应用程序特定的环境变量(每个应用程序相同的变量具有不同的值)?
我正在考虑在特定于应用程序的上下文中使用 -Dname=bob 之类的东西。
每个应用程序创建一个名为应用程序 war 文件的文件,并将该文件放置在 Tomcat 7 conf/Catalina/localhost/ 目录中。
每个文件可以包含一些特定于应用程序的环境变量。
例如,部署在webapps目录下的两个应用程序project1.war和project2.war。
在文件conf/Catalina/localhost/project1.xml中
<Context path="" docBase="project1">
<Environment name="product" value="one" type="java.lang.String" override="false" />
</Context>
Run Code Online (Sandbox Code Playgroud)
conf/Catalina/localhost/project2.xml
<Context path="" docBase="project1">
<Environment name="product" value="two" type="java.lang.String" override="false" />
</Context>
Run Code Online (Sandbox Code Playgroud)
我也没有经历过双重部署。
我的开发服务器主机是:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" deployOnStartup="true">
Run Code Online (Sandbox Code Playgroud)
我的生产服务器主机是:
<Host name="www.learnintouch.com" appBase="webapps" unpackWARs="true" autoDeploy="true" deployOnStartup="true">
Run Code Online (Sandbox Code Playgroud)
为了检索变量的值,我使用 Spring 条件上下文:
public class ProductProjectCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEnvironment().getProperty("product") == null || context.getEnvironment().getProperty("product").equals("project");
}
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Conditional(ProductProjectCondition.class)
public @interface ProductProject {
}
Run Code Online (Sandbox Code Playgroud)
然后就可以使用@ProductProject注释。
| 归档时间: |
|
| 查看次数: |
4520 次 |
| 最近记录: |