Spring Boot 动态重置数据源

2024-05-01

当 Spring 配置文件或自定义数据库属性文件中的数据库名称、密码或主机名等数据库属性发生更改时,我尝试更新 Spring Boot 中的数据源。当属性更改时,应用程序必须通过侦听属性更改来自行更新。

一旦数据库配置发生更改,我就使用 Spring 执行器来/重新启动 bean。但用户必须明确发出发布请求才能重新启动。必须通过监听更改并更新数据源来避免此步骤。

你能告诉我在 Spring boot 中做到这一点的最佳方法吗?


找到了一种动态更新数据源的方法,

我已向应用程序提供了包含数据库属性的外部 spring 配置文件,然后使用数据源 bean 的 @RefreshScope 刷新属性。

线程监视文件更改并调用执行器刷新()方法。

数据库.属性

dburl=jdbc://localhost:5432/dbname
dbusername=user1
dbpassword=userpwd

创建数据源,

@RefreshScope
public class DBPropRefresh {
  @Value("${dburl}")
  private String dbUrl;

  @Value("${dbusername}")
  private String dbUserName;

  @Value("${dbpassword}")
  private String dbPassword;

  @Bean
  @RefreshScope
  public DataSource getDatasource() {
    return new DatasourceBuilder().create().url(dbUrl).username(dbUserName).password(dbPassword);
  }
}

向应用程序提供外部配置文件,

java -jar myapplication.jar --spring.config.location=database.properties

我创建了一个Java线程类来监视database.properties文件的更改。已关注https://dzone.com/articles/how-watch-file-system-changes https://dzone.com/articles/how-watch-file-system-changes当有变化时,它会调用refreshEndPoint.refresh()。

在 pom.xml 中,

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
  <version>1.5.6.RELEASE</version>
</dependency>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 动态重置数据源 的相关文章

