SpringBoot 配置文件属性获取

1. 获取application.yml或者application.properties中的单个属性

1.1 在application.yml中自定义属性

spring:
  application:
    name: spring-boot-study
server:
  port: 10000
prop:
  name: z3
  age: 21

1.2 在Controller中获取属性

package com.zjw.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

  private static final Logger logger = LoggerFactory.getLogger(HelloController.class);

  @Value("${spring.application.name}")
  private String appName;
  @Value("${prop.name}")
  private String propName;
  @Value("${prop.age}")
  private int propAge;

  @RequestMapping("/hello")
  public String hello() {
    logger.info("HelloController hello function invoked.");
    return "Hello, My application name is " + appName + ".";
  }

  @RequestMapping("/getProp")
  public String getProp() {
    logger.info("HelloController getProp function invoked.");
    return "prop.name: " + propName + ", prop.age: " + propAge;
  }

}

2. 以POJO的方式批量读取application.yml或者application.properties中的配置信息

2.1 在application.yml中自定义属性

spring:
  application:
    name: spring-boot-study
server:
  port: 10000
prop:
  name: z3
  age: 21

2.2 创建POJO

package com.zjw.entity;

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

@ConfigurationProperties(prefix = "prop")
@Component
public class Prop {

  private String name;
  private String uuid;
  private String value;
  private String greeting;

  public String getName() {
    return name;
  }

  public String getGreeting() {
    return greeting;
  }

  public void setGreeting(String greeting) {
    this.greeting = greeting;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getUuid() {
    return uuid;
  }

  public void setUuid(String uuid) {
    this.uuid = uuid;
  }

  public String getValue() {
    return value;
  }

  public void setValue(String value) {
    this.value = value;
  }

  @Override
  public String toString() {
    return "[name: " + name + ", value: " + value
        + ", uuid: " + uuid + ", greeting: " + greeting + "]";
  }
}

2.2 在Controller中使用POJO获取配置数据

package com.zjw.controller;

import com.zjw.entity.Prop;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableConfigurationProperties({Prop.class})
public class HelloController {
  private static final Logger logger = LoggerFactory.getLogger(HelloController.class);

  @Value("${spring.application.name}")
  private String appName;
  @Value("${prop.name}")
  private String propName;
  @Value("${prop.age}")
  private int propAge;

  @Autowired
  private Prop prop;

  @RequestMapping("/hello")
  public String hello() {
    logger.info("HelloController hello function invoked.");
    return "Hello, My application name is " + appName + ".";
  }

  @RequestMapping("/getProp")
  public String getProp() {
    logger.info("HelloController getProp function invoked.");
    return "prop.name: " + propName + ", prop.age: " + propAge;
  }

  @RequestMapping("/getPropByPojo")
  public String getPropByPojo() {
    logger.info("HelloController getPropByPojo function invoked.");
    return prop.toString();
  }
  
  @RequestMapping("/getPropByPojoJson")
  public Prop getPropByPojoJson() {
    logger.info("HelloController getPropByPojo function invoked.");
    return prop;
  }
}

3. 自定义配置文件

3.1 创建配置文件admin.properties

admin.username=admin
admin.password=zhang111111
admin.id=${random.uuid}

3.2 创建POJO类

package com.zjw.entity;

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

@PropertySource(value = "classpath:admin.properties")
@ConfigurationProperties(prefix = "admin")
@Component
public class AdminProp {
  private String id;
  private String username;
  private String password;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getUsername() {
    return username;
  }

  public void setUsername(String username) {
    this.username = username;
  }

  public String getPassword() {
    return password;
  }

  public void setPassword(String password) {
    this.password = password;
  }
}

3.3 在Controller中使用

package com.zjw.controller;

import com.zjw.entity.AdminProp;
import com.zjw.entity.Prop;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@EnableConfigurationProperties({Prop.class, AdminProp.class})
public class HelloController {

  private static final Logger logger = LoggerFactory.getLogger(HelloController.class);

  @Value("${spring.application.name}")
  private String appName;
  @Value("${prop.name}")
  private String propName;
  @Value("${prop.age}")
  private int propAge;

  @Autowired
  private Prop prop;

  @Autowired
  private AdminProp adminProp;

  @RequestMapping("/hello")
  public String hello() {
    logger.info("HelloController hello function invoked.");
    return "Hello, My application name is " + appName + ".";
  }

  @RequestMapping("/getProp")
  public String getProp() {
    logger.info("HelloController getProp function invoked.");
    return "prop.name: " + propName + ", prop.age: " + propAge;
  }

  @RequestMapping("/getPropByPojo")
  public Prop getPropByPojo() {
    logger.info("HelloController getPropByPojo function invoked.");
    return prop;
  }
  @RequestMapping("/getAdminProp")
  public AdminProp getAdminProp(){
    logger.info("HelloController getAdminProp function invoked.");
    return adminProp;
  }
  
}

4. 支持多环境的配置文件

在实际的开发过程中,存在多个环境,例如:开发、测试、生产等,SpringBoot支持在application.yml中指定环境的配置文件,配置格式为application-{profile}.properties,其中profile对应环境标识,例如:

application-dev.yml

application-pro.yml

application-test.yml

  1. 可以在application.yml中配置spring.profiles.active:dev|pro|test 启用不同的配置
  2. 可以指定JVM参数 -Dspring.profiles.active=dev|pro|test 启用不同的配置

猜你喜欢

转载自blog.csdn.net/co_zjw/article/details/82897097