spring jpa hibernate 具有更多数据源

2023-12-02

我必须在我的应用程序(spring)中使用两个不同的数据库和 Hibernate、Jpa。 我想直接为不同的数据源定义不同的表。 所以我使用两个不同的持久性单元并尝试使用

<property name="packagesToScan" value="it.two.app.domain.first" />

and

<property name="packagesToScan" value="it.two.app.domain.second" />

将不同的表放入不同的包中。 但它不起作用。 事实上,所有表都带有第一个数据源。 然后我尝试将类的名称写入持久性 XML 文件 喜欢

 <persistence-unit name="persistenceFirst" transaction-type="RESOURCE_LOCAL">
 <class>it.two.app.domain.first.OneTable</class>
 <exclude-unlisted-classes/>
</persistence-unit>

和 it.two.app.domain.second.OtherTable

但是当我运行日志时说 表“firstDB.other-table”不存在 我在服务文件中使用

@PersistenceContext(unitName ="persistenceFirst")
private EntityManager em;

and

@PersistenceContext(unitName = "persistenceSecond")
EntityManager em;

你有一些想法吗? 这是数据源 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:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
    http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
    http://www.springframework.org/schema/context     http://www.springframework.org/schema/context/spring-context-3.1.xsd">

<!-- first datasource -->
<context:property-placeholder location="classpath:jdbc-first.properties"/>
<bean id="dataSourceFirst"  class="org.apache.commons.dbcp.BasicDataSource"
    p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.databaseurl}"
    p:username="${jdbc.username}" p:password="${jdbc.password}"  />
<!-- second datasource -->      
<context:property-placeholder location="classpath:jdbc-second.properties"/>
<bean id="dataSourceSecond"     class="org.apache.commons.dbcp.BasicDataSource"
    p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.databaseurl}"
    p:username="${jdbc.username}" p:password="${jdbc.password}"  />     


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

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

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


<jpa:repositories base-package="it.two.app.repository.first"
entity-manager-factory-ref="emfFirst" transaction-manager-ref="transactionManagerFirst" />

<jpa:repositories base-package="it.two.app.repository.second"
entity-manager-factory-ref="emfSecond" transaction-manager-ref="transactionManagerSecond" />

<bean id="emfFirst"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="persistenceFirst"/>
<property name="persistenceXmlLocation" value="classpath:/META-INF/persistence-first.xml"/>
<property name="jpaVendorAdapter">
    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>

<property name="dataSource" ref="dataSourceFirst" />
<property name="packagesToScan" value="it.two.app.domain.first" />
<property name="jpaProperties">
    <props>
        <prop     key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
        <prop key="hibernate.max_fetch_depth">3</prop>
        <prop key="hibernate.jdbc.fetch_size">50</prop>
        <prop key="hibernate.jdbc.batch_size">10</prop>
    </props>
</property>

</bean>

<bean id="emfSecond"     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="persistenceSecond"/>
<property name="persistenceXmlLocation" value="classpath:/META-INF/persistence-        second.xml"/>
<property name="jpaVendorAdapter" >
 <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
<property name="dataSource" ref="dataSourceSecond"/>
<property name="packagesToScan" value="it.two.app.domain.second"/>
<property name="jpaProperties">
 <props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
<prop key="hibernate.max_fetch_depth">3</prop>
<prop key="hibernate.jdbc.fetch_size">50</prop>
<prop key="hibernate.jdbc.batch_size">10</prop>
 </props>
</property>

</bean>

</beans>

解决方案!!!!!! 我明白这个问题。 简单地

<!-- first datasource -->
 <bean id="dataSourceFirst"  class="org.apache.commons.dbcp.BasicDataSource"
    p:driverClassName="com.mysql.jdbc.Driver" p:url="url...."
    p:username="username" p:password="password"  />
<!-- second datasource -->      
<bean id="dataSourceSecond"     class="org.apache.commons.dbcp.BasicDataSource"
     p:driverClassName="com.mysql.jdbc.Driver" p:url="url2...."
    p:username="username2" p:password="password2"  />    

如果您想使用多个DataSource in Spring + JPA.

  1. 创建两个或多个PersistenceUnit in persistence.xml.
  2. Create EntityManagerFactory对于每个PersistenceUnit in spring-beans.xml.

