当前位置: 首页 > 知识库问答 >
问题:

如何在Spring更新数据源bean?

羊舌勇
2023-03-14

我的目标是使用Spring创建一个Webserver。它必须实现Multitenancy,如果您不使其动态(添加、删除、更改),它会很好地工作。是否可以在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的数据源,如果使用此方法添加,数据库连接仍然缺失。

共有1个答案

顾俊茂
2023-03-14

针对相同问题的简单解决方案:

添加刷新范围

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

在pom.xml中添加Spring执行器endpoint

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
 类似资料:
  • Spring Boot:如何在运行时添加新数据源 我的项目想要连接两个数据源。 第一个数据源我可以在application.properties配置,但第二个数据源不能配置,因为此配置位于第一个数据源的DB的表配置中。 所以, 配置第一个数据源 现在,我从application.properties配置两个数据源,它的工作。 但需求需要更改第一个数据源表中的第二个数据源。T、 T型 请给我一些建议

  • 我想一次更改大量数据,如何更改? 在这个DAO下只更改一个数据,如果我想更改很多怎么办?

  • 我使用带分页的ItemReader从源表获取数据。在ItemProcessor上,我将使用项的id逐个向服务发送rest请求,并将其响应传递给ItemWriter以存储在另一个表中。 首先读取(第1页),区块上的每个项目的状态为未处理,然后在处理并将其响应保存到另一个表后,我想更新当前区块中要处理的所有项目的状态。 在ItemReader上,我正在选择所有状态为未处理的项目。从状态=未处理的表中选

  • 这个问题几乎说明了一切。使用JPARepository,我如何更新一个实体? JPARepository只有一个save方法,它并不告诉我它实际上是create还是update。例如,我向数据库用户插入一个简单的对象,它有三个字段:、和: 然后我只需调用,此时它实际上是对数据库的插入: 到目前为止还不错。现在我想更新这个用户,比如说改变他的年龄。为此,我可以使用查询,无论是QueryDSL还是Na

  • 对于我的新项目,我构建了一个基本的rest api来根据客户机请求返回数据。但是,客户端必须选择他所选择的数据库作为HTTP GET请求的参数。 现在我的问题是,我不知道如何使用Sprint-Boot实现这一点。我知道我们可以提供许多不同的数据源,但是我们如何在检查请求之后更改想要的数据源呢? 下面是我的数据源配置,它工作得很好: 如果我想在dev21和dev22之间动态切换,我该怎么做?我读过关

  • 有一个对象,其中用户以数组的形式存在,如何使用特定id更新用户,而不发送整个用户数组。 当同时更新不同用户的数据时,发送的数据被覆盖,但必须不被覆盖