【发布时间】:2026-01-15 09:35:01
【问题描述】:
我们有一个包含多个数据源的多租户应用程序,并希望为每个数据源单独配置数据池属性(maxActive、minIdle 等)。
目前我正在构建一个org.apache.tomcat.jdbc.pool.DataSource 并手动设置一些属性,例如使用dataSource.setUserName() 和dataSource.setPassword() 的用户名和密码。我想通过从字符串加载配置来设置其余属性,例如minIdle=20;initialSize=15。
DataSource 上有两种方法似乎可以完成此任务,但似乎并没有按照我的预期进行。我尝试了dataSource.setConnectionProperties("..") 的一些属性以及填充Properties 对象并将其传递给dataSource.setDbProperties(),尽管当我通过JMX 查看池属性时似乎都没有效果。我只能通过特定的设置器(例如dataSource.setInitialSize())来更改这些属性。
我能想到的在没有上述尝试的情况下从它们的字符串中设置每个属性的唯一方法是遍历每个属性并使用 if-else 或 switch-case 逻辑来确定哪个数据源调用设置器来设置值。
那么有没有办法在不调用每个单独的 setter 的情况下从字符串中动态设置这些属性?
当我设置setConnectionProperties 或setDbProperties 的用户名时,它确实发生了变化,但我认为这可能是特定于用户名和密码之类的东西,因为我尝试设置的其他属性没有效果.
编辑:澄清一下,数据源属性将从数据库中加载,并且可能会即时添加新数据源,因此使用应用程序属性将不起作用。
【问题讨论】:
标签: spring tomcat spring-boot datasource