You can
configure properties to a spring application via a property file or via an YAML
configuration file.
Example
Following
is the simple yaml file that represents two profiles information.
# Test profile configurations spring: profiles: test name: test-YAML environment: test servers: - www.abc.test.com - www.xyz.test.com # Prod profile configurations --- spring: profiles: prod name: prod-YAML environment: production servers: - www.abc.prodcom - www.xyz.prod.com
# :
Specifies the comment, used to document additional information about
configurations.
--- :
Specifies the starting of new yaml document, so we can put all the profiles
information in one yaml document only.
Where
can I put application.yml file?
/{APPLICATION_PATH}/src/main/resources/application.yml.
Let’s
build new application.
Step 1:
Create new maven
project ‘springApplicationYml’.
Step 2:
Update pom.xml with
maven dependencies.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>springApplicationYml</groupId> <artifactId>springApplicationYml</artifactId> <version>1</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.6.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> </dependencies> </project>
Step 3:
Create
application.yml under src/main/resources folder.
application.yml
# Test profile configurations spring: profiles: test name: test-YAML environment: test servers: - www.abc.test.com - www.xyz.test.com # Prod profile configurations --- spring: profiles: prod name: prod-YAML environment: production servers: - www.abc.prodcom - www.xyz.prod.com
Step 4:
Map yaml configurations
to a config class.
Create a
package ‘com.sample.app.config’ and define YAMLConfig.java like below.
YAMLConfig.java
package com.sample.app.config; import java.util.ArrayList; import java.util.List; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Configuration; @Configuration @EnableConfigurationProperties @ConfigurationProperties public class YAMLConfig { private String name; private String environment; private List<String> servers = new ArrayList<>(); public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEnvironment() { return environment; } public void setEnvironment(String environment) { this.environment = environment; } public List<String> getServers() { return servers; } public void setServers(List<String> servers) { this.servers = servers; } }
Step 5:
Create App.java
App.java
package com.sample.app; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import com.sample.app.config.YAMLConfig; @SpringBootApplication public class App { @Autowired private YAMLConfig yamlConfig; public static void main(String args[]) { SpringApplication.run(App.class, args); } @Bean public CommandLineRunner demo() { return (args) -> { System.out.println(yamlConfig.getName()); System.out.println(yamlConfig.getEnvironment()); yamlConfig.getServers().forEach(System.out::println); }; } }
Total
project structure looks like below.
Run
App.java by passing the vm argument ‘-Dspring.profiles.active=prod’, you can
see below messages in console.
prod-YAML
production
www.abc.prodcom
How to
pass VM argument in Eclipse?
Right
click on App.java -> Run As -> Run Configurations….
Go to
Arguments tab, under VM Arguments: tab, put the value -Dspring.profiles.active=prod
to activate prod profile. Put the value -Dspring.profiles.active=test to
activate test profile.
No comments:
Post a Comment