Springブート - プロファイルベースのプロパティとyamlの例

Spring Boot –プロファイルベースのプロパティとyamlの例

Spring Bootでは、次の順序で.propertiesまたは.yamlファイルを選択します。

  • application-{profile}.propertiesとYAMLバリアント

  • application.propertiesとYAMLバリアント

Note
詳細、順序、および順序については、この公式のExternalized Configurationドキュメントを参照してください。

テスト済み

  • Spring Boot 2.1.2.RELEASE

  • メーベン3

1. プロジェクト構造

標準のMavenプロジェクト構造。

profile properties

profile yaml

2. @ConfigurationProperties

後でプロパティまたはyamlファイルを読み取ります。

ServerProperties.java

package com.example.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
@ConfigurationProperties("server")
public class ServerProperties {

    private String email;
    private List cluster = new ArrayList<>();

    public static class Cluster {
        private String ip;
        private String path;

        public String getIp() {
            return ip;
        }

        public void setIp(String ip) {
            this.ip = ip;
        }

        public String getPath() {
            return path;
        }

        public void setPath(String path) {
            this.path = path;
        }

        @Override
        public String toString() {
            return "Cluster{" +
                    "ip='" + ip + '\'' +
                    ", path='" + path + '\'' +
                    '}';
        }
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public List getCluster() {
        return cluster;
    }

    public void setCluster(List cluster) {
        this.cluster = cluster;
    }

    @Override
    public String toString() {
        return "ServerProperties{" +
                "email='" + email + '\'' +
                ", cluster=" + cluster +
                '}';
    }
}

3. プロファイルベースのプロパティ

複数のプロファイル.propertiesの例。

application.properties

#Logging
logging.level.org.springframework.web=ERROR
logging.level.com.example=ERROR
logging.level.=error

#spring
spring.main.banner-mode=off
spring.profiles.active=dev

application-dev.properties

#dev environment
server.email: [email protected]
server.cluster[0].ip=127.0.0.1
server.cluster[0].path=/dev1
server.cluster[1].ip=127.0.0.2
server.cluster[1].path=/dev2
server.cluster[2].ip=127.0.0.3
server.cluster[2].path=/dev3

application-prod.properties

#production environment
server.email: [email protected]
server.cluster[0].ip=192.168.0.1
server.cluster[0].path=/app1
server.cluster[1].ip=192.168.0.2
server.cluster[1].path=/app2
server.cluster[2].ip=192.168.0.3
server.cluster[2].path=/app3

4. プロファイルベースのYAML

複数のプロファイル.ymlの例。 YAMLでは、「—」セパレータを使用して複数のプロファイルを作成できます。

application.yml

logging:
  level:
    .: error
    org.springframework: ERROR
    com.example: ERROR

spring:
  profiles:
    active: "dev"
  main:
    banner-mode: "off"

server:
  email: [email protected]

---

spring:
  profiles: dev
server:
  email: [email protected]
  cluster:
    - ip: 127.0.0.1
      path: /dev1
    - ip: 127.0.0.2
      path: /dev2
    - ip: 127.0.0.3
      path: /dev3

---

spring:
  profiles: prod
server:
  email: [email protected]
  cluster:
    - ip: 192.168.0.1
      path: /app1
    - ip: 192.168.0.2
      path: /app2
    - ip: 192.168.0.3
      path: /app3

5. DEMO

5.1 Spring Boot application.

Application.java

package com.example;

import com.example.config.ServerProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application implements CommandLineRunner {

    @Autowired
    private ServerProperties serverProperties;

    @Override
    public void run(String... args) {
        System.out.println(serverProperties);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

5.2 Package and run it.

$ mvn package

# The 'dev' profile is configured in application.properties

# Profile : dev , picks application-dev.properties or YAML
$ java -jar target/spring-boot-profile-1.0.jar

ServerProperties{email='[email protected]', cluster=[
    Cluster{ip='127.0.0.1', path='/dev1'},
    Cluster{ip='127.0.0.2', path='/dev2'},
    Cluster{ip='127.0.0.3', path='/dev3'}
]}

# Profile : prod, picks application-prod.properties or YAML
$ java -jar -Dspring.profiles.active=prod target/spring-boot-profile-1.0.jar

ServerProperties{email='[email protected]', cluster=[
    Cluster{ip='192.168.0.1', path='/app1'},
    Cluster{ip='192.168.0.2', path='/app2'},
    Cluster{ip='192.168.0.3', path='/app3'}
]}

# Profile : abc, a non-exists profile
$ java -jar -Dspring.profiles.active=abc target/spring-boot-profile-1.0.jar
ServerProperties{email='null', cluster=[]}

Note
Spring Boot、デフォルトのプロファイルはdefaultです。spring.profiles.activeプロパティを介してプロファイルを設定できます。

ソースコードをダウンロード

properties example
$ cd profile-properties
$ mvnパッケージ

YAML example
$ cdプロファイル-yaml
$ mvnパッケージ