我们的想法是构建一个多线程应用程序,每个线程连接到相应的数据库(单独的端口号)。每个线程都会携带一个进程(让我们说有A,B,C和D)并且每个进程可以有多个线程实例(例如,2x A,1x B,0x C和3x D)同时运行。
我主要关注的两个问题是:
如何在运行时替换SessionFactory's
url属性数据库端口?
如何限制Hibernate Session
访问其他帖子的Configuration
?
广告1.我发现这个解决方案很简洁: https://spring.io/blog/2007/01/23/dynamic-datasource-routing/。但是,如果应用程序是单线程的,这只能正常工作。否则,进程A和B可能在尝试同时访问数据库时遇到冲突。
广告2.不确定如何解决这个问题。 Spring是否足够聪明,可以找出要获取的Configuration
(最终,哪个数据库URL)对象,以便将其与正确的Thread
一起使用?
答案 0 :(得分:0)
实际上,您可以使用自己的dataSource创建多个sessionFactory。
在运行时,您将发送sessionFacotry Name以从不同数据库获取数据。
像
SessionFactory sessionFactory=HibernateUtil.getSessionFactory(<sessionFactoryName>)
Session session=sessionFactory.openSession();
//block of code to execute
session.close