如何更新 Spring 中的数据源 bean?
How to update datasource bean in Spring?
我的目标是用 Spring 创建一个网络服务器。它必须实现多租户,如果您不使其动态化(添加、删除、更改),它会很好用。是否可以更新 Spring 中的数据源 bean?
我的代码:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) throws IOException {
SpringApplication.run(MyApplication.class, args);
}
//Multitenancy
@Bean
public DataSource dataSource(){
//implements AbstractRoutingDataSource
CustomRoutingDataSource customDataSource = new CustomRoutingDataSource();
//logic here
return customDataSource;
}
}
我尝试过的:
CustomRoutingDataSource c = context.getBean(CustomRoutingDataSource.class);
c.setTargetDataSources(CustomRoutingDataSource.getCustomDatasources());
更新 bean(?) 但不更新 Spring 的数据源,如果使用此方法添加,数据库连接仍然丢失。
有相同问题的简单解决方案:
添加@RefreshScope
@Bean
@RefreshScope
public DataSource dataSource() {
CustomRoutingDataSource customDataSource = new CustomRoutingDataSource();
...
return customDataSource;
}
在pom.xml中添加spring执行器端点
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- POST 到
/actuator/refresh
更新数据源!
我的目标是用 Spring 创建一个网络服务器。它必须实现多租户,如果您不使其动态化(添加、删除、更改),它会很好用。是否可以更新 Spring 中的数据源 bean?
我的代码:
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) throws IOException {
SpringApplication.run(MyApplication.class, args);
}
//Multitenancy
@Bean
public DataSource dataSource(){
//implements AbstractRoutingDataSource
CustomRoutingDataSource customDataSource = new CustomRoutingDataSource();
//logic here
return customDataSource;
}
}
我尝试过的:
CustomRoutingDataSource c = context.getBean(CustomRoutingDataSource.class);
c.setTargetDataSources(CustomRoutingDataSource.getCustomDatasources());
更新 bean(?) 但不更新 Spring 的数据源,如果使用此方法添加,数据库连接仍然丢失。
有相同问题的简单解决方案:
添加@RefreshScope
@Bean
@RefreshScope
public DataSource dataSource() {
CustomRoutingDataSource customDataSource = new CustomRoutingDataSource();
...
return customDataSource;
}
在pom.xml中添加spring执行器端点
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
- POST 到
/actuator/refresh
更新数据源!