我正在尝试用spring创建一个Multitenant应用程序。
我正在尝试为PostgreSql数据库中的每个租户设置不同的架构。
我首先创建了TenantAwareDataSource
扩展org.springframework.jdbc.datasource.AbstractDataSource
,基本上我管理了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语句执行拦截(haha)。 可以吗?
我找到了this article,但我认为我不需要为每个连接获取引用。 我是对的吗?
还找到this one。作者正在使用org.springframework.jdbc.core.JdbcOperations
。我不确定我的Spring Roo生成的项目是什么情况。
谢谢大家。