Среда: Java (Java EE), контейнер Tomcat
На работе подавляющее большинство наших приложений работают в контейнере Glassfish, и (как обычно) у нас есть множество свойств, выведенных из наших приложений и введенныхв нашу Glassfish-среду с помощью файла app.properties, где Glassfish затем представляет их нашему приложению, делая стандартный системный вызов примерно так:
System.getProperty( "myProp" );
Однако у нас есть одно конкретное приложение, чембыл развернут на Tomcat-контейнере (и из-за большой бюрократии здесь, это не изменится в ближайшее время);первоначальный автор также не потратил время на изучение того, как сделать экстернализацию свойств с использованием Tomcat, как это делается с Glassfish.В результате в этом приложении есть несколько вещей, в которых вы должны закомментировать некоторые строки кода при развертывании на нашем тестовом сервере и закомментировать различные строки кода при развертывании на нашем производственном сервере.Настоящая боль и потенциальная причина проблем.
Так что я пытаюсь это исправить.Из моего исследования кажется, что способ сделать это в Tomcat - через файл server.xml
Tomcat, что-то вроде этого:
<Environment name="myProp" type="java.lang.String" value="This is my value"/>
Затем из того, что я прочитал здесь ,Доступ к myProp должен быть таким же, как и доступ к <code><env-entry
> в web.xml
, поэтому на изображении у меня есть такая запись:
<env-entry>
<env-entry-name>myOtherProp</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>This is my other value</env-entry-value>
</env-entry>
Затем я реализовал следующий кодв моем Spring#handleRequestInternal()
:
Context ctx = new InitialContext();
String myProp = "<not found>";
try {
myProp = (String) ctx.lookup( "java:comp/env/myProp" ); // from Tomcat's server.xml
} catch( Exception e ) { ... }
String myOtherProp = "<not found>";
try {
myOtherProp = (String) ctx.lookup( "java:comp/env/myOtherProp" ); // from web.xml
} catch( Exception e ) { ... }
Тем не менее, когда я регистрирую 'myProp' и 'myOtherProp', тот из моего web.xml возвращает правильное значение, тогда как тот из сервера Tomcat server.xml не найден (поймал при попытке / поймать).
Что дает?Как установить переменную среды вне моего приложения через Tomcat-контейнер и извлечь ее из моего приложения?