多个实体管理员的单个jpa事务管理器

时间:2017-01-04 06:56:59

标签: spring jpa

@Repository
@Transactional
@Scope("prototype")
public class EntityManagerImpl implements EntityManagerGenerator {

    @PersistenceContext(unitName = "test")
    @Qualifier("transactionManager")
    private EntityManager entityManager;

    @PersistenceContext(unitName = "test1")
    @Qualifier("transactionManager1")
    private EntityManager entityManager2;

    @Override
    public EntityManager getEntityManager(String userType) {

        if(userType.equals("test")){
            return entityManager2;
        }else{
            return entityManager;
        }
    }

这里如何动态地使用entitymanager明智的事务管理器。我共享了我的xml配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
 xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.2.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd"
xmlns:p="http://www.springframework.org/schema/p"   xmlns:tx="http://www.springframework.org/schema/tx">

                        
                      

<bean id="jpaVendorAdapter"
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="database" value="ORACLE" />
    <property name="showSql" value="false" />
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
    p:entityManagerFactory-ref="entityManagerFactory" />

 <bean id="entityManagerFactory2"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="test1.ds" />
     <property name="persistenceUnitName" value="test1" />        
    <property name="jpaVendorAdapter" ref="jpaVendorAdapterFC" />
    <property name="persistenceXmlLocation" value="classpath:jpa-persistence.xml" />
</bean>

<bean id="jpaVendorAdapterFC"
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="database" value="ORACLE" />
    <property name="showSql" value="false" />
</bean>

  <bean id="transactionManager1" class="org.springframework.orm.jpa.JpaTransactionManager"
    p:entityManagerFactory-ref="entityManagerFactory2" />  



<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cache-manager-ref="ehcache" />
<bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="classpath:ehcache.xml" />

<!-- Transaction manager for a single JPA EntityManagerFactory (alternative 
    to JTA) -->



<!-- Activates various annotations to be detected in bean classes: Spring's 
    @Required and @Autowired, as well as JSR 250's @PostConstruct, @PreDestroy 
    and @Resource (if available) and JPA's @PersistenceContext and @PersistenceUnit 
    (if available). -->

<context:component-scan base-package="com.wmi.test" annotation-config="true"
scope-resolver="org.springframework.context.annotation.Jsr330ScopeMetadataResolver"/>

<!-- Instruct Spring to perform declarative transaction management automatically 
    on annotated classes. -->
<tx:annotation-driven />
<cache:annotation-driven />

那么我如何根据我的配置将单个事务管理器用于多个数据源  这里我们用作事务管理器作为@Transactional注释

0 个答案:

没有答案