【问题标题】:Tomcat 7 application Java environment variables (JNDI-less)Tomcat 7 应用程序 Java 环境变量(无 JNDI)
【发布时间】:2014-10-30 11:52:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: tomcat7


    【解决方案1】:

    为每个应用程序创建一个文件,命名为应用程序 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>
    

    conf/Catalina/localhost/project2.xml

    <Context path="" docBase="project1">
      <Environment name="product" value="two" type="java.lang.String" override="false" />
    </Context>
    

    我也没有经历过双重部署。

    我的开发服务器主机是:

    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true" deployOnStartup="true">
    

    我的生产服务器主机是:

    <Host name="www.learnintouch.com"  appBase="webapps" unpackWARs="true" autoDeploy="true" deployOnStartup="true">
    

    为了检索变量的值,我使用了 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 {
    }
    

    然后可以使用@ProductProject 注释。

    【讨论】:

    • 我尝试了这种方法,但两个应用程序都没有看到环境变量
    • 您的两个 xml 文件有应用程序名称吗?有没有被加载? Tomcat 控制台说明了什么?
    • 1.) 是的,两个 xml 文件。 2.) tomcat 日志确认它们正在加载。 3.) 看来我必须通过 InitialContext.lookup() 而不是 System.getEnv() 或 System.getProperties() 找到这些,这是我在这种情况下需要的
    • 我使用 Spring 条件上下文来检索环境变量的值。我已经编辑了问题。
    • 你的文件在tomcat重启时被删除了吗?你有 autoDeploy=true 吗?你如何处理这个问题:serverfault.com/questions/192784/…
    猜你喜欢
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 2015-03-29
    • 1970-01-01
    相关资源
    最近更新 更多