在运行时更改 Java Spring Boot Bean

Posted

技术标签:

【中文标题】在运行时更改 Java Spring Boot Bean【英文标题】:Change Java Spring Boot Bean while runtime 【发布时间】:2017-04-18 13:10:50 【问题描述】:

各位开发者您好,

我使用 Spring Boot 框架创建了一个库。

这个库正在使用@Beans 创建一个动态数据库连接,我在其中创建一个“数据”Bean,它包含 Postgresql db 提供的无限数据源 bean。最后,我想要一个动态的数据库连接,可以从外部触发以更改我想要连接的数据库。存储在 postgres 中的不同数据库的信息。这是在应用程序启动时加载到此 bean 中的。我的问题是,我无法在不同的数据源 bean 之间切换。 Spring boot 正在创建它们,但似乎无法更改在应用程序运行时启动的 bean,该应用程序仅包含无限数据源之一......因此,在重新触发原始 bean 的创建之后,它仍然使用旧数据源。

有没有办法使用 Spring Boot 中的 bean 并在运行时更改它们? 问候, 安德烈亚斯

【问题讨论】:

【参考方案1】:

我相信您正在请求 DB multitenancy 支持,其中租户信息存储在 Postgres DB 中。

为多租户支持配置持久层涉及配置:

Hibernate、JPA 和数据源属性 数据源 bean 实体管理器工厂 bean 事务管理器 bean Spring Data JPA 和注释驱动的事务

我最近写了一篇关于Multi-tenant applications using Spring Boot, JPA, Hibernate and Postgres 的博客,虽然租户数据存储在yml“属性”文件中,但将其转换为从数据库读取租户数据应该不难。我认为这将是您想要完成的工作的起点。

【讨论】:

以上是关于在运行时更改 Java Spring Boot Bean的主要内容,如果未能解决你的问题,请参考以下文章

如何在运行时更改日志级别而不重新启动 Spring Boot 应用程序

如何使用 Spring Boot 应用程序和 Spock 测试在运行时更改服务器端口

Spring Boot - 多环境配置

spring boot java在运行时连接多个数据库并选择表

我的 spring-boot 2.x 项目出现运行时错误(java.lang.AbstractMethodError),如以下消息

在应用程序运行时更新 Spring Boot 属性的更好方法