在春天从静态字段

时间:2018-05-24 20:55:29

标签: spring spring-boot

我有一种情况,我需要一个属性值(application.name)才能加载应用程序上下文 - spring boot,调用SpringApplication.run之前,以及上下文加载期间。

在我调用SpringApplication.run的ApplicationMain类中,我有一个常量public static final NAME = "MyApplicationName"

我的问题是我们有一些库通过@Value("${application.name}")注入了值。

是否有办法在此常量值的上下文中设置application.name属性?

我以为我可以做一个后期构建,然后在环境中设置它 - 类似于here所描述的解决方案,但这并不能保证它可用于所有注入{{1 }}

我希望@Value在一个可以设置属性值的方法上有类似的机制,但是我没有在任何地方看到它。

1 个答案:

答案 0 :(得分:1)

可以通过多种方式在Spring Boot上注入变量,但对我来说,最好的方法之一就是在* nix或Windows中使用操作系统变量,你可以定义这样的变量:

Windows
    SET APPLICATION_NAME = "MY APP"

*nix
    export APPLICATION_NAME = "MY APP"

请注意,下划线字符(_)将替换为。在你的申请中。其他方法是使用-Dapplication.name =“MY APP”定义的Java属性,该属性位于应用程序命令行中。在操作系统中定义了这些变量之后,您可以使用以下代码在代码中捕获它们:

    @Value("${application.name}")

因此,我建议您再次使用环境变量来存储应用程序配置,这样操作员或devops人员就可以在没有触摸代码或内部属性文件的情况下(在应用程序包中)更改应用程序行为。

另一种方法是设置系统属性(System.setProperty),这将使Java应用程序接收在运行时设置的变量。实际上是在命令行中使用-D使用的相同映射(系统映射),但它是在运行时而不是在命令行中完成的。一个例子:

      System.setProperty("application.name","MY APP");
相关问题