spring - Spring 中的两个实体管理器

标签 spring hibernate entitymanager transactionmanager

我在某个时候以编程方式完成了这项工作——即创建两个具有不同数据源的实体管理器,并为不同的服务提供它们。

但是现在我正在使用 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>

然后在我的道内:
public class SimpleDaoImpl implements SimpleDao {
@PersistenceContext
private EntityManager entityManager;

    /* methods that use entity manager for transactions and data detcing */
}

因此,如果两个事务管理器具有不同的数据源,如何指定将哪个实体管理器注入(inject)哪个 DAO 或者在 Spring 中这是不可能的?

最佳答案

在这里,我使用两个不同的数据源进行 hibernate ,并使用 @Qualifier 来指定 session 工厂,如下所示:

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

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

然后我从这些家伙那里得到了 session 。

在 xml 配置中,我有两个数据源 sessionFactory 和 transactionManager,每个 DB 一个。
工作正常 ;)

关于spring - Spring 中的两个实体管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14181444/

相关文章:

java - 如何使用spring jpa native 查询包含序列号来查询结果?

java - 为什么 Spring Data REST 搜索返回没有页面信息的页面?

java - 如何将记录器注入(inject)示例 Spring Boot 应用程序的字段中?

java - Hibernate - 有没有办法获取违反约束的列的名称?

hibernate - 多列的唯一约束

spring - 使用 JTA 批量插入(EntityManager 不能使用 getTransaction)

java - Spring 执行器自定义指标(平均、最小、最大响应时间)

java - 在 @Transactional 中提交 try-catch 中的更改

java - 关闭entityManager的最佳方法

java - JPA - 是否可以将结果作为 @MappedSuperclass 的实例获得?