Tomcat 7 应用程序 Java 环境变量(无 JNDI)

Ste*_*ane 5 tomcat7

我正在运行 Tomcat 7,我需要向两个 Web 应用程序传递一个具有相同名称但每个 Web 应用程序具有不同值的环境变量。

有没有办法在不使用 JNDI 的情况下拥有应用程序特定的环境变量(每个应用程序相同的变量具有不同的值)?

我正在考虑在特定于应用程序的上下文中使用 -Dname=bob 之类的东西。

Ste*_*ane 5

每个应用程序创建一个名为应用程序 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注释。