2

我在 PostgreSQL 中有一个具有三个相同模式的数据库。现在我需要根据语言环境键(存储在用户会话中)为数据库操作选择特定的模式。我在某处发现这个东西类似于动态数据源路由。

任何人都知道如何在 Spring 中实现这一点?无论如何这会影响事务管理吗?如果可能,请分享任何示例代码。

任何建议将不胜感激。感谢和问候。

4

2 回答 2

1

如果您有单个数据库,那么动态方面不应该与连接池相关 - 所有连接仍然适用于单个数据库。您需要做的就是在启动事务后动态设置正确的模式。

这可以通过使用阶数高于 的某些方面来实现<tx:annotation-driven />。在这方面,您应该获取当前连接:

DataSourceUtils.getConnection(dataSource)

并发出以下 PostgreSQL 语句(有关参数的信息,请参见: httpschema ://www.postgresql.org/docs/9.1/static/sql-set.html );

set schema 'schemaname-on-the-basis-of-session-parameter';

另请参阅在 postgres 中使用模式

至于事务管理 - 事务与物理连接和会话有关。另一边的模式是一种命名空间,因此您不必更改事务管理,只需在用户请求处理期间在每个事务开始时设置当前模式即可。

于 2012-06-20T10:12:58.003 回答
1

我建议使用这种方法:

  • 首先在 Spring MVC 配置中定义一个基于会话或更改拦截器的语言环境拦截器。
  • 您现在可以LocaleContexHolder用来获取附加线程上的当前语言环境。
  • 使用参考博客文章来定义您的动态路由数据源。数据源路由器上的参数将来自语言环境。用于LocaleContextHolder确定区域设置,然后使用它来确定应使用哪个数据源。
于 2012-06-20T10:57:19.320 回答