【转】让Liferay的Service Builder连接其他数据库

转自让Liferay的Service Builder连接其他数据库http://www.huqiwen.com/2016/08/11/service-builder-use-other-database/

在Liferay里面使用ServiceBuilder默认情况下连接的数据库是Liferay本身的数据库,在某些场景和需求下,我们可能需要连接另外的数据库或者数据源。ServiceBuilder默认情况下已经提供了相关的支持,需要做下简单的配置。

第一步,在service.xml里面为对应的实体指定对应的数据源等。在entity里面定义data-source、session-factory、tx-manager

在对应的entity里面添加如下配置,

data-source=”sampleDataSource”

session-factory=“sampleSessionFactory”

tx-manager=”sampleTransactionManager”

上面的名称可以自己定义,放在entity的属性里面。

第二步:在自己项目的META-INF里面创建ext-spring.xml文件

里面的内容如下,将下面的内容全部复制到ex-spring.xml里面,注意里面的id名称和第一步里面的保持一致。

<?xml version="1.0"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
 <bean id="sampleDataSourceTarget" class="com.liferay.portal.dao.jdbc.util.DataSourceFactoryBean">
 <property name="propertyPrefix" value="jdbc.custom.default." />
 </bean>
 <bean id="sampleDataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
 <property name="targetDataSource">
 <ref bean="sampleDataSourceTarget" />
 </property>
 </bean>
 <bean id="sampleHibernateSessionFactory" class="com.liferay.portal.spring.hibernate.PortletHibernateConfiguration">
 <property name="dataSource">
 <ref bean="sampleDataSource" />
 </property>
 </bean>
 <bean id="sampleSessionFactory" class="com.liferay.portal.dao.orm.hibernate.SessionFactoryImpl">
 <property name="sessionFactoryImplementor">
 <ref bean="sampleHibernateSessionFactory" />
 </property>
 </bean>
 <bean id="sampleTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
 <property name="dataSource">
 <ref bean="sampleDataSource" />
 </property>
 <property name="sessionFactory">
 <ref bean="sampleHibernateSessionFactory" />
 </property>
 </bean>
</beans>

第三步:配置相关数据源

可在第二步里面看到,我们指定的其他第三方的数据源是采用的如下代码:

 <property name="propertyPrefix" value="jdbc.custom.default." />

我们可以在portal-setup-wizard.properties或者是portal-ext.properties,里面配置其他数据库的连接信息。配置方法如下:

jdbc.custom.default.driverClassName=xxx

jdbc.custom.default.url=xxxx

jdbc.custom.default.username=xxx

jdbc.custom.default.password=xxx

也就是前缀保持和我们有在ext-spring.xml里面配置的一致即可。

说明:

ext-spring.xml里面的数据源还可以采用如下的配置方法:

<bean id="sampleDataSourceTarget" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="${jdbc.sample.driverClassName}" />
  <property name="url" value="${jdbc.sample.url}" />
  <property name="username" value="${jdbc.sample.username}" />
  <property name="password" value="${jdbc.sample.password}" />
</bean>

也就是在这里指定各项的配置参数,我更推荐前面的方法。

第四步:和普通的serviceBuilder一样使用。

其他地方的使用就和在liferay同一个数据库里面的表是一样的用法了。但是这里需要注意的是,当我们连接其他第三方数据库时,serviceBuilder不会在第三方数据库里面执行自动建表的操作,需要我们手动的建立相关表

其他的查询等用法就没有区别了。