在 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
。
我正在使用 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
。