更多参考。

  1. Spring+Hibernate+JPA 多数据库
  2. 使用 Spring 3、Hibernate 3 访问多个数据库
  3. 使用 Spring 3.0 和 Hibernate 3.0 的多数据库

在您的 DAO 课程中。

@PersistenceContext(unitName ="JPA_1")
private EntityManager em_1; 

@PersistenceContext(unitName ="JPA_2")
private EntityManager em_2; 

配置持久性.xml

<persistence-unit name="JPA_1" type="RESOURCE_LOCAL">
....
</persistence-unit>


<persistence-unit name="JPA_2" type="RESOURCE_LOCAL">
....
</persistence-unit>

配置:spring-beans.xml

<bean id="entityManagerFactory1" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="JPA_1"/>
    <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
    <property name="jpaDialect">
        <bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect"/> <--if it is necessary, replace with hibernate.
    </property>
    <property name="jpaPropertyMap">
        <props>
            <prop key="eclipselink.weaving">false</prop> <--if it is necessary, replace with hibernate.
        </props>
    </property>
    <property name="loadTimeWeaver">
        <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver">
        </bean>
    </property>
</bean>

<bean id="entityManagerFactory2" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitName" value="JPA_2"/>
    <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
    <property name="jpaDialect">
        <bean class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect"/> <--if it is necessary, replace with hibernate.
    </property>
    <property name="jpaPropertyMap">
        <props>
            <prop key="eclipselink.weaving">false</prop> <--if it is necessary, replace with hibernate.
        </props>
    </property>
    <property name="loadTimeWeaver">
        <bean class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver">
        </bean>
    </property>
</bean> 

<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter"> <--if it is necessary, replace with hibernate.
    <property name="databasePlatform" value="org.eclipse.persistence.platform.database.MySQLPlatform"/>
    <!--<property name="databasePlatform" value="org.eclipse.persistence.platform.database.OraclePlatform" />-->
    <property name="generateDdl" value="false"/>
    <property name="showSql" value="true"/>
</bean>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

spring jpa hibernate 具有更多数据源 的相关文章

