Spring中如何每次调用方法时动态读取Shell变量值?
解决方案:实时读取Shell环境变量
@Value注解是在Bean初始化阶段完成值注入的,所以只会读取一次环境变量。要实现每次调用方法都获取最新值,可以通过以下两种方式:
方式一:使用Spring Environment对象
Spring的Environment接口提供了实时读取环境变量的能力,每次调用getProperty()方法都会去获取当前最新的环境变量值。
代码示例:
import org.springframework.core.env.Environment; import org.springframework.beans.factory.annotation.Autowired; public class MyClass { private final Environment environment; // 构造注入Environment(推荐构造注入而非字段注入) @Autowired public MyClass(Environment environment) { this.environment = environment; } public String getShellVar() { // 每次调用都会读取最新的SHELL_VAR值 return environment.getProperty("SHELL_VAR"); } }
方式二:直接使用System.getenv()
也可以直接通过JVM的System.getenv()方法读取环境变量,效果和使用Environment类似:
代码示例:
public class MyClass { public String getShellVar() { return System.getenv("SHELL_VAR"); } }
注意事项
需要注意的是:JVM进程启动时会继承当前Shell的环境变量作为快照,如果JVM运行期间外部修改了Shell环境变量,JVM默认不会自动感知到新值。这种场景下,你需要通过其他机制(比如定时读取配置文件、使用配置中心推送更新等)来获取最新的变量值。
内容的提问来源于stack exchange,提问作者Mr. Man
相关产品推荐
相关产品推荐

