Wednesday 1 August 2018

Spring boot: configure yaml properties using prefix

You can bind the properties using the prefix. For example, below file has the properties that are specific to beta and alpha version of the software.


application.yml
---
beta:
  appName: "ChatServer_beta"
  appVersion: "1.5Beta"
  servers:
    - serverIp: "5.6.7.8"
      serverEnvironemnt: "Testing"
    - serverIp: "1.2.3.4"
      serverEnvironemnt: "Development"
---
alpha:
  appName: "ChatServer_Alpha"
  appVersion: "1.5Alpha"
  servers:
    - serverIp: "15.16.17.18"
      serverEnvironemnt: "Testing"
    - serverIp: "11.12.13.14"
      serverEnvironemnt: "Development"


You can bind beta properties by using below statements.

@Configuration
@ConfigurationProperties(prefix="beta")
public class Service {
         private String appName;
         private String appVersion;
         private List<Server> servers;
        
         ....
         ....
         ....
}

You can bind alpha properties by using below statements.

@Configuration
@ConfigurationProperties(prefix="alpha")
public class Service {
         private String appName;
         private String appVersion;
         private List<Server> servers;
        
         ....
         ....
         ....
}

Find the below working application.

Server.java
package com.sample.myApp.model;

public class Server {
 private String serverIp;
 private String serverEnvironemnt;

 public String getServerIp() {
  return serverIp;
 }

 public void setServerIp(String serverIp) {
  this.serverIp = serverIp;
 }

 public String getServerEnvironemnt() {
  return serverEnvironemnt;
 }

 public void setServerEnvironemnt(String serverEnvironemnt) {
  this.serverEnvironemnt = serverEnvironemnt;
 }

}

Service.java
package com.sample.myApp.model;

import java.util.List;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConfigurationProperties(prefix="beta")
public class Service {
 private String appName;
 private String appVersion;
 private List<Server> servers;

 public String getAppName() {
  return appName;
 }

 public void setAppName(String appName) {
  this.appName = appName;
 }

 public String getAppVersion() {
  return appVersion;
 }

 public void setAppVersion(String appVersion) {
  this.appVersion = appVersion;
 }

 public List<Server> getServers() {
  return servers;
 }

 public void setServers(List<Server> servers) {
  this.servers = servers;
 }

}

Application.java
package com.sample.myApp;

import java.util.List;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

import com.sample.myApp.model.Server;
import com.sample.myApp.model.Service;

@SpringBootApplication
public class Application {
 public static void main(String[] args) {
  ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args);

  Service service = applicationContext.getBean(Service.class);
  String appName = service.getAppName();
  String appVersion = service.getAppVersion();

  System.out.println("*******************************************");
  System.out.printf("Application Name : %s\n", appName);
  System.out.printf("Application Version %s\n", appVersion);

  System.out.println("Servers Information");
  
  List<Server> servers = service.getServers();

  for (Server server : servers) {
   System.out.printf("Environment : %s\n", server.getServerEnvironemnt());
   System.out.printf("Server Ip : %s\n", server.getServerIp());
  }

  System.out.println("*******************************************");
  applicationContext.close();

 }

}

When you ran above application, you can able to see below messages in the console.
*******************************************
Application Name : ChatServer_beta
Application Version 1.5Beta
Servers Information
Environment : Testing
Server Ip : 5.6.7.8
Environment : Development
Server Ip : 1.2.3.4
*******************************************


Project structure looks like below.









Previous                                                 Next                                                 Home

No comments:

Post a Comment