如果能实现单个数据源的配置, 配置多个其实并没有什么难度, 无非是同一套配置写两遍用两个不同的命名。
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>
<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();
}
}
@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();
}
}