Загрузчик внешних свойств с сервером Tomcat - PullRequest
0 голосов
/ 31 января 2012

Я пытаюсь развернуть весеннее веб-приложение mvc на сервере Tomcat.Я тестировал локально, используя maven-jetty-plugin.В моей весенней конфигурации я использую заполнитель свойств и извлекаю свои свойства из внешнего файла:

<context:property-placeholder ignore-resource-not-found="true" ignore-unresolvable="true"/>
<bean id="modelPropertyPlaceholder" class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
    <property name="searchContextAttributes" value="true"/>
    <property name="contextOverride" value="true"/>
    <property name="ignoreResourceNotFound" value="true"/>
    <property name="ignoreUnresolvablePlaceholders" value="true"/>
    <property name="locations">
        <list>
            <value>classpath:default.model.properties</value>
            <value>file:/etc/app/app.properties</value>
            <value>${config}</value>
        </list>
    </property>
</bean>

Это работало с моим подключаемым модулем Jetty ... однако при развертывании файла WAR на сервере tomcat яполучить следующую ошибку:

 org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

В моем внешнем файле свойств у меня есть класс драйвера и определенный URL-адрес подключения.так:

jndi.jpa.rms.datasource=jdbc/testDS
rms.db.driver=com.mysql.jdbc.Driver
rms.db.url=jdbc:mysql://testdatabaseurl:3306/test
rms.db.user=sa
rms.db.password=asfdas
rms.db.checkconnsql=select 1
rms.hibernate.generateddl=false
rms.hibernate.showsql=true
rms.hibernate.dbdialect=org.hibernate.dialect.MySQLDialect

Обновление:

Похоже, что tomcat подхватывает файл внешних свойств:

 14:23:09.803 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Finished creating instance of bean 'modelPropertyPlaceholder'
 14:23:09.810 [main] INFO  o.s.w.c.s.ServletContextPropertyPlaceholderConfigurer - Loading properties file from class path resource [default.model.properties]
 14:23:09.810 [main] INFO  o.s.w.c.s.ServletContextPropertyPlaceholderConfigurer - Loading properties file from URL [file:/etc/app/app.properties]
 14:23:09.810 [main] INFO  o.s.w.c.s.ServletContextPropertyPlaceholderConfigurer - Loading properties file from ServletContext resource [/${config}]
 14:23:09.811 [main] WARN  o.s.w.c.s.ServletContextPropertyPlaceholderConfigurer - Could not load properties from ServletContext resource [/${config}]: Could not open ServletContext resource [/${config}]

Я не уверен, почему Tomcat неПодбирая соединение URL и драйвера.Это проблема кота или я что-то упустил?Спасибо

Ответы [ 2 ]

0 голосов
/ 02 апреля 2015

Старый вопрос, но ...

Судя по выводу журнала, кажется, что Spring не разрешил вашу ссылку $ {config} , иначе она была бы заменена напуть, указанный в последнем сообщении журнала:

Could not load properties from ServletContext resource [/${config}]: Could not open ServletContext resource [/${config}]

Вот случай, с которым я только что столкнулся, когда он разрешил $ {catalina.home} /conf/myprops.properties, но не смогзагрузить указанный файл:

Could not load properties from ServletContext resource [/D:/somepath/apache-tomcat/conf/myprops.properties]: Could not open ServletContext resource [/D:/somepath/apache-tomcat/conf/myprops.properties]

Я обнаружил ошибку в моем случае - мне нужно было добавить префикс внешнего файла к файлу 'file:'.То есть это должен был быть файл: $ {catalina.home} /conf/myprops.properties

(Возможно, разница в версии Spring могла повлиять на вывод журнала для васхотя также, и что это действительно разрешило ссылку, но просто не показывало это в выводе. Для справки, я использую Spring 4.1.6 в настоящее время).

0 голосов
/ 31 января 2012

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

  1. Находятся ли файлы свойств в надлежащем месте в вашей среде Tomcat?
  2. Вы уверены, что в этих файлах свойств вы не оставили некоторые ключи пустыми?

Если оба ответа на эти вопросы верны, попробуйте изменить конфигурацию следующим образом:

<context:property-placeholder location="ADD_PATH_TO_YOUR_FILES SEPARATED_WITH_SPACES"/>

Я предполагаю, что вы смешиваете здесь два заполнителя свойств, один «обычный», а другой - ограниченный контекстом сервлета.Могу поспорить, что каким-то образом они перекрываются, и один из них незаметно игнорируется.

Я бы просто придерживался property-placeholder.

...