Different environment variables per war in tomcat

后端 未结 2 1249
攒了一身酷
攒了一身酷 2021-01-19 02:23

Is there a way to have different environment variables for different war files in tomcat? I am using a 3rd party war and need to have multiple deployments of the same war b

2条回答
  •  谎友^
    谎友^ (楼主)
    2021-01-19 02:54

    Ok, total crazy hack idea:

    Implement a PropertyPlayHolderConfigurer (or use web.xml from Tomcat) for each app instance and load properties same name as you have for System.properties().

    Then, create a delegate Properties class that contains both sets of properties. Then

    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     
       }
    }
    

    These are SYSTEM properties we are talking about and they are meant to apply system wide. Your library was probably developed when it was 1-app-1-jvm (or the developer is a tard which is also likely).

    Can I atleast get props for creativity? :)

提交回复
热议问题