Как использовать YamlPropertiesFactoryBean для загрузки файлов YAML с помощью Spring Framework 4.1?
У меня есть приложение spring, которое в настоящее время использует *.файлы свойств, и я хочу, чтобы он использовал файлы YAML вместо этого.
Я нашел класс YamlPropertiesFactoryBean это, кажется, способно сделать то, что мне нужно.
моя проблема в том, что я не уверен, как использовать этот класс в моем приложении Spring (которое использует конфигурацию на основе аннотаций). Кажется, я должен настроить его в PropertySourcesPlaceholderConfigurer С the setBeanFactory метод.
ранее я загружал файлы свойств с помощью @PropertySource следующим образом:
@Configuration
@PropertySource("classpath:/default.properties")
public class PropertiesConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
Как включить YamlPropertiesFactoryBean в PropertySourcesPlaceholderConfigurer, чтобы я мог загружать файлы YAML напрямую? Или есть другой способ сделать это?
спасибо.
мое приложение использует конфигурацию на основе аннотаций, и я использую Spring Framework 4.1.4. Я нашел несколько информация, но она всегда указывала мне на Spring Boot, как этот.
2 ответов
с конфигурацией XML я использую эту конструкцию:
<context:annotation-config/>
<bean id="yamlProperties" class="org.springframework.beans.factory.config.YamlPropertiesFactoryBean">
<property name="resources" value="classpath:test.yml"/>
</bean>
<context:property-placeholder properties-ref="yamlProperties"/>
конечно, у вас должна быть зависимость snakeyaml от вашего пути к классам среды выполнения.
Я предпочитаю конфигурацию XML над конфигурацией java, но я recon, это не должно быть трудно преобразовать его.
edit:
в Java-config для полноты картины
@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = new PropertySourcesPlaceholderConfigurer();
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
yaml.setResources(new ClassPathResource("default.yml"));
propertySourcesPlaceholderConfigurer.setProperties(yaml.getObject());
return propertySourcesPlaceholderConfigurer;
}
читать .YML-файл весной вы можете использовать следующий подход.
например, у вас есть это .файл yml:
section1:
key1: "value1"
key2: "value2"
section2:
key1: "value1"
key2: "value2"
затем определите 2 Java POJOs:
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "section1")
public class MyCustomSection1 {
private String key1;
private String key2;
// define setters and getters.
}
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "section2")
public class MyCustomSection1 {
private String key1;
private String key2;
// define setters and getters.
}
теперь вы можете autowire эти бобы в вашем компоненте. Например:
@Component
public class MyPropertiesAggregator {
@Autowired
private MyCustomSection1 section;
}
если вы используете Spring Boot, все будет автоматически сканироваться и создаваться:
@SpringBootApplication
public class MainBootApplication {
public static void main(String[] args) {
new SpringApplicationBuilder()
.sources(MainBootApplication.class)
.bannerMode(OFF)
.run(args);
}
}
если вы используете JUnit, есть базовая тестовая установка для загрузки YAML файл:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(MainBootApplication.class)
public class MyJUnitTests {
...
}
если вы используете TestNG, есть образец тестовой конфигурации:
@SpringApplicationConfiguration(MainBootApplication.class)
public abstract class BaseITTest extends AbstractTestNGSpringContextTests {
....
}