1. META-INF/persistence.xml :
xsi:schemaLocation="http://java.sun.com/xml/ns/persistencehttp://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
version="1.0">
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
3. dao注解管理事务
建立两个baseDaoImpl:
public EntityManager entityManager;
private EntityManagerFactory emf;
public EntityManager getEntityManager() {
return entityManager;
}
@PersistenceContext(unitName="aaaUnit")
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
@PersistenceUnit(unitName="aaaUnit")
public void setEntityManagerFactory(EntityManagerFactory emf) {
this.emf = emf;
}
baseDaoImpl2:
public EntityManager entityManager;
private EntityManagerFactory emf;
public EntityManager getEntityManager() {
return entityManager;
}
@PersistenceContext(unitName="aaaUnit")
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
@PersistenceUnit(unitName="aaaUnit")
public void setEntityManagerFactory(EntityManagerFactory emf) {
this.emf = emf;
}
用两个dao分开链接数据库。
实现类继承basedao或basedao2即可。
补充:service添加事务工厂,则需要改变一些配置。
1.两个数据库对应的事务各添加一句
例如:
2. 添加之后,会提示出错,不支持qualifier 。
则将applicationContext.xml的头部更改为:
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
。
到此完成。
配置过程中遇到的问题:
配置完成后,启动项目应该达到自动建立数据库的效果。
控制台打印错误:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.persistence.EntityManagerFactory] is defined: expected single bean but found 2
如果认真观察的话,上面应该还会提示在创建哪个bean的时候提示出错。
那么提示错误的bean里面应该有用到EntityManagerFactory。
解决办法:对set方法添加注解,如:
@PersistenceUnit(unitName="aaaUnit")
public void setEntityManagerFactory(EntityManagerFactory emf) {
this.emf = emf;
}
这样来区分数据源。
重启,ok。
参考文章:http://my.oschina.net/frankly/blog/27702