打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Spring Roo两个数据库的配置 | Easyigloo


经常可以在Spring Roo论坛上看到一个经常的问题。问题是“如何配置使得应用可以处理两个数据库”。

这对Spring Roo来说,是足够麻烦的问题,这个问题涉及了JPA和Spring持久化栈。所以,我相信这对所有的Spring开发社区都要处理这个问题。

假设读者是Java开发人员,对Spring Roo有些熟悉。我关注如何获取配置。查看帮助,请访问http://www.springsource.org/roo。

解决问题

创建了以下最小的Roo项目。修改配置,每个实体都来自于不同的独立的数据库。

project --topLevelPackage org.pragmatikroo.twodbpersistence setup --provider HIBERNATE --database MYSQL --userName <username> --password <password> --databaseName twodbonelogging setup --level DEBUG --package PERSISTENCEentity --class ~.domain.DbOnefield string --fieldName nameentity --class ~.domain.DbTwofield string --fieldName nameperform cleanperform eclipseexit

原始Database.properties文件

database.password=<password>database.url=jdbc\:mysql\://localhost\:3306/twodbdatabase.username=<username>database.driverClassName=com.mysql.jdbc.Driver

修改后的Database.properties文件

database.password1=<password1>database.url1=jdbc\:mysql\://localhost\:3306/twodbonedatabase.username1=<username1>database.password2=<password1>database.url2=jdbc\:mysql\://localhost\:3306/twodbtwodatabase.username2=<username2>database.driverClassName=com.mysql.jdbc.Driver

基本上,我已经从原始文件复制了一个拷贝定义第二个数据库。对其他文件的模式也是重复的。

修改后的Persistence.xml文件

<persistence-unit name="persistenceUnit1" transaction-type="RESOURCE_LOCAL">      <provider>org.hibernate.ejb.HibernatePersistence</provider>      <class>org.josean.twodb.domain.DbOne</class>      <exclude-unlisted-classes>true</exclude-unlisted-classes>      <properties>            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>            <!-- value="create" to build a new database on each run; value="update" to modify an existing database; value="create-drop" means the same as "create" but also drops tables when Hibernate closes; value="validate" makes no changes to the database -->            <property name="hibernate.hbm2ddl.auto" value="update"/>            <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>            <property name="hibernate.connection.charSet" value="UTF-8"/>            <!-- Uncomment the following two properties for JBoss only -->            <!-- property name="hibernate.validator.apply_to_ddl" value="false" /-->            <!-- property name="hibernate.validator.autoregister_listeners" value="false" /-->            </properties></persistence-unit><persistence-unit name="persistenceUnit2" transaction-type="RESOURCE_LOCAL">      <provider>org.hibernate.ejb.HibernatePersistence</provider>      <class>org.josean.twodb.domain.DbTwo</class>      <exclude-unlisted-classes>true</exclude-unlisted-classes>      <properties>            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>            <!-- value="create" to build a new database on each run; value="update" to modify an existing database; value="create-drop" means the same as "create" but also drops tables when Hibernate closes; value="validate" makes no changes to the database -->            <property name="hibernate.hbm2ddl.auto" value="update"/>            <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy"/>            <property name="hibernate.connection.charSet" value="UTF-8"/>            <!-- Uncomment the following two properties for JBoss only -->            <!-- property name="hibernate.validator.apply_to_ddl" value="false" /-->            <!-- property name="hibernate.validator.autoregister_listeners" value="false" /-->            </properties></persistence-unit>

为第二个数据库复制持久化单元代码,定义了唯一的id。重要的是:添加。持久化单元处理的每个实体都必须包含在内。

修改后的ApplicationContext.xml文件

<bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource1">      <property name="driverClassName" value="${database.driverClassName}"/>      <property name="url" value="${database.url1}"/>      <property name="username" value="${database.username1}"/>      <property name="password" value="${database.password1}"/>      <property name="validationQuery" value="SELECT 1 FROM DUAL"/>      <property name="testOnBorrow" value="true"/></bean><bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory1">      <property name="dataSource" ref="dataSource1"/>      <property name="persistenceUnitName" value="persistenceUnit1"/></bean><tx:annotation-driven mode="aspectj" transaction-manager="transactionManager1" /><bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager1">      <property name="entityManagerFactory" ref="entityManagerFactory1" /></bean><bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource2">      <property name="driverClassName" value="${database.driverClassName}"/>      <property name="url" value="${database.url2}"/>      <property name="username" value="${database.username2}"/>      <property name="password" value="${database.password2}"/>      <property name="validationQuery" value="SELECT 1 FROM DUAL"/>      <property name="testOnBorrow" value="true"/></bean><bean class="org.springframework.orm.jpa.JpaTransactionManager" id="transactionManager2">      <property name="entityManagerFactory" ref="entityManagerFactory2"/></bean><tx:annotation-driven mode="aspectj" transaction-manager="transactionManager2" /><bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="entityManagerFactory2">      <property name="dataSource" ref="dataSource2"/>      <property name="persistenceUnitName" value="persistenceUnit2"/></bean>

其他文件的处理过程类似。添加属性到entityManagerFactory beans中。

修改后的Web.xml文件

<filter>      <filter-name>Spring OpenEntityManagerInViewFilter1</filter-name>      <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>      <init-param>            <param-name>entityManagerFactoryBeanName</param-name>            <param-value>entityManagerFactory1</param-value>      </init-param></filter><filter>      <filter-name>Spring OpenEntityManagerInViewFilter2</filter-name>      <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>      <init-param>            <param-name>entityManagerFactoryBeanName</param-name>            <param-value>entityManagerFactory2</param-value>      </init-param></filter>

就是这样!应用可以部署和测试了。

总结

已经演示了如何安装Spring web应用的上下文,使得应用可以访问第二个数据库,尤其对Spring Roo开发人员有用。

Posted in : J2EE开发
Tags: , ,
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
三种流行的连接池配置
Spring下使用Hibenrate annotation
Spring 多数据源事务配置问题
使用jsf + hibernate制作一个login实例教学录像
SSH2框架整合(Struts2.1.6+hibernate3.3.2+spring2.5.6)(spring+hibernate+servlet的源代码在文章底部)
Struts2+Spring+Hibernate
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服