2

我使用 java、camel、spring、shiro、c3p0 和 jpa 编写了一个应用程序。此应用程序需要连接到一些 Web 服务和一些数据库,并且它现在具有使用经典 spring propertyplaceholders 和 .prop 属性文件的静态配置。我使用 @Value 注释在 java 类中注入属性,并使用带有 ${} 占位符的 spring 定义数据源。在配置中有用于 Web 服务的 url、用户名、密码和用于数据源的数据库、url、用户名、密码。

现在我需要进行动态/多租户配置。我的意思是每个“客户”都可以拥有自己的一组密码,并且这些登录名/密码会随着时间而改变。使用 shiro 我可以向 Subject 添加一些数据,这样我就可以向它添加当前属性并将它们放在我需要的地方。但是我怎样才能继续使用@value 注释呢?而且,最重要的问题是,如何在运行时更改数据源参数?我在 c3p0 文档中看到使用 getConnection(username,password) 和一对新的用户名和密码创建一个新池并关闭旧池。但我不使用 getConnection 因为只有 EntityManager 使用数据源。

请帮我!谢谢,马里奥

经过大量搜索,我认为我可以这样做:

  • 对于属性,使用公共配置中的 DynamicCombinedConfiguration,但我不知道如何告诉它从 Shiro 主题中读取租户 ID
  • 对于 JPA,使用 spring 中的 AbstractDataSource,但我不知道我是否可以从 Shiro Subject 读取租户 ID

你能告诉我我的方向是否正确吗?

再次感谢,马里奥

4

0 回答 0