public MyObject(Environment env) {
for(Iterator<PropertySource<?>> it = ((AbstractEnvironment) env).getPropertySources().iterator(); it.hasNext(); ) {
PropertySource<?> source = it.next();
if (source instanceof MapPropertySource && source.getSource() instanceof Properties {
//add new property
//get path to property file if exists and save some new properties/override existing.
Пожалуйста, рассмотрите код выше. Я хотел бы знать, может ли кто-нибудь предложить мне хороший чистый способ получения пути к файлу или потока объекта PropertySource.
В моем конкретном случае, в моей среде, естьдва объекта PropertySource, которые меня интересуют. Один - это файл, расположенный снаружи, другой - внутренний.Они определены в моем классе SpringBootApplication так: -
@SpringBootApplication
@PropertySources({
@PropertySource(value = { "classpath:internal.properties" }),
@PropertySource(value = { "file:${application.properties}" }) })
public class MyApplication extends SpringBootServletInitializer {...
У объекта PropertySource есть метод getName (), который выглядит так, чтобы содержать нужную мне информацию, но не по-дружески.
getName на PropertySource с путем к классу показывает: -
class path resource [internal.properties]
getName на PropertySource с путем к файлу показывает: -
URL [file:C:/Dev/conf/application.properties]
Информация в скобках практически пригодна для использования,Один файл является действительным URL, а путь к классу - нет.
Одно из решений - просто токенизировать эти строки и создать строку URL, поскольку у меня достаточно информации.Я могу сделать это и сделаю это, если не будет предложен лучший вариант.Поэтому мне было интересно, знает ли кто-нибудь какие-либо полезные служебные классы Spring или какой-либо другой лучший способ получения действительного URL / потока / пути к файлу из объекта PropertySource.
Заключительные замечания
- Я не могу искать переменную среды вручную или любые пути.Это должно быть универсально и получено из объекта PropertySource.
Очень приветствуется.