Чтение приложения.свойства в статическом методе

#java #spring #spring-boot

#java #весна #весенняя загрузка

Вопрос:

У меня есть приведенный ниже код, когда я статически помещаю некоторые свойства в SpringApplicationBuilder

 @SpringBootApplication(scanBasePackages = { "com" })
public class Application extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplicationBuilder parentBuilder = new SpringApplicationBuilder(Application.class);
        parentBuilder.child(RestConfiguration.class, SwaggerConfig.class)
                .properties("server.port:9093")).web(WebApplicationType.SERVLET).run(args);
    }
}
  

Я хочу переместить свойства в файл application.properties

 application.port.query=9093
  

Раньше я @value читал из файла приложения, но получаю null. Есть ли другой способ считывания данных в статическом методе?

Ответ №1:

попробуйте что-то вроде этого

 @Configuration
@ConfigurationProperties("application")
class A {
     public static int queryPort;
     @Value("${port.query:9093}")
     public void setQueryPort(final int portQuery){
         A.queryPort = portQuery;
     }
 }

public class Application extends SpringBootServletInitializer {
    public static void main(String[] args) {
    SpringApplicationBuilder parentBuilder = new SpringApplicationBuilder(Application.class);
    parentBuilder.child(RestConfiguration.class, SwaggerConfig.class)
    .properties(A.queryPort)).web(WebApplicationType.SERVLET).run(args);
    }
}
  

Ответ №2:

Предпочтительный способ достижения того, чего вы пытаетесь достичь, — использовать сам компонент spring, который является родительским для всех ваших конфигураций org.springframework.core.env.Environment

 @SpringBootApplication(scanBasePackages = {"com"})
public class Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext =
                SpringApplication.run(Application.class, args);

        Environment environment = applicationContext.getBean(Environment.class);
        String propertyValue = environment.getProperty("any.property.from.configuration")
    }
}
  

В вашем случае использования просто получите компонент объекта Environment и из Environment него получите любое значение свойства.