Spring Boot应用程序从main方法中读取属性文件中的值

时间:2018-01-08 18:12:04

标签: spring spring-boot

我正在尝试获取属性的值

hello.world=Hello World
MainApp类中的

@SpringBootApplication
public class MainApp {
   public static void main(String[] args) {
      SpringApplication.run(MainApp.class, args);
}

这不是主要方法。

@Value("${hello.world}")
public static String helloWorld;

也许可以通过

加载
  Properties prop = new Properties();

    // load a properties file
    prop.load(new FileInputStream(filePath));

有没有其他更好的方法在SpringApplication.run之前的SpringBoot主方法中使用Spring获取属性

6 个答案:

答案 0 :(得分:2)

ConfigurableApplicationContext ctx = 
           SpringApplication.run(MainApp.class, args);
String str = ctx.getEnvironment().getProperty("some.prop");
System.out.println("=>>>> " + str);

答案 1 :(得分:1)

@SpringBootApplication
public class MainApp {
   public static void main(String[] args) {
     SpringApplication springApplication = new SpringApplication(MainApp.class);
     springApplication.addListeners(new VersionLogger());
     springApplication.run(args);
}


// The VersionLogger Class
public class VersionLogger implements ApplicationListener<ApplicationEnvironmentPreparedEvent>{

  @Override
  public void onApplicationEvent(ApplicationEnvironmentPreparedEvent applicationEvent) {
    String helloWorld = applicationEvent.getEnvironment().getProperty("hello.world");
  }
}

<强> ApplicationEnvironmentPreparedEvent 当SpringApplication启动并且环境首次可用于检查和修改时发布的事件。

答案 2 :(得分:1)

不要这样做。最好使用CommandLineRunner。 有了这个,您可以拥有一个Spring Boot将自动为您运行的非静态方法:

@SpringBootApplication
public class SimulatorApplication implements CommandLineRunner {

@Value("my-value")
private myValue;

public static void main(String[] args) {
  SpringApplication.run(SimulatorApplication.class, args);
}

@Override
public void run(String... args) throws Exception {
  // here you can access my-value
}

}

答案 3 :(得分:0)

您已将变量helloWorld声明为static。因此,您需要使用Setter Injection而不是Field Injection。

注入静态非最终字段是一种不好的做法。因此Spring并不允许它。但你可以做这样的解决方法。

public static String helloWorld;

      @Value("${hello.world}")
        public void setHelloWorld(String someStr) {
          helloWorld = someStr
        }

如果是其他任何类,您可以在类中的任何位置访问此变量helloWorld。但是如果你想在主类中做到这一点。您只能在此行

之后访问该变量

SpringApplication.run(MainApp.class, args);)

,即仅在申请开始后。

答案 4 :(得分:0)

我们无法将值读入静态字段。以下解释提供了更好的见解How to assign a value from application.properties to a static variable?

答案 5 :(得分:0)

ApplicationContext applicationContext = SpringApplication.run(Application.class, args);

String applicationPropertyVersion=applicationContext.getEnvironment().getProperty("application.property.version");

    LOGGER.info("RELEASE CODE VERSION {} and applicationProperty Version {} ", LcoBuildVersion.version,
            applicationPropertyVersion);