Java 查看运行时Spring boot时application.properties的更改

Java 查看运行时Spring boot时application.properties的更改,java,spring-boot,Java,Spring Boot,我有spring boot应用程序,我想在运行时观察application.properties中的更改。例如,我有属性名称: name=John,测试 我是通过以下方式获得的: @Value("${name}") String name; 当我启动我的应用程序时,它会打印John和Test,现在如果我在运行时添加另一个名称,我也会打印它 我知道这可以通过刷新范围来完成,但我不想使用/Refresh端点来刷新它。我想在不发送请求的情况下完成 还有其他解决方案吗?JMX技术可以帮助您远程

我有spring boot应用程序,我想在运行时观察application.properties中的更改。例如,我有属性名称:

name=John,测试

我是通过以下方式获得的:

  @Value("${name}")
  String name;
当我启动我的应用程序时,它会打印John和Test,现在如果我在运行时添加另一个名称,我也会打印它

我知道这可以通过刷新范围来完成,但我不想使用/Refresh端点来刷新它。我想在不发送请求的情况下完成


还有其他解决方案吗?

JMX技术可以帮助您远程连接到运行JVM并访问其公开的功能。Spring为您提供了一个工具,它是
@ManagedResoruce
@ManagedOperation
注释

为了给您一个提示,您创建了一个bean:

@ManagedResource
公共类名称更新程序{
@值(“$name”)
私有字符串名称;
@管理操作
public void updateName(字符串newName){
this.name=名称;
}
}

现在,当您启动应用程序时,还可以运行Java任务控制或VisualVM,这是JDK中提供的工具。您应该查看正在运行的进程的PID并连接到它,以便访问托管bean。

可以帮助您的是JMX技术,它允许远程连接到运行JVM并访问其公开的函数。Spring为您提供了一个工具,它是
@ManagedResoruce
@ManagedOperation
注释

为了给您一个提示,您创建了一个bean:

@ManagedResource
公共类名称更新程序{
@值(“$name”)
私有字符串名称;
@管理操作
public void updateName(字符串newName){
this.name=名称;
}
}

现在,当您启动应用程序时,还可以运行Java任务控制或VisualVM,这是JDK中提供的工具。您应该查看正在运行的进程的PID并连接到它,以便访问托管bean。

您可以使用JMX和Spring的
@managedoOperation
创建一个bean,该bean将在运行时更改您的值。但我不认为在运行时修改application.properties是一个好主意。你为什么要这样做?你能给我一些有效的例子吗?它不一定是application.properties。例如,我可以使用conf.properties作为另一个外部属性文件。您可以使用JMX和Spring的
@managedoOperation
创建一个bean,该bean将在运行时更改您的值。但我认为在运行时修改application.properties不是一个好主意。你为什么要这样做?你能给我一些有效的例子吗?它不一定是application.properties。例如,我可以使用conf.properties作为另一个外部属性文件。。重点不是观察PID,而是使用jmx更改变量。。配置文件中有一些观察器或侦听器需要在发生某些更改时向您发出警报…哦,好的,我想您正在寻找一种在运行时更改某些属性值的方法。无论如何,我将留下这个答案。也许有人会觉得它有用。我想你没有抓住重点。。重点不是观察PID,而是使用jmx更改变量。。配置文件中有一些观察器或侦听器需要在发生某些更改时向您发出警报…哦,好的,我想您正在寻找一种在运行时更改某些属性值的方法。无论如何,我将留下这个答案。也许有人会发现它很有用。