当前位置: 首页 > 面试题库 >

使用Spring,JPA和Hibernate来访问在Jboss中配置的多个数据库/数据源

勾学博
2023-03-14
问题内容

我有一个需要配置基于Spring的应用程序以与两个数据库一起使用的要求。我们有两个数据库,一个用于保存实时数据,另一个数据库用作数据仓库,并包含存档的数据(其结构与实时数据库完全相同)。

为简单起见,假设存在搜索产品的请求。应用程序应该做的是在实时数据库中搜索产品详细信息,如果找不到,它将检查存档数据库。

如果需要配置这样的设置,是否仍需要配置数据源,搜索代码是否必须使用第一个数据源来检查实时数据库,如果找不到,它将使用存档数据库运行另一个查询?

以上可能是可行的,但我想知道是否有更好的方法可以做到这一点。例如,即使该应用程序实际上在后台与两个数据库一起使用,该应用程序是否也可以在单个数据源上工作?

该应用程序基于Spring,JPA / Hibernate,SOAP和Mysql数据库以及Jboss 7作为应用程序服务器。

任何显示如何使用Spring和Jboss进行配置的示例都将非常有用。

谢谢


问题答案:

Spring正是您想要的-
AbstractRoutingDataSource。请参阅此博客文章以了解如何使用它。在您的情况下,您需要在一个请求期间切换数据源,因此您将需要进行2个事务处理,并通过更改上的数据源指示符在它们之间切换数据源ThreadLocal

  1. 对于这些DAO,请使用不同的程序包,类名或方法名来划分包装的Service层。
  2. 向Spring表示服务层方法调用应在自己的事务上下文中运行,方法是使用注释 @Transactional(propogation=Propogation.REQUIRES_NEW)
  3. 创建一个Aspect(使用AspectJ批注@Aspect)以在服务层方法调用(使用@Around)周围触发,以ThreadLocal在该方法调用之前设置值,并在之后取消设置
  4. 在中@Controller,只需调用Service层方法。Aspect将负责设置值以指示要使用的数据源,并且AbstractRoutingDataSource将在每个事务的上下文中使用该数据源。


 类似资料:
  • 问题内容: 我正在尝试配置Spring + Hibernate + JPA以使用两个数据库(MySQL和MSSQL)。 我的datasource-context.xml: 每个persistence.xml包含一个单元,如下所示: PersistenceUnitManager导致以下异常: 如果只留下一个没有列表的persistence.xml,则每个列表都可以正常工作,但我需要2个单元… 我还尝

  • 问题内容: 我有一个Spring + Hibernate + JPA应用程序。用户登录时,可以从要连接的数据库列表中进行选择(这是要求)。所有数据库都有相同的架构,因此将使用相同的实体和DAO。 现在,我有一个EntityManager(目前正在使用一个数据库),它被注入到DAO中,如下所示: 有什么方法可以让DAO根据从服务层接收到的参数/属性自动接收entityManager(由Spring管

  • 我们的应用程序是一个中间层应用程序,它提供了十几个左右的前端应用程序,可以访问后端的几十个数据库(和其他数据源)。 我们决定使用OSGi将不相关的代码位分离到单独的包中。这确保了正确的代码封装,甚至允许特定捆绑包的热交换。 这样做的一个优点是,与特定数据库对话的任何代码都被隔离到单个捆绑包中。它还允许我们简单地为新的目的地插入新的捆绑包,并无缝地集成新代码。它还确保了如果单个后端数据源关闭,对其他

  • 这是我的配置属性文件。 应用程序.属性 如果能提供一些非常好的建议来执行它,我将不胜感激。你在这方面的知识对我有帮助,谢谢。

  • 我有相同的数据库模式database_1和database_2,希望对这两个数据库进行配置(database schema相同),并确定使用哪个数据库的运行时<我的坚持。xml如下所示: 持久性名称第二个配置如下: 两个持久性单元加载相同的类。现在我的数据库配置。xml作为配置持久化单元和数据源的地方。如下所示,第一个持久化单元名称配置为,数据源名称为datasource: 现在,此代码用于将第二

  • 如何使用Spring Data JPA配置多个数据库? 只要提供一些有用的链接,我就可以在示例Spring Data JPA应用程序中浏览和配置多个数据库。