我正在尝试使用 spring 创建一个多租户应用程序。
我正在尝试为 PostgreSql 数据库上的每个租户使用不同的架构。
我首先创建了一个TenantAwareDataSource
扩展org.springframework.jdbc.datasource.AbstractDataSource
,基本上我管理一个 Map org.apache.commons.dbcp.BasicDataSource
,为每个租户配置 setConnectionInitSqls()。(项目之前的数据源是org.apache.commons.dbcp.BasicDataSource
)
但随后与朋友讨论后,我们想到了为使用切面 (aop) 执行的每个语句更改架构的想法,set search_path to
只需在正常执行之前添加一个语句即可。
这可以大大简化与数据库连接过多相关的问题(在任何给定时间每个租户的连接池)。
有没有人使用 AOP 执行了额外的语句?有什么需要克服的陷阱吗?
我正在考虑放回org.apache.commons.dbcp.BasicDataSource
并拦截 java.sql.Statements.exe*(..)
我对 Spring 的持久性不是很有经验。或者 SQL 语句执行拦截(哈哈)。可以吗?
我找到了这篇文章,但我认为我不需要为每个连接获取参考。我对吗?
也找到了这个。作者正在使用org.springframework.jdbc.core.JdbcOperations
. 不确定我的 Spring Roo 生成的项目是否属于这种情况。
谢谢你们。