yml leer example application java spring yaml properties-file

java - leer - spring boot application.yml example



¿Cómo usar YamlPropertiesFactoryBean para cargar archivos YAML utilizando Spring Framework 4.1? (3)

Con la configuración XML he estado usando esta construcción:

<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"/>

Por supuesto, debe tener la dependencia de snakeyaml en su classpath de tiempo de ejecución.

Prefiero la configuración XML sobre la configuración java, pero reconozco que no debería ser difícil convertirla.

editar:
java config para la integridad

@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; }

Tengo una aplicación Spring que actualmente está utilizando archivos * .properties y quiero que use archivos YAML en su lugar.

Encontré la clase YamlPropertiesFactoryBean que parece ser capaz de hacer lo que necesito.

Mi problema es que no estoy seguro de cómo usar esta clase en mi aplicación Spring (que está usando una configuración basada en anotaciones). Parece que debería configurarlo en el PropertySourcesPlaceholderConfigurer con el método setBeanFactory .

Anteriormente, estaba cargando archivos de propiedades utilizando @PropertySource siguiente manera:

@Configuration @PropertySource("classpath:/default.properties") public class PropertiesConfig { @Bean public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); } }

¿Cómo puedo habilitar el YamlPropertiesFactoryBean en el PropertySourcesPlaceholderConfigurer para poder cargar archivos YAML directamente? ¿O hay otra forma de hacer esto?

Gracias.

Mi aplicación está usando la configuración basada en anotaciones y estoy usando Spring Framework 4.1.4. Encontré algo de información, pero siempre me señaló a Spring Boot, como esta .


Para leer el archivo .yml en Spring puede usar el siguiente enfoque.

Por ejemplo tienes este archivo .yml:

section1: key1: "value1" key2: "value2" section2: key1: "value1" key2: "value2"

Luego define 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. }

Ahora puede activar estos frijoles en su componente. Por ejemplo:

@Component public class MyPropertiesAggregator { @Autowired private MyCustomSection1 section; }

En caso de que esté utilizando Spring Boot, todo se escaneará automáticamente y se creará una instancia:

@SpringBootApplication public class MainBootApplication { public static void main(String[] args) { new SpringApplicationBuilder() .sources(MainBootApplication.class) .bannerMode(OFF) .run(args); } }

Si estás usando JUnit, hay una configuración de prueba básica para cargar el archivo YAML:

@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(MainBootApplication.class) public class MyJUnitTests { ... }

Si está utilizando TestNG hay una muestra de configuración de prueba:

@SpringApplicationConfiguration(MainBootApplication.class) public abstract class BaseITTest extends AbstractTestNGSpringContextTests { .... }


`

package com.yaml.yamlsample; import com.yaml.yamlsample.config.factory.YamlPropertySourceFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.PropertySource; @SpringBootApplication @PropertySource(value = "classpath:My-Yaml-Example-File.yml", factory = YamlPropertySourceFactory.class) public class YamlSampleApplication implements CommandLineRunner { public static void main(String[] args) { SpringApplication.run(YamlSampleApplication.class, args); } @Value("${person.firstName}") private String firstName; @Override public void run(String... args) throws Exception { System.out.println("first Name :" + firstName); } } package com.yaml.yamlsample.config.factory; import org.springframework.boot.env.YamlPropertySourceLoader; import org.springframework.core.env.PropertySource; import org.springframework.core.io.support.DefaultPropertySourceFactory; import org.springframework.core.io.support.EncodedResource; import java.io.IOException; import java.util.List; public class YamlPropertySourceFactory extends DefaultPropertySourceFactory { @Override public PropertySource createPropertySource(String name, EncodedResource resource) throws IOException { if (resource == null) { return super.createPropertySource(name, resource); } List<PropertySource<?>> propertySourceList = new YamlPropertySourceLoader().load(resource.getResource().getFilename(), resource.getResource()); if (!propertySourceList.isEmpty()) { return propertySourceList.iterator().next(); } return super.createPropertySource(name, resource); } }

My-Yaml-Example-File.yml

person: firstName: Mahmoud middleName:Ahmed

Haz referencia a mi ejemplo en github spring-boot-yaml-sample Para que puedas cargar archivos yaml e inyectar valores usando @Value ()