7

有没有办法为tomcat中的不同war文件设置不同的环境变量?我正在使用第 3 方战争,需要对同一战争进行多次部署,但使用不同的环境变量(因此它会加载不同的配置)。

4

2 回答 2

1

如果您独立运行 Tomcat 的两个实例,这很容易。我假设您在这里谈论的是操作系统环境变量。

您还可以在 Tomcat 中为每个 war/web 应用程序设置属性。这将让您在一个 Tomcat 实例中运行两场战争。但这不是你问的。

于 2013-06-05T18:05:48.317 回答
1

好的,完全疯狂的黑客想法:

为每个应用程序实例实现一个 PropertyPlayHolderConfigurer(或使用 Tomcat 中的 web.xml)并加载与 System.properties() 相同的名称。

然后,创建一个包含两组属性的委托 Properties 类。然后

Properties props = new DelegatingProperties(app1Props,app2Props)
System.setProperties(delegate);

public class DelegatingProperties extends Properties {

   private Properties app1Props;
   private Properties app2Props;

   public DelegatingProperties(Properties app1Props, Properties app2Props) {
        this.app1Props = app1Props;
        this.app2Props = app2Props;   
   }

   public String getProperty(String prop) {
       // begin crazy science
       String caller = new Throwable().getStackTrace()[0].getClassName();
       // this is where you get creative.
       // Do the System.setProperties() above so you can intercept calls to  
       //getProperty()
       // and find out the FQCN of the library class(es) that need these variable 
       // (use your debugger).
       // then implement the logic here to decide which of the 2 property sets you have
       // you will query to get the correct results     
   }
}

这些是我们正在谈论的SYSTEM属性,它们旨在应用于系统范围。您的库可能是在 1-app-1-jvm 时开发的(或者开发人员也可能是迟到的)。

我至少可以得到创造力的道具吗?:)

于 2013-06-06T17:25:57.653 回答