【发布时间】:2021-03-15 04:18:31
【问题描述】:
是否可以在某个类的静态块中获取spring active profile的值?
我已经尝试@value("$(spring.profiles.active)") 和@Autowired Environment env; 来获取值,但在静态块内都导致为空。
我知道静态块是在 bean 加载期间的 spring 初始化之前执行的,那么是否有任何解决方法可以从静态块内的 application.yml 获取活动配置文件值或任何值?
示例代码:
@Value("$(spring.profiles.active)")
private String env;
static {
URL url = null;
WebServiceException e = null;
try {
ClassPathResource wsdlLoc = new ClassPathResource("/wsdl/Transaction_"+env+".wsdl");
url = new URL(wsdlLoc.getURL().toString());
} catch (IOException ex) {
e = new WebServiceException(ex);
}
TRANSACTIONPROCESSOR_WSDL_LOCATION = url;
TRANSACTIONPROCESSOR_EXCEPTION = e;
}
【问题讨论】:
-
您希望在构造类的实例之后设置的变量在在加载类时可用吗?并不是说这会首先编译。只需放弃所有静态业务,并在构造函数中初始化所有实例变量。
-
你是对的。但这是 wsimport 为 Jax ws 创建的客户端存根。我无法删除静态块,因为我将不得不使其他被覆盖的方法也变成非静态的,这与超类 javax.xml.ws.Service 不兼容。
标签: java spring spring-boot properties