在Spring Starter Class中使用@Value注释

时间:2015-01-30 10:08:26

标签: java spring spring-boot

我使用Spring Boot在我的应用程序中启动嵌入式Tomcat。这个Tomcat-Server位于防火墙之后,对于所有与外界的连接,我需要使用具有身份验证的代理。

出于这个原因,我在使用main方法启动Spring Application之前配置了Authenticator

使用固定的用户名/密码,一切正常,但我想从属性文件中读取这些内容,因此我尝试通过

注入这些内容
@Value("${proxy.user}")
private String proxyUser;
@Value("${proxy.password}")
private String proxyPassword;

但这些总是评估为null。我想这是因为当实例化带有main方法的类时,ApplicationContext和Spring应用程序不存在...

这种情况有最好的做法吗?我是否只是阅读了#34;老式的"办法?

类看起来像这样:

@Configuration
@EnableAutoConfiguration
public class Application {

    @Value("${proxy.user}")
    private String proxyUser;
    @Value("${proxy.password}")
    private String proxyPassword;

    public static void main(String[] args) {
        new Application().run();
    }

    private void run() {
        ProxyAuthenticator proxyAuth = new ProxyAuthenticator(proxyUser, proxyPassword);
        Authenticator.setDefault(proxyAuth);

        // Spring Context starten
        ConfigurableApplicationContext context = SpringApplication.run(Application.class);
    }
}

1 个答案:

答案 0 :(得分:2)

问题是你的main你没有使用Spring Boot,你只是在创建一个新实例。

public static void main(String[] args) {
    new Application().run();
}

现在,在run方法中,您尝试使用尚未初始化的属性,因为它只是一个新实例,而不是Spring配置的实例。

您需要在main方法中启动应用程序,然后才能配置ProxyAuthenticator