在 Spring Starter Class 中使用 @Value 注释

Using @Value annotation in Spring Starter Class

我正在使用 Spring Boot 来启动嵌入式 Tomcat,其中包含我的应用程序。此 Tomcat- 服务器位于防火墙后面,对于与外界的所有连接,我需要使用具有身份验证的代理。

出于这个原因,我在我的主要方法中启动 Spring 应用程序之前配置了一个 Authenticator

固定 Username/Password 一切正常,但我想从属性文件中读取这些,因此我尝试通过

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

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

是否有针对此类情况的最佳实践?我只是以 "old-fashioned" 方式读取属性吗?

Class 看起来像这样:

@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);
    }
}

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

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

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

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