【发布时间】:2020-02-04 08:13:38
【问题描述】:
我有这种情况,我需要在注入可测试类之前设置系统属性,因为这个类应该用这个系统属性初始化以进行测试。
为此,我在@BeforeAll 方法(即static)中运行系统变量设置:
@Autowired
private MyService myService;
@BeforeAll
public static void init(){
System.setProperty("AZURE_CLIENT_ID", "someId");
System.setProperty("AZURE_TENANT_ID", "someId");
System.setProperty("AZURE_CLIENT_SECRET", "someSecret" );
}
而且效果很好。
但是现在我想从 application.yaml 中读取这个属性,比如:
@Value("clientId")
private String clientId;
@BeforeAll
public static void init(){
System.setProperty("AZURE_CLIENT_ID", clientId);
System.setProperty("AZURE_TENANT_ID", tenantId);
System.setProperty("AZURE_CLIENT_SECRET", someSecret);
}
问题是我不能从静态方法中引用非静态的,我肯定需要先运行@BeforeAll 来设置系统属性。
有什么解决办法吗?
【问题讨论】:
-
这能回答你的问题吗? How to assign a value from application.properties to a static variable?也检查第二个答案。
-
@Iugiorgi 第二次使用 PropertyExtractor 为我工作
-
如果您想知道为什么@BeforeAll 方法是静态的,请阅读stackoverflow.com/questions/1052577/… 第一个答案。我发现它很有趣;)