随机推荐

  • 如何为 Firefox、IE 和 Chrome 创建插件/附加组件

    我需要为 IE firefox 和 chrome 浏览器创建插件 附加组件 以满足以下要求 如果请求的网址采用特定格式 匹配特定正则表达式模式 则插件必须阻止该请求并弹出警报框 我进行了很多搜索 但没有找到任何有用的东西 对于IE 我认为我
  • 发布表单时如何获取复选框元素中未选中复选框的值?

    我有一个如下所示的表格
  • 使用 android.support.v7.app.ActionBar 的选项卡

    我最近更新了我的 Android 应用程序 以在 Android 2 3 上使用对操作栏和操作栏选项卡的 v7 支持 更新代码后 我在 4 2 设备和模拟 2 3 设备上运行该应用程序 操作栏和选项卡在真实硬件上显示良好 但在模拟设备上则不
  • NanoMsg (NNG) 和 FlatBuffers 是否适合该项目?

    大声喊出我们是否应该考虑更好的事情 我正在寻找一种非常快速且简单的方法来获取多个程序 例如 5 个 每个程序都在私有 OpenStack 云上的单独节点上运行以相互通信 数据包将是短 C 结构 小于 100 字节 交通流量将会较少 可能低于
  • 控制 JsonResult 中的序列化程序,又名 ASP.Net MVC 中的 Json 函数?

    有没有办法配置在控制器中通过 JsonResult 返回 JSON 时使用什么 JSON 序列化器 public ActionResult SomeJsonFunction var x SomeModelCode SomeModelFunc
  • 如何从 Firebase 检索 ListView 中的数据

    你能帮我解决这个问题吗 我尝试在 Listview 中显示 firebase 中的数据 但不显示任何内容 ListView listView FirebaseDatabase firebaseDatabase DatabaseReferen
  • 删除向量每个元素中第二次出现“-”之后的所有字符

    我想删除向量的每个元素中第二次出现 之后的所有字符 Initial string aa bbb cccc gt aa bbb aa vvv vv gt aa vvv aa ddd gt aa ddd 有什么帮助吗 根据示例输入和预期输出判断
  • 如何缩放和设置MediaView的坐标?

    我想在我的 JavaFx 2x 场景中嵌入一个视频 并根据我的需要调整它的大小和位置 我遇到的问题如下 如果我建立一个MediaView组件然后平移X或Y坐标 然后整个视图就被正确移动像这样 MediaView mv mv setTrans
  • 显示 Oracle SQL 中表的所有约束的名称

    我已经为在 Oracle SQL 中创建的多个表的每个约束定义了一个名称 问题是 要删除特定表的列的约束 我需要知道为每个约束提供的名称 但我已经忘记了 如何列出为表的每一列指定的所有约束名称 有没有这样的SQL语句 您需要查询数据字典 具
  • 使用 Powershell 删除 csv 文件末尾的空行

    我需要使用 Powershell 删除 CSV 文件末尾的空行 我尝试了下面的代码 此代码仅用于删除下面示例文件图像中的第 7 行和第 8 行 但我需要删除第 3 4 5 6 7 和 8 行 只有第 2 行有数据 任何建议将不胜感激 谢谢
  • 从另一个 js 文件导入函数。 JavaScript

    我有一个关于在 javascript 中包含文件的问题 我有一个非常简单的例子 gt index html gt models gt course js gt student js 课程 js function Course this id
  • 如何在c# Microsoft graph api请求中获取响应标头

    我正在尝试做文件复制使用 Microsoft graph API 在 c net core 中进行操作 这是一个异步操作 根据文档 它说它返回一个位置响应头检查操作的状态 现在的问题是我需要它的响应标头 以便我可以检查文件复制操作的状态 但
  • 合并两个图像 --> 4 倍大小!如何减小文件大小?

    我使用下面的代码合并两个图像 一张不透明的基础图像 一张透明的覆盖图像 其拥有的图像文件大小分别为 20kb 和 5kb 合并两个图像后 生成的文件大小 gt 100kb 因此至少是 25kb 组合大小的 4 倍 我预计文件大小小于 25k
  • 错误2 系统找不到Sublime Text 2、Windows 8中指定的文件

    刚刚安装了 Sublime Text 2 尝试构建 hello world 程序 并收到以下消息 Error 2 The system cannot find the file specified cmd u g u u o u dir C
  • Facebook 评论插件 - 每个页面上都有相同的评论

    我网站上的 Facebook 评论效果很好 但当有人对一篇文章发表评论时 网站上的每篇文章都会出现 相同的评论 显然 我不希望这样 我所做的基本上是复制并粘贴在developers facebook com上提供的代码 div div
  • 如何在Python极坐标中添加持续时间到日期时间

    我想在日期 时间中添加以秒为单位的持续时间 我的数据看起来像 import polars as pl df pl DataFrame dt 2022 12 14T00 00 00 2022 12 14T00 00 00 2022 12 14
  • Python 入门:属性错误

    我是 python 新手 今天刚刚下载 我正在使用它来处理网络蜘蛛 因此为了对其进行测试并确保一切正常 我下载了示例代码 不幸的是 它不起作用并给了我错误 AttributeError MyShell 对象没有属性 已加载 我不确定代码本身
  • 通过 VSTS CI/CD 升级 Azure Service Fabric 时出错

    我正在使用 VSTS 来设置 CI CD 以进行服务结构构建和部署 第一次部署没有错误 但第二次更新部署给出了以下错误 ConfigPackage中的内容名称 Config 版本 1 0 0 20180312 1 服务清单中的 Sample
  • 苹果手表上的图像

    昨天我的申请被拒绝时遇到了一个问题 显然 这些图像并未显示在实际的 Apple Watch 上 但它们显示在模拟器中 我什至尝试重置模拟器 但无法复制苹果员工发生的问题 所以我只是想知道在苹果手表上添加 显示图像的正确方法是什么 这样它们才
  • spring jpa hibernate 具有更多数据源

    我必须在我的应用程序 spring 中使用两个不同的数据库和 Hibernate Jpa 我想直接为不同的数据源定义不同的表 所以我使用两个不同的持久性单元并尝试使用