Доступ к системному свойству из Tomcat-контейнера с использованием Java - PullRequest
1 голос
/ 15 февраля 2011

Среда: 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-контейнер и извлечь ее из моего приложения?

Ответы [ 2 ]

2 голосов
/ 15 февраля 2011

Вместо помещения в файл server.xml он принадлежит файлу Context.xml для контейнера сервлетов, который вы настраиваете.См. веб-страницу конфигурации контекста tomcat. Для получения дополнительной информации.

1 голос
/ 15 февраля 2011

Единственная причина, по которой я думаю, что это не работает, - это размещение <Environment name="myProp" type="java.lang.String" value="This is my value"/> в server.xml

Попробуйте поставить <Environment name="myProp" type="java.lang.String" value="This is my value"/> под соответствующим <Context></Context>

В противном случае, объявление переменной среды и код поиска выглядят нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...