随机推荐

  • 角度锚标记单击的元素 ID 未显示

    我正在尝试获取单击的锚元素的 id 这是我的 HTML div class list group col md 4 a href class list group item img src book image alt p strong P
  • 如何在android文本视图的任意一端插入文本?

    是否可以有一个文本视图 其中在文本视图的最左侧包含一些文本 在文本视图的最右侧包含一些文本 例如 我想要一个应该像这样显示的文本视图 文字 a 可以使用单个 TextView 只需将文本放入 HTML 格式即可 例如
  • Firebase 动态链接无法获取参数

    我正在我的应用程序中处理邀请 我希望用户推荐其他人 推荐人将在他们推荐的人注册后获得奖励 我正在关注这个firebase 邀请教程 https firebase google com docs dynamic links use cases
  • 有没有办法运行查询并检查聚合数据而无需再次重新运行查询?

    在决定枚举 LINQ 查询的结果集之前 我想查看查询结果计数 可能还有其他聚合数据 几乎每个 LINQ 示例都会立即枚举 foreach 循环中的结果 但我想检查计数以确定是否需要循环每个结果 有没有办法运行查询并检查聚合数据而无需再次重新
  • jQuery 绑定 ajax:成功无法在 Rails 3 应用程序中为新创建的(ajax)项目工作

    编辑这篇文章是因为我发现问题实际上在于rails无法绑定到ajax success函数 使用导轨3 2 3 感谢您花时间阅读并尝试提供帮助 我在 ajax success 删除项目上添加一个简单的淡出功能 如下所示 document rea
  • 在所有设备上使用 jquery 垂直对齐?

    我发现在不更改其他元素布局的情况下垂直对齐页面上的某些元素是有问题的 这个问题在移动设备上更加严重 如此多的屏幕尺寸 分辨率 纵向 横向 var x window innerHeight myDiv height myDiv css mar
  • Android ArrayList 的 IndexOutOfBoundsException [重复]

    这个问题在这里已经有答案了 我遇到了一个非常烦人的问题 一些代码抛出 IndexOutOfBoundsException 我真的不明白为什么 logcat 指向以下代码的 addTimetableItem 我们将对此进行更多解释 if so
  • 测试涉及打开文件夹/工作区的 VSCode 扩展

    我正在开发一个 VSCode 扩展 它将当前在工作区中打开的文件的路径考虑在内 因此 为了进行可重现的测试 我尝试在 VSCode 中打开测试文件夹本身 然后打开其中的测试文件 如下所示 import as vscode from vsco
  • 学说和大量数据

    我有一个返回约 50k 行的查询 似乎学说将整个结果放入内存中超出了内存限制 128M 我发现节省一些内存的唯一解决方案是 result gt execute array Doctrine Core HYDRATE NONE 但还是超出了极
  • 在运行时拖动窗体上的控件

    我刚刚开始使用 WPF 但我正在尝试添加我的代码 来自 Winforms 使用户能够在运行时将任何控件拖动到他们想要的任何位置 但我似乎无法获取鼠标当前的位置 呃 没有鼠标位置 在 Mouse 事件中 您可以使用 e GetPosition
  • 如何让 CompletionService 知道项目中的其他文档?

    我正在构建一个允许用户定义 编辑和执行 C 脚本的应用程序 定义由方法名称 参数名称数组和方法的内部代码组成 例如 名称 脚本1 参数名称 arg1 arg2 代码 return Arg1 arg1 Arg2 arg2 基于这个定义 可以生
  • 安装 mariadb 包时找不到 mariadb_config [重复]

    这个问题在这里已经有答案了 我尝试在 ubuntu 20 04 上安装 mariadb 软件包 并收到以下消息 Collecting mariadb Using cached mariadb 1 1 3 tar gz 80 kB Prepa
  • StorageFile比IsolatedStorageFile慢50倍

    当我发现在 Lumia 920 上运行的应用程序的 WP7 版本加载数据的速度是在同一设备上运行的 WP8 版本的 2 倍时 我正在对多种算法进行基准测试 以找到加载应用程序中所有数据的最快方法 然后 我编写了以下独立代码来测试 WP8 中
  • python tarfile 中 tar --strip 的等效功能

    我有一个具有以下目录结构的 tar 文件 a b c xyz txt 我想通过忽略父目录 a 来从此 tar 文件中提取文件 提取后 我期望以下目录结构 b c xyz txt 对于 tar 命令 我们可以使用 strip 1 选项 如何在
  • 将 DataTable 打印到 .NET 中的文本框/文本文件

    是否有预定义或 简单 的方法将数据表写入文本文件或 TextBox 控件 使用等宽字体 例如 DataTable Print Column1 Column2 v1 v2 v3 v4 v5 v6 Edit 这是一个初始版本 vb net 如果
  • 在“git pull”我的 Django 项目后重新启动/重新加载 Gunicorn(通过 Upstart)的更好方法

    我正在寻找比sudo restart projectname每次我发出git pull origin master 它会下载我对 Django 项目的最新更改 这restart我相信该命令与 Upstart 有关 我用它来启动 停止我的 G
  • 是否可以在水平面上制作 CSS3 列?

    我想知道是否可以水平生成 CSS3 列 例如 如果我有段落 a b c 和 d 并且我给它们 列数 2 则输出将是 a c b d 我想创建该列 以便输出变为 a b c d 有谁知道使用 css3 列时这是否可能 我希望我的页面是可扩展的
  • 超出最大调用堆栈大小 - Vue.js

    我有一个计算方法 可以让我计算产品的总价和折扣值 并希望获得以下值 总计 折扣 cartTotal var total 0 var discount Math round 0 1 this cartTotal 100 100 this ca
  • Android JSONObject内部多个JSONObject的解析

    我有一个来自服务器的 JSON 字符串 它看起来像这样 categories 0 term id 247 name Content Curation 1 term id 50 name Content Marketing 2 term id
  • Spring Boot 动态重置数据源

    当 Spring 配置文件或自定义数据库属性文件中的数据库名称 密码或主机名等数据库属性发生更改时 我尝试更新 Spring Boot 中的数据源 当属性更改时 应用程序必须通过侦听属性更改来自行更新 一旦数据库配置发生更改 我就使用 Sp