Spring JavaConfig для поля java.util.Properties
Не могли бы вы рассказать мне, как использовать Spring Javaconfig для прямой загрузки /autowire файла свойств в поле java.util.Properties?
Спасибо!
Позже отредактируйте - все еще ищете ответ:
Можно ли загрузить с помощью Spring JavaConfig файл свойств непосредственно в поле java.util.Properties?
Ответы
Ответ 1
Основание XML-базы:
в spring config:
<util:properties id="myProperties" location="classpath:com/foo/my-production.properties"/>
в вашем классе:
@Autowired
@Qualifier("myProperties")
private Properties myProperties;
Только JavaConfig
Похоже, есть аннотация:
@PropertySource("classpath:com/foo/my-production.properties")
Аннотирование класса с этим будет загружать свойства из файла в среду. Затем вы должны автоувеличивать среду в класс, чтобы получить свойства.
@Configuration
@PropertySource("classpath:com/foo/my-production.properties")
public class AppConfig {
@Autowired
private Environment env;
public void someMethod() {
String prop = env.getProperty("my.prop.name");
...
}
Я не вижу способа напрямую вставлять их в Java.util.properties. Но вы можете создать класс, который использует эту аннотацию, которая действует как оболочка, и создает свойства таким образом.
Ответ 2
объявить PropertiesFactoryBean
.
@Bean
public PropertiesFactoryBean mailProperties() {
PropertiesFactoryBean bean = new PropertiesFactoryBean();
bean.setLocation(new ClassPathResource("mail.properties"));
return bean;
}
Унаследованный код имел следующую конфигурацию
<bean id="mailConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="classpath:mail.properties"/>
</bean>
Преобразование этого в конфигурацию Java очень просто, как показано выше.
Ответ 3
Существует также такой подход для инъекции свойств непосредственно с помощью xml-конфигураций. Контекст xml имеет этот
<util:properties id="myProps" location="classpath:META-INF/spring/conf/myProps.properties"/>
а класс java использует
@javax.annotation.Resource
private Properties myProps;
Voila!! он загружается.
Spring использует атрибут 'id' в xml для привязки к имени переменной в вашем коде.
Ответ 4
Это старая тема, но есть и более базовое решение.
@Configuration
public class MyConfig {
@Bean
public Properties myPropertyBean() {
Properties properties = new Properties();
properties.load(...);
return properties;
}
}
Ответ 5
application.yml
root-something:
my-properties:
key1: val1
key2: val2
Ваше безопасное pojo:
import java.util.Properties;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "root-something")
public class RootSomethingPojo {
private Properties myProperties;
Конфигурация контейнера:
@Configuration
@EnableConfigurationProperties({ RootSomethingPojo .class })
public class MySpringConfiguration {
Это будет вводить пары ключ-значение непосредственно в поле myProperties
.