Tomcat + JPA多数据源实现

7 篇文章 0 订阅
4 篇文章 0 订阅

如果能实现单个数据源的配置, 配置多个其实并没有什么难度, 无非是同一套配置写两遍用两个不同的命名。


1.  Tomcat配置两个JNDI数据源, 细节请参照我的另外一篇关于单一数据源的文章 

<Resource name="playDS" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="root"
password="Aa12345" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/play" />

<Resource name="multiPlayDS" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="root"
password="Aa12345" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/multiplay" />


2.  项目中关联JNDI和JPA 持久化单元

2.1 resource-ref in web.xml

	<resource-ref>
		<description>DB Connection</description>
		<res-ref-name>JNDI_NAME</res-ref-name>
		<res-type>javax.sql.DataSource</res-type>
		<res-auth>Container</res-auth>
	</resource-ref>

	<resource-ref>
		<description>DB Connection</description>
		<res-ref-name>JNDI_NAME</res-ref-name>
		<res-type>javax.sql.DataSource</res-type>
		<res-auth>Container</res-auth>
	</resource-ref>
如果在JSP页面中用sql语句访问, 直接访问JND即可, 在java代码中必须要在web.xml做关联或者加入@Resource(name="JNDI")注解


3. JPA配置文件Persistence.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="playPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<non-jta-data-source>java:comp/env/playDS</non-jta-data-source>
<class>play.entities.BasicUser</class>
</persistence-unit>

<persistence-unit name="multiPlayPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<non-jta-data-source>java:comp/env/multiPlayDS</non-jta-data-source>
<class>play.entities.BasicUser</class>
</persistence-unit>
</persistence>

4. Java代码
public class PersistentBean {
@Resource(name="playDS")
public void saveBasicUser() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("playPU");
EntityManager manager = factory.createEntityManager();
EntityTransaction tran = manager.getTransaction();
tran.begin();
BasicUser ower = new BasicUser();
ower.setPassword("exigen");
ower.setUserName("wpeng_8g");
manager.persist(ower);
tran.commit();
}

@Resource(name="multiPlayDS")
public void multiSaveBasicUser() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("multiPlayPU");
EntityManager manager = factory.createEntityManager();
EntityTransaction tran = manager.getTransaction();
tran.begin();
BasicUser ower = new BasicUser();
ower.setPassword("multiexigen");
ower.setUserName("multiwpeng_8g");
manager.persist(ower);
tran.commit();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值