在SpringBootApplication中读取环境变量

时间:2019-04-09 06:00:04

标签: spring-boot environment-variables

我有一个环境变量RESOURCES_FOLDER。我想在Springboot应用程序中的类中阅读的内容

@Value("${RESOURCES_FOLDER}")
private static String resourcesFolder;

当我尝试打印该值时,它给出null而不是在我的环境变量中打印实际路径。有人可以帮我吗??

2 个答案:

答案 0 :(得分:2)

Spring不允许将值插入静态字段。您可以选择一些方法来规避此限制:

  1. 创建一个非静态设置器。这不是一个特别好的方法,因为PyType_GenericNew将被类的所有实例共享。不过,您应该可以通过以下方式实现它:
 GoogleGeocoder geocoder = new GoogleGeocoder();
 IEnumerable<GoogleAddress> addresses = await geocoder.GeocodeAsync("1600 pennsylvania ave washington dc");    
 var country = addresses.Where(a => !a.IsPartialMatch).Select(a => a[GoogleAddressType.Country]).First();    
 Console.WriteLine("Country: " + country.LongName + ", " + country.ShortName);     
//Country: United States, U
  1. 将字段声明为非静态。为此,请问自己:您是否真的需要字段保持静态?多数情况下,非静电场足够好。
  2. 创建一个单独的@ConfigurationProperties类,将字段声明为私有非静态类,为其创建getter / setter方法,然后在需要变量的任何地方插入该类。这是一种非常可组合且可测试的方法,我建议这样做,尤其是在您具有许多相关属性的情况下。

或者,请参考其他类似的问题:12

答案 1 :(得分:0)

通过以下方式在application.properties文件中添加环境变量名称:

RESOURCE_FOLDER_PATH =${RESOURCES_FOLDER}

RESOURCES_FOLDER是您的环境变量的名称。

然后使用@value批注访问java类中的环境变量。

public class AccessEnvironmentVariable{

@Value("${RESOURCE_FOLDER_PATH}")
private String RESOURCE_FOLDER;

private void displayEnvironmentVariable(){
    System.out.println("Your environment variable Resource Folder: "+RESOURCE_FOLDER);
}

}