Spring中的两个实体管理器



我在某个时候已经通过编程完成了这一点——即创建两个具有不同数据源的实体管理器,并为不同的服务提供它们。

然而,现在我正在使用Spring构建一个webApp。事情是,我想有两个实体管理器负责单独的数据库。所以在我的情况下,一半的DAO将使用emNumber1,而另一半将使用emNumber2。哦,完全不同的持久单元,因为我只需要从DB1读取数据,然后处理它并将该数据存储在完全不同实体的DB2中。

我很清楚,这个问题是,并已四处走动了一段时间,但在不同的形状和形式,所以我写这个问题只是因为我不能理解的解决方案,提出了那些谷歌论坛线程或他们不适用于我的情况。在同样的情况下,我无法理解的解决方案或如何应用它在我的情况下,所以真的很抱歉多余的问题,如果它是通过链接从这个非常自己的网站的解决方案来解决。

下面是我发现如何配置单个事务管理器

<tx:annotation-driven transaction-manager="transactionManager" />
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
<bean id="dataSource"
      class="org.springframework.jdbc.datasource.DriverManagerDataSource"
      p:driverClassName="com.mysql.jdbc.Driver"
      p:url="jdbc:mysql://localhost:3306/db"
      p:username="dbuser"
      p:password="dbuser"/>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="pu1"/>
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true"/>
            <property name="generateDdl" value="true"/>
            <property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect"/>
        </bean>
    </property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
    <property name="dataSource" ref="dataSource"/>
</bean>

Then inside my dao:

public class SimpleDaoImpl implements SimpleDao {
@PersistenceContext
private EntityManager entityManager;
    /* methods that use entity manager for transactions and data detcing */
}

那么,在两个具有不同数据源的事务管理器的情况下,如何指定将哪个实体管理器注入哪个DAO,或者这在Spring中是不可能的?

这里我有两个不同数据源的hibernate,我使用@Qualifier来指定会话工厂,像这样:

@Autowired
@Qualifier(value="sessionFactoryOne")
private SessionFactory sessionFactoryOne;
@Autowired
@Qualifier(value="sessionFactoryTwo")
private SessionFactory sessionFactoryTwo;

然后我从这个家伙那里得到会话。

在xml配置中,我有两个数据源,sessionFactory和transactionManager,每个DB一个。

您可以执行@PersistenceContext(unitName="pu1")

相关内容

  • 没有找到相关文章

最新更新