gpt4 book ai didi

spring - 动态设置 Tomcat 池属性

转载 作者:行者123 更新时间:2023-11-28 23:22:33 25 4
gpt4 key购买 nike

我们有一个包含多个数据源的 Multi-Tenancy 应用程序,并希望为每个数据源单独配置数据池属性(maxActive、minIdle 等)。

目前我正在构建一个 org.apache.tomcat.jdbc.pool.DataSource 并使用 dataSource.setUserName() 手动设置一些属性,例如用户名和密码> 和 dataSource.setPassword()。我想通过从字符串加载配置来设置其余属性,例如 minIdle=20;initialSize=15

DataSource 上有两种方法,它们似乎可以完成此任务,但似乎并没有按照我的预期进行。我尝试使用 dataSource.setConnectionProperties("..") 一些属性以及填充 Properties 对象并将其传递给 dataSource.setDbProperties(),尽管当我通过 JMX 查看池属性时,两者似乎都没有效果。我只能通过特定的 setter 更改这些属性,例如 dataSource.setInitialSize()

在没有上述尝试的情况下,我能想到的从一串属性中设置每个属性的唯一方法是遍历每个属性,并使用 if-else 或 switch-case 逻辑来确定哪个数据源 setter 调用以设置值。

那么有没有一种方法可以从字符串中动态设置这些属性,而无需调用每个单独的 setter?

当我设置 setConnectionPropertiessetDbProperties 的用户名时,它确实发生了变化,但我认为这可能特定于用户名和密码等其他属性我试过设置没有效果。

编辑:澄清一下,数据源属性将从数据库加载,并且可能会动态添加新数据源,因此使用应用程序属性将不起作用。

最佳答案

我假设您正在从事 spring-boot 项目。在这种情况下,

在spring-boot的application.properties文件中创建属性

spring.datasource.username=XXX
spring.datasource.password=XXX
spring.datasource.max-active=XXX
spring.datasource.min-idle=XXX

并创建一个配置文件来创建数据源,如下所示

@Configuration
public class DataSourceConfiguration {

@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.driverClassName}")
private String driverClass;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.min-idle}")
private Long minIdle;

@Bean
@Primary
public DataSource dataSource() {
DataSource dataSource = new DataSource();
dataSource.setJdbcUrl(url);
dataSource.setDriverClassName(driverClass);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setMinimumIdle(minIdle);
return dataSource;
}
}

这样,您可以创建多个具有不同名称的属性,并在创建不同的数据源Bean 时引用它。

如果需要,您可以将 application.properties 文件放在项目之外,并在主类中使用 @PropertySource 注释访问它。

关于spring - 动态设置 Tomcat 池属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41498969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com