【发布时间】:2016-04-20 13:29:35
【问题描述】:
这个想法是构建一个多线程应用程序,每个线程连接到各自的数据库(单独的端口号)。每个线程将承载一个进程(假设有 A、B、C 和 D),并且每个进程可以有多个线程实例(例如 2x A、1x B、0x C 和 3x D)同时运行。
我主要担心的两个问题是:
如何在运行时替换
SessionFactory'surl 属性数据库端口?如何限制Hibernate的
Session访问其他线程的Configuration?
广告 1. 我找到了这个解决方案,它很简洁: https://spring.io/blog/2007/01/23/dynamic-datasource-routing/。但是,这只有在应用程序是单线程的情况下才能正常工作。否则,进程 A 和 B 在尝试同时访问数据库时可能会遇到冲突。
广告 2。不太确定如何解决这个问题。 Spring 是否足够聪明,能够确定要获取哪个 Configuration(最终是哪个数据库 url)对象,以便与正确的 Thread 一起使用它?
【问题讨论】:
-
但是,这只有在应用程序是单线程的情况下才能正常工作 否。为什么会呢?阅读文章:它从 thread-bound 上下文中获取数据源查找键。所以每个线程都有自己的查找键。
-
你需要为不同的数据库创建不同的xml中的sessionFacotry入口或者注解;
-
@JB Nizet 所以你说的是 Spring 将
SessionFactory连接到Thread没有问题,对吧?或者,我是否还应该根据线程来识别 bean? -
这个DataSource的想法是你仍然有一个SessionFactory。但是根据哪个线程在使用它,绑定到线程的 Session 使用也绑定到线程的 DataSource。当然,所有数据库都应该具有相同的模式。例如,这个想法是让 4 个不同的客户使用一个应用程序,每个客户都有自己的数据库。
标签: java spring multithreading hibernate