1

我正在尝试使用 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 生成的项目是否属于这种情况。

谢谢你们。

4

0 回答 0