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