最新のSpringブート(バージョン1.3.5)はこの場合SpELをサポートしていません。注釈の
参照Javadocを逆{@code @value}、のSpeI式であること@ConfigurationProperties
注ない プロパティ値を外部化されているので、評価しました。
私は次のように春のブートデフォルトの動作をカスタマイズする方法を見つけました:
例えば、私は、実行時前に場所を得ることができない何らかの理由で、どこかにdatabase.propertiesファイルを持っています。
したがって
username=mike
password=password
、プロパティにPOJOマッピングを定義します。
@Component
@ConfigurationProperties(locations = "myConfiguration")// myConfiguration is customized placeholder
public class MyProperties{
String username;
String password;
//Getters, Setters…
}
次に、デフォルトStandardEnvironment延長する:
:
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);
}
}
}
最後に、春にそれを適用するには、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に配線することができます。
希望すると助かります!
public class DatasourcePostProcessor implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
Properties p = new Properties();
p.load(new FileInputStream(new File(getRootFolder() + "/datasource1.properties")));
Map<String, Object> propMap = new HashMap<>();
for (Map.Entry<Object, Object> entry : p.entrySet()) {
propMap.put(entry.getKey().toString(), entry.getValue());
}
MapPropertySource source = new MapPropertySource("datasource1", propMap);
environment.getPropertySources().addLast(source);
}
}
とspring.factoriesに環境ポストプロセッサを登録します:とにかく
org.springframework.boot.env.EnvironmentPostProcessor=com.myorg.test.DatasourcePostProcessor
、これは人々を支援を期待して受け入れる