Подтвердить что ты не робот

Spring JavaConfig для поля java.util.Properties


Не могли бы вы рассказать мне, как использовать Spring Javaconfig для прямой загрузки /autowire файла свойств в поле java.util.Properties?

Спасибо!

Позже отредактируйте - все еще ищете ответ: Можно ли загрузить с помощью Spring JavaConfig файл свойств непосредственно в поле java.util.Properties?

4b9b3361

Ответ 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.