我在 PostgreSQL 中有一个具有三个相同模式的数据库。现在我需要根据语言环境键(存储在用户会话中)为数据库操作选择特定的模式。我在某处发现这个东西类似于动态数据源路由。
任何人都知道如何在 Spring 中实现这一点?无论如何这会影响事务管理吗?如果可能,请分享任何示例代码。
任何建议将不胜感激。感谢和问候。
我在 PostgreSQL 中有一个具有三个相同模式的数据库。现在我需要根据语言环境键(存储在用户会话中)为数据库操作选择特定的模式。我在某处发现这个东西类似于动态数据源路由。
任何人都知道如何在 Spring 中实现这一点?无论如何这会影响事务管理吗?如果可能,请分享任何示例代码。
任何建议将不胜感激。感谢和问候。
如果您有单个数据库,那么动态方面不应该与连接池相关 - 所有连接仍然适用于单个数据库。您需要做的就是在启动事务后动态设置正确的模式。
这可以通过使用阶数高于 的某些方面来实现<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 中使用模式。
至于事务管理 - 事务与物理连接和会话有关。另一边的模式是一种命名空间,因此您不必更改事务管理,只需在用户请求处理期间在每个事务开始时设置当前模式即可。
我建议使用这种方法:
LocaleContexHolder
用来获取附加线程上的当前语言环境。LocaleContextHolder
确定区域设置,然后使用它来确定应使用哪个数据源。