2013-06-05 5 views
4

Есть ли способ иметь разные переменные среды для разных военных файлов в tomcat? Я использую стороннюю войну и нуждаюсь в нескольких развертываниях той же войны, но с разными переменными среды (поэтому он загружает разные конфигурации).Различные переменные среды на войну в tomcat

+0

Это ** ИМЕЕТ ** быть переменной окружения или это только ваш способ выразить проблему? –

+0

сторонний код делает System.getenv, поэтому он должен быть там – ekaqu

ответ

1

Его легко, если вы запускаете два экземпляра Tomcat самостоятельно. Я предполагаю, что вы говорите об переменных среды ОС.

Вы также можете установить свойства в Tomcat для каждого военного/веб-приложения. Это позволит вам запустить две войны в одном экземпляре Tomcat. Но это не то, что вы спросили.

+0

Да, мне нужно установить значение в качестве переменной окружения ОС (на самом деле нужно просто войти в System.getenv). Я мог бы попытаться настроить два разных кота (для atm нужны только два разных пути), так я бы просто сделал это в bin/setenv.sh или там лучше? – ekaqu

+0

Его очень легко с версией Tomcat от tcServer. Вам придется обратиться к Google, чтобы узнать, как с ванильным Tomcat. Я бы, вероятно, просто установил два сценария оболочки в inetd, которые запускали тот же экземпляр Tomcat, но устанавливали среду по-разному заранее. –

+0

@ekaqu буквально просто скопировать и вставить весь каталог TC –

1

Ok, общая ума хак идея:

Реализовать PropertyPlayHolderConfigurer (или использовать web.xml из Tomcat) для каждого экземпляра приложения и свойств нагрузки такое же имя, как у вас есть для System.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 (или разработчик - это тред, который также вероятно).

Могу ли я получить реквизит для творчества? :)

Смежные вопросы