在这种情况下,最新的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作为配置.
希望能帮助到你!