Я использую аннотации для настройки моей среды 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... Это то, что я хотел бы сделать. Какие-либо предложения?