在這種情況下,最新的Spring啟動(版本1.3.5)不支援SpEL.
請參閱注釋@ConfigurationProperties的JavaDoc
Note that contrary to {@code @Value}, SpEL expressions are not
evaluated since property values are externalized.
我找到了一種自定義Spring啟動預設行為的方法,如下所示:
例如,我在某處有data.properties檔案,由于某種原因我無法在運作時之前擷取該位置.
username=mike
password=password
是以,定義POJO映射到屬性:
@Component
@ConfigurationProperties(locations = "myConfiguration")// myConfiguration is customized placeholder
public class MyProperties{
String username;
String password;
//Getters, Setters…
}
public class MyEnvironment extends StandardEnvironment {
@Override
public String resolvePlaceholders(String location) {
if (location.equals("myConfiguration")) {
//Whatever you can do, SpEL, method call...
//Return database.properties path at runtime in this case
return getRootFolder() + "datasource.properties";
} else {
return super.resolvePlaceholders(text);
}
}
}
最後,将它應用于Spring boot main方法條目:
@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
new SpeedRestApplication()
.configure(new SpringApplicationBuilder(SpeedRestApplication.class).environment(new MyEnvironment()))//Replace default StandardEnvironment
.run(args);
}
}
一旦Spring啟動啟動,MyProperties bean名稱和密碼字段将從database.properties中注入.然後,您可以将MyProperties bean連接配接到其他bean作為配置.
希望能幫助到你!