春季 - 休眠 - 动态配置多个数据库



我有多个基于客户ID分片的MySQL数据库。有一个微服务提供有关分片信息的详细信息(哪个客户ID属于哪个数据库等(。

到目前为止,我的代码使用单个数据源,并且我有一个函数将sessionFactory作为休眠配置文件的一部分提供:

@Bean
public LocalSessionFactoryBean sessionFactory() {
// set data source here
}

数据源由以下人员返回:

@Bean
public DataSource dataSource() {
}

我正在 DAO 中自动连接会话工厂:

@Autowired
private SessionFactory sessionFactory;

现在,对于多个数据源,我需要:

  • 从微服务读取已配置的数据库
  • 使用数据库列表动态创建数据源
  • 会话工厂应根据客户 ID 动态装箱。

我不确定如何自动连线会话工厂,以便它根据客户 ID 初始化数据源。

这里的任何帮助都非常感谢。

可惜我以前没有看到这个问题。使用 hibernate 4+ 执行此操作的最简单方法是将分片设置为数据源。我个人使用容器管理的数据源,但您可能可以用另一种方式来设置和维护自己的连接池。然后,这些数据源具有与其关联的 jndi 名称,允许您从休眠连接提供程序访问连接池。如果这样做,每个事务只能写入一个分片,,,当然,您只能写入多个数据源一个分片。注意将所有关联的关系数据放在同一架构的同一分片上。它很重要。您可以利用应用服务器事务注册表来连接对缓存提供程序和所有数据源的 JTA 事务的访问。请记住,在每个事务中,除了一个数据源之外,对所有数据源使用 XA。利用休眠多租户来提供要使用的架构的方向。(还使用 threadlocal 传递到连接提供程序,并分配给该数据源的连接(。您将需要密切注意 equals 和哈希方法,因为逻辑上想要相等的多个对象可能同时附加到不同的类加载器,并且实际上默认情况下不相等。当发生此类事件时,当这些对象包含在事务中并尝试保留它们时,您将收到一些非常奇怪的休眠错误消息。覆盖一切。

最新更新