где / как настроить конфигурационные ресурсы для файлов Tomcat .war - PullRequest
7 голосов
/ 05 октября 2009

У меня есть исходное дерево для файла .war, которое мне нужно изменить, чтобы я мог добавить некоторую информацию о конфигурации приложения (в данном случае строку соединения jdbc, но у меня могут быть другие ресурсы, подобные свойствам). Каковы оптимальные методы размещения информации о конфигурации и доступа к ней из сервлета?

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

Ответы [ 4 ]

5 голосов
/ 06 октября 2009

Для настройки веб-приложения вы можете разместить конфигурацию в пути к классам. Затем вы можете получить его из своего приложения с помощью getResourceAsStream или, если вы предпочитаете Spring:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="locations">
    <list>
      <value>classpath:my-config.properties</value>
    </list>
  </property>
</bean>

Есть несколько мест, где вы можете поместить свойства в путь к классам в Tomcat. по порядку:

/WEB-INF/classes of your web application 
/WEB-INF/lib/*. jar of your web application 
$CATALINA_HOME/common/classes 
$CATALINA_HOME/common/endorsed/*.jar 
$CATALINA_HOME/common/i18n/*.jar 
$CATALINA_HOME/common/lib / *. jar 
$CATALINA_BASE/shared/classes 
$CATALINA_BASE/shared/lib/*.jar  

Например, если вы поместите my-config.properties как в файл .jar, так и в классы WEB-INF /, будет использоваться файл из классов WEB-INF /. Вы можете использовать этот механизм по умолчанию для тестирования конфигурации и переопределения конфигурации prod на серверах prod.

4 голосов
/ 06 октября 2009

Для конкретного случая строки соединения JDBC я бы рекомендовал вместо этого использовать пул соединений, управляемый Tomcat. Вы можете прочитать больше об этом здесь: http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html

Это больше работы, но я думаю, что в долгосрочной перспективе это послужит вам лучше.

1 голос
/ 25 мая 2010

вы можете добавить путь к файлам ваших свойств в вашем CATALINA_HOME/conf/catalina.properties в «общем» загрузчике классов common.loader .

1 голос
/ 06 октября 2009

Хм. Похоже, что самый простой способ получить то, что я хочу на Java-стороне приложения, это использовать Servlet.getServletConfig().getInitParameter(parameterName), например. getInitParameter ( "myApp.connectionString");

Но я не знаю, где это установить. В Tomcat docs говорится о различных перестановках context.xml, но я хочу убедиться, что этот параметр влияет только на мой сервлет, а не на другие. Я также не хочу размещать его в моем файле .war, чтобы сохранить этот параметр независимым от приложений (например, если я установлю обновление).


Обновление: Я понял, параметры ключа / значения доступны для ServletContext.getInitParameter () иди сюда (или можешь пойти сюда) в $ {CATALINA_HOME} / conf / server .xml:

<Server port=... >
    ...
  <Service name="Catalina" ...>
    <Engine name="Catalina" ...>
      ...
      <Host name="localhost" ...>
        <Context path="/myWarFile">
          <Parameter name="foo" value="123" />
          <Parameter name="bar" value="456" />
           ...
        </Context>
      </Host>
    </Engine>
  </Service>
</Server>

Это устанавливает два параметра: "foo" = "123", "bar" = "456" для сервлета myWarFile.war (или, точнее, с путем URL /myWarFile), и я могу получить их на Java с Servlet.getServletConfig().getInitParameter("foo") или Servlet.getServletConfig().getInitParameter("bar").

Я также посмотрел на запись server.xml в JIRA (и , что они говорят вам установить для MySQL ), они используют Resource вместо Parameter, не совсем уверенный в тонкости этого, но кажется, что это может быть более подходящим методом.

<Server port=... >
  <Service name="Catalina" ...>
    <Engine name="Catalina" ...>
      <Host name="localhost" ...>
        <Context path="/jira" docBase="${catalina.home}/atlassian-jira" 
            reloadable="false">
          <Resource name="jdbc/JiraDS" auth="Container" type="javax.sql.DataSource"
            username="jirauser"
            password="..."
            driverClassName="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost/jiradb1?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF8"
            maxActive="20"
            validationQuery="select 1"
          />
        </Context>
      </Host>
    </Engine>
  </Service>
</Server>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...