如何在Spring中更新数据源bean?

问题描述 投票:0回答:2

我的目标是用 Spring 创建一个 Web 服务器。它必须实现多租户,如果您不使其动态化(添加、删除、更改),它会非常有效。 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的数据源,如果用这种方法添加,数据库连接仍然丢失。

java spring spring-boot datasource javabeans
2个回答
5
投票

对于有同样问题的人来说,简单的解决方案:

添加

@RefreshScope

    @Bean
    @RefreshScope
    public DataSource dataSource() {
        CustomRoutingDataSource customDataSource = new CustomRoutingDataSource();
        ...
        return customDataSource;
    }

在 pom.xml 中添加弹簧执行器端点

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. POST 至
    /actuator/refresh
    以更新数据源!

0
投票

根据文档,并非所有数据源都可以刷新。 来源 我有类似的问题,看起来唯一的解决方案是重新启动应用程序。

© www.soinside.com 2019 - 2024. All rights reserved.