2016-11-09 3 views
0
@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から値を取得することができました。どのように私はメインクラスのためにそれを行うことができるでしょうか?メインクラスで@Valueアノテーションを読み込む方法は?

+0

[おっと、編集コメント]あなたのアプリクラスは春管理Beanではありません。スプリングが静的メンバーに値を設定するかどうかは不明です。 – Taylor

答えて

1

問題は、あなたが@Valueを静的にすることができないことです。なぜなら、Springはそれらをまだ初期化していない可能性があるからです。ただし、BEFOREスプリングが初期化される値は、プロパティファイルではなく、システム/環境変数から取得することで取得できます。

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

+0

これらの変数を別のクラスに設定してメインクラスに呼び出すことはできますか? – Jesse

+0

Noクラスで '@ Autowired'または' @ Value'を使用するには、クラスがBean自体である必要があります。これは、Springが自身を初期化してコンテナにBeanを追加したときにのみ作成されます。クラスを作成し、そのインスタンスを作成して値を取得しようとすると、それらはnullになります=) –

関連する問題