首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Spring MVC + Hibernate 連接雙資料庫:雙 persistence.xml 與雙 EntityManagerFactory 配置

     編輯:程式設計綜合問答

架構思路

建立兩套完整的 JPA 配置鏈:

  1. Persistence Unit:persistence-mysql.xml、persistence-sqlserver.xml
  2. EntityManagerFactory:entityManagerFactoryMySQL、entityManagerFactorySQLServer
  3. TransactionManager:transactionManagerMySQL、transactionManagerSQLServer
  4. DataSource:dataSourceMySQL、dataSourceSQLServer

關鍵配置片段

1. 兩個 persistence.xml(放在 classpath/META-INF/)

<!-- persistence-mysql.xml -->
<persistence-unit name="mysqlPU" transaction-type="RESOURCE_LOCAL">
  <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
  <properties>
    <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
    <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/db1"/>
    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
  </properties>
</persistence-unit>

<!-- persistence-sqlserver.xml -->
<persistence-unit name="sqlserverPU" transaction-type="RESOURCE_LOCAL">
  <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
  <properties>
    <property name="hibernate.connection.driver_class" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
    <property name="hibernate.connection.url" value="jdbc:sqlserver://localhost:1433;databaseName=db2"/>
    <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
  </properties>
</persistence-unit>

2. Spring XML 定義兩套 Bean(id 必須區分)

<bean id="entityManagerFactoryMySQL" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="persistenceUnitName" value="mysqlPU"/>
  <property name="persistenceXmlLocation" value="classpath:META-INF/persistence-mysql.xml"/>
  <property name="dataSource" ref="dataSourceMySQL"/>
</bean>

<bean id="transactionManagerMySQL" class="org.springframework.orm.jpa.JpaTransactionManager">
  <property name="entityManagerFactory" ref="entityManagerFactoryMySQL"/>
</bean>

<!-- SQL Server 同理,id 改為 ...SQLServer -->

3. Repository/DAO 使用 @PersistenceContext(unitName="mysqlPU") 指定單元

@Repository
public class UserDao {
    @PersistenceContext(unitName = "mysqlPU")
    private EntityManager em;
    // ...
}

事務管理

  • 單資料庫操作:@Transactional("transactionManagerMySQL")
  • 跨資料庫分布式事務:需引入 JTA(Atomikos/Bitronix)或 Seata,配置 JtaTransactionManager,超出單純 JPA 範疇。

驗證

啟動專案,兩組 EntityManagerFactory 成功建立,分別操作對應資料庫無干擾。

核心原則:配置隔離、Bean 命名區分、註解指定單元,即可實現多資料庫共存。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved