Как вводить полный файл свойств в springbean
У меня есть файл свойств с большим количеством значений, и я не хочу перечислять их в файле bean -configuration отдельно. Например:.
<property name="foo">
<value>${foo}</value>
</property>
<property name="bar">
<value>${bar}</value>
</property>
и т.д.
Я предполагаю, что вы полностью вводите его как java.util.Properties
или меньше как java.util.Map
.
Есть ли способ сделать это?
Ответы
Ответ 1
Для конфигурации Java вы можете использовать что-то вроде этого:
@Autowired @Qualifier("myProperties")
private Properties myProps;
@Bean(name="myProperties")
public Properties getMyProperties() throws IOException {
return PropertiesLoaderUtils.loadProperties(
new ClassPathResource("/myProperties.properties"));
}
Вы также можете иметь несколько свойств таким образом, если вы назначаете уникальное имя bean (Qualifier
) для каждого экземпляра.
Ответ 2
Да, вы можете использовать <util:properties>
для загрузки файла свойств и объявить результирующий объект java.util.Properties
как bean. Затем вы можете ввести это, как и любое другое свойство bean.
См. раздел в разделе C.2.2.3 руководства Spring и их пример:
<util:properties id="myProps" location="classpath:com/foo/jdbc-production.properties"
Не забудьте объявить пространство имен util:
в соответствии с этими инструкциями.
Ответ 3
Для конфигурации Java используйте PropertiesFactoryBean
:
@Bean
public Properties myProperties() {
PropertiesFactoryBean propertiesFactoryBean = new PropertiesFactoryBean();
propertiesFactoryBean.setLocation(new ClassPathResource("/myProperties.properties"));
Properties properties = null;
try {
propertiesFactoryBean.afterPropertiesSet();
properties = propertiesFactoryBean.getObject();
} catch (IOException e) {
log.warn("Cannot load properties file.");
}
return properties;
}
Затем установите объект свойств:
@Bean
public AnotherBean myBean() {
AnotherBean myBean = new AnotherBean();
...
myBean.setProperties(myProperties());
...
}
Надеюсь, это поможет тем, кто интересуется способом Java Config.
Ответ 4
Это возможно с помощью механизма PropertyOverrideConfigurer
:
<context:property-override location="classpath:override.properties"/>
Файл свойств:
beanname1.foo=foovalue
beanname2.bar.baz=bazvalue
Механизм объясняется в разделе 3.8.2.2 Пример: PropertyOverrideConfigurer