spring-data-jpa 多数据源

Spring 对 JPA 的支持已经非常强大,开发者只需关心核心业务逻辑的实现代码,无需过多关注 EntityManager 的创建、事务处理等 JPA 相关的处理,这基本上也是作为一个开发框架而言所能做到的极限了。然而,Spring 开发小组并没有止步,他们再接再厉,于最近推出了 Spring Data JPA 框架,主要针对的就是 Spring 唯一没有简化到的业务逻辑代码,至此,开发者连仅剩的实现持久层业务逻辑的工作都省了,唯一要做的,就只是声明持久层的接口,其他都交给 Spring Data JPA 来帮你完成!

废话不多说 具体的来跟大家聊聊spring data jpa 的多数据源问题:

1.需要配置多个数据源:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">

<persistence-unit name="o2o_platform" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.username" value="nsh" />
<property name="hibernate.connection.password" value="" />
<property name="hibernate.connection.url" value="" />
<property name="hibernate.max_fetch_depth" value="3" /><!--设置外连接抓取树的最大深度 -->
<property name="hibernate.hbm2ddl.auto" value="none" /><!--自动输出schema创建DDL语句 -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="javax.persistence.validation.mode" value="none" />

<!-- hibernate的c3p0连接池配置 -->
<property name="hibernate.connection.provider_class" value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider" />
<property name="hibernate.c3p0.min_size" value="5" /><!-- 最小连接数 -->
<property name="hibernate.c3p0.max_size" value="500" /><!-- 最大连接数-->
<property name="hibernate.c3p0.timeout" value="200" /><!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位秒-->
<property name="hibernate.c3p0.max_statements" value="30" /><!-- 最大的PreparedStatement的数量(以前100,网上提出的方案,让减少。YYQ)-->
<property name="hibernate.c3p0.idle_test_period" value="60" /><!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒(以前120,设置小了用于更快频率检查空闲的连接YYQ)-->
<property name="hibernate.c3p0.acquire_increment" value="2" /><!-- 当连接池里面的连接用完的时候,C3P0一下获取的新连接数-->
</properties>
</persistence-unit>
<persistence-unit name="nsh_dls" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.username" value="nsh" />
<property name="hibernate.connection.password" value="" />
<property name="hibernate.connection.url" value="" />
<property name="hibernate.max_fetch_depth" value="3" /><!--设置外连接抓取树的最大深度 -->
<property name="hibernate.hbm2ddl.auto" value="none" /><!--自动输出schema创建DDL语句 -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="javax.persistence.validation.mode" value="none" />

<!-- hibernate的c3p0连接池配置 -->
<property name="hibernate.connection.provider_class" value="org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider" />
<property name="hibernate.c3p0.min_size" value="5" /><!-- 最小连接数 -->
<property name="hibernate.c3p0.max_size" value="500" /><!-- 最大连接数-->
<property name="hibernate.c3p0.timeout" value="200" /><!-- 获得连接的超时时间,如果超过这个时间,会抛出异常,单位秒-->
<property name="hibernate.c3p0.max_statements" value="30" /><!-- 最大的PreparedStatement的数量(以前100,网上提出的方案,让减少。YYQ)-->
<property name="hibernate.c3p0.idle_test_period" value="60" /><!-- 每隔120秒检查连接池里的空闲连接 ,单位是秒(以前120,设置小了用于更快频率检查空闲的连接YYQ)-->
<property name="hibernate.c3p0.acquire_increment" value="2" /><!-- 当连接池里面的连接用完的时候,C3P0一下获取的新连接数-->
</properties>
</persistence-unit>
</persistence>

2、spring 中配置entityManagerFactory

<!-- 定义实体管理器工厂 -->
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="o2o_platform" />
</bean>

<bean id="dlsentityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="nsh_dls" />
</bean>

3、<!-- 配置事务管理器 -->

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="dlstransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="dlsentityManagerFactory" />
</bean>

4、<!-- 启用 annotation事务 -->

<tx:annotation-driven transaction-manager="transactionManager" />

<tx:annotation-driven transaction-manager="dlstransactionManager" />

5、<!-- 配置Spring Data JPA扫描目录 -->

<jpa:repositories base-package="com.snail.mobile.nsh.res.nsh_dls" (此处扫描的包,是entityManagerFactory数据源下的)  entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="transactionManager"/>

<jpa:repositories base-package="com.snail.mobile.nsh.res.dls_account"(此处扫描的包,是dlsentityManagerFactory数据源下的)  entity-manager-factory-ref="dlsentityManagerFactory" transaction-manager-ref="dlstransactionManager"/>

原文地址:https://www.cnblogs.com/duxjin/p/5113449.html