如何在主类中加载@Value注释?

时间:2016-11-09 15:44:27

标签: java spring-boot

@SpringBootApplication
public class App {

    @Value("${Application}")
    private String application;
    @Value("${APP_SERVER_CPU_ENABLED}")
    private String APP_SERVER_CPU_ENABLED;
    @Value("${APP_SERVER_MEMORY_ENABLED}")
    private String APP_SERVER_MEMORY_ENABLED;

    @Autowired
    MonitoringItems mI;

    public static void main(String[] args) {
    SpringApplication.run(App.class, args);
    MonitoringItems mI=null;                    

    try {
        System.out.println(APP_SERVER_CPU_ENABLED);
        System.out.println(APP_SERVER_MEMORY_ENABLED);

if (APP_SERVER_MEMORY_ENABLED.equalsIgnoreCase("true") && APP_SERVER_CPU_ENABLED.equalsIgnoreCase("true")) {
  //do something 
  }

为什么主类无法读取@Value注释?在我的其他类中,我必须将@Configuration,@ ComponentScan,@ EnableAutoConfiguration放在类之上,然后在构造函数之上放置@PostConstruct。我能够从application.properties中检索值。我怎样才能为主要班级做到这一点?

2 个答案:

答案 0 :(得分:1)

问题是你无法使@Value静态,因为Spring可能还没有初始化它们。但是,您可以通过从系统/环境变量而不是通过属性文件中检索弹簧来初始化之前获得所需的值。

String value = System.getProperty("SOME_KEY");

答案 1 :(得分:1)

所以3年后,我向您展示了实现这一目标的能力。

  @SpringBootApplication
public class Demo1Application {

    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(Demo1Application .class, args);
        Test test = context.getBean(Test.class);

        String password = test.getPassword();

        System.out.println(password);

    }

    @Component
    class Test {

        @Value("${password}")
        private String password;

        public String getPassword() {
            return password;
        }
    }
}

当然,您可以在诸如application.properties之类的文件属性中创建属性:

password = sxqdqdqdqdqdqd