Загрузка свойств Liferay из контейнера Spring IoC (чтобы получить параметры соединения jdbc) - PullRequest
3 голосов
/ 28 января 2010

Я разрабатываю некоторые портлеты для Liferay Portal 5.2.3 с пакетом tomcat 6.0.18, используя контейнер Spring IoC. Мне нужно сопоставить таблицу User_, используемую в базе данных Liferay, с сущностью с Hibernate, поэтому мне нужно использовать два разных источника данных, чтобы отделить базу данных liferay от базы данных, используемой портлетами.

Мой jdbc.properties должен содержать все параметры соединения для обеих баз данных: нет проблем для того, который используется портлетами, но у меня возникают проблемы, определяющие, какая база данных использует liferay для хранения своих данных.

Мой вывод таков: у меня должно быть что-то вроде этого:

liferayConnection.url=jdbc:hsqldb:${liferay.home}/data/hsql/lportal

для динамической загрузки URL-адреса базы данных в соответствии со свойствами Liferay, найденными в portal-ext.properties. (Или, лучше, загрузите весь portal-ext.properties и прочитайте свойства базы данных оттуда).

Проблема в том, что заполнитель не разрешен:

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'liferayDataSource' defined in class path resource [WEB-INF/applicationContext.xml]: Could not resolve placeholder 'liferay.home'

Чтобы избежать этой проблемы, я попытался явно загрузить portal-ext.properties с помощью Spring bean:

<bean id="liferayPropertiesConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
          p:location="../../portal-ext.properties"/>

но не повезло: liferay.home не разрешен, но других ошибок нет.

Как мне разрешить заполнитель, определенный Liferay? Спасибо

Ответы [ 3 ]

1 голос
/ 30 января 2010

Вы можете использовать класс PropsUtil (из Liferay), чтобы получить значения portal-ext.properties.

String value = PropsUtil.get("key");
0 голосов
/ 27 ноября 2015

Вы можете позвонить PropsUtil, используя SpringEL. например:

#{T(com.liferay.portal.kernel.util.PropsUtil).get('liferay.home')}

Я не пробовал именно это. но вы можете загрузить нужные вам свойства liferay следующим образом:

<util:properties id="liferayProps">
    <prop key="liferay.home">#{T(com.liferay.portal.kernel.util.PropsUtil).get('liferay.home')}</prop>
</util:properties>
0 голосов
/ 11 мая 2010

Для загрузки файлов свойств из applicationContext.xml файла я обычно использую PropertiesFactoryBean , определяя свойство location с именем файла, расположенного в путь к классу, вот так:

<bean name="myHibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="location">
            <value>classpath:hibernate.properties</value>
        </property>
    </bean>

Убедитесь, что файлы свойств находятся в папке / пакете, который находится в пути к классам.

...