Я использую аннотации для настройки среды Spring следующим образом:
@Configuration
...
@PropertySource("classpath:/config/default.properties")
...
public class GeneralApplicationConfiguration implements WebApplicationInitializer
{
@Autowired
Environment env;
}
Это приводит к тому, что мои свойства из default.properties являются частью Environment. Я хочу использовать механизм @PropertySource здесь, потому что он уже предоставляет возможность перегрузки свойств через несколько резервных слоев и различных динамических местоположений, основываясь на настройках среды (например, местоположение config_dir). Я просто снял запасной вариант, чтобы сделать пример проще.
Однако теперь моя проблема заключается в том, что я хочу настроить, например, мои свойства источника данных в default.properties. Вы можете передать настройки источнику данных, не зная подробно, какие настройки ожидает источник данных при использовании
Properties p = ...
datasource.setProperties(p);
Однако проблема в том, что объект Environment является ни объектом Properties ни Map ни чем-либо сопоставимым. С моей точки зрения, просто невозможно получить доступ ко всем значениям среды, потому что здесь нет keySet iterator или чего-либо подобного.
Properties p <=== Environment env?
Я что-то пропустил? Возможно ли как-то получить доступ ко всем записям объекта Environment? Если да, я мог бы сопоставить записи с объектом Map или Properties, я мог бы даже отфильтровать или сопоставить их по префиксу - создать подмножества в качестве стандартной Java- Map... Это то, что я хотел бы сделать. Какие-либо предложения?