SpringBoot读取配置文件参数的三种方式

1. 简介

  在开发中,经常会遇到需要读取配置文件参数的情况,因此需要开发人员能优雅的读取配置文件参数值。

2. 配置文件

  在resource目录下新建配置文件application.yml:

product:
  name: Demo
  author: C3Stones

sys:
  module:
    - code: core
      enable: true
      version: 1
    - code: common
      enable: false
      version: 2

3. @Value 读取配置文件参数

  • 在Contoller中添加@Value注解
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Value 注解获取参数值 Controller
 * 
 * @author CL
 *
 */
@RestController
@RequestMapping(value = "value")
public class ValueAnnotationController {

	@Value("${product.name}")
	private String productName;

	@Value("${product.author}")
	private String productAuthor;

	/**
	 * 获取参数
	 * 
	 * @return
	 */
	@RequestMapping(value = "get")
	public String get() {
		return "产品名称为:" + productName + ", 作者为:" + productAuthor;
	}

}
# 启动项目,访问测试接口
curl http://127.0.0.1:8080/value/get

# 返回
产品名称为:Demo, 作者为:C3Stones
  • 通过包装类读取配置,适合全局使用
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 产品参数
 * 
 * @author CL
 *
 */
@Component
public class ProductProperties {

	/**
	 * 产品名称
	 */
	@Value("${product.name}")
	private String productName;

	/**
	 * 作者
	 */
	@Value("${product.author}")
	private String productAuthor;

	public String getProductName() {
		return productName;
	}

	public void setProductName(String productName) {
		this.productName = productName;
	}

	public String getProductAuthor() {
		return productAuthor;
	}

	public void setProductAuthor(String productAuthor) {
		this.productAuthor = productAuthor;
	}

}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.c3stones.config.ProductProperties;

/**
 * Value 注解获取参数值 Controller
 * 
 * @author CL
 *
 */
@RestController
@RequestMapping(value = "value")
public class ValueAnnotationController2 {

	@Autowired
	private ProductProperties productProperties;

	/**
	 * 获取参数
	 * 
	 * @return
	 */
	@RequestMapping(value = "get2")
	public String get() {
		return "产品名称为:" + productProperties.getProductName() + ", 作者为:" + productProperties.getProductAuthor();
	}

}
# 启动项目,访问测试接口
curl http://127.0.0.1:8080/value/get2

# 返回
产品名称为:Demo, 作者为:C3Stones

4. Environment 读取配置文件参数

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Environment 获取参数值 Controller
 * 
 * @author CL
 *
 */
@RestController
@RequestMapping(value = "env")
public class EnvironmentController {

	@Autowired
	private Environment environment;

	/**
	 * 获取参数
	 * 
	 * @return
	 */
	@RequestMapping(value = "get")
	public String get() {
		return "产品名称为:" + environment.getProperty("product.name") + ", 作者为:" + environment.getProperty("product.author")
				+ ", 版本号为:" + environment.getProperty("product.version", "1.0");
	}

}
# 启动项目,访问测试接口
curl http://127.0.0.1:8080/env/get

# 返回
产品名称为:Demo, 作者为:C3Stones, 版本号为:1.0

5. @ConfigurationProperties 读取配置文件参数

  • 参数包装类
import java.util.List;

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

/**
 * 模块参数
 * 
 * @author CL
 *
 */
@Component
@ConfigurationProperties(prefix = "sys")
@PropertySource(value = { "classpath:application.yml" })
public class ModuleProperties {

	/**
	 * 模块包装类
	 */
	private List<Module> module;

	public List<Module> getModule() {
		return module;
	}

	public void setModule(List<Module> module) {
		this.module = module;
	}

	/**
	 * 模块 Entity
	 * 
	 * @author CL
	 *
	 */
	public static class Module {

		/**
		 * 编码
		 */
		private String code;

		/**
		 * 是否启用
		 */
		private Boolean enable;

		/**
		 * 版本
		 */
		private Integer version;

		public Module() {
			super();
		}

		public Module(String code, Boolean enable, Integer version) {
			super();
			this.code = code;
			this.enable = enable;
			this.version = version;
		}

		public String getCode() {
			return code;
		}

		public void setCode(String code) {
			this.code = code;
		}

		public Boolean getEnable() {
			return enable;
		}

		public void setEnable(Boolean enable) {
			this.enable = enable;
		}

		public Integer getVersion() {
			return version;
		}

		public void setVersion(Integer version) {
			this.version = version;
		}

		@Override
		public String toString() {
			return "模块编码:" + code + " - 是否启用:" + enable + " - 版本:" + version;
		}

	}
}
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.c3stones.config.ModuleProperties;
import com.c3stones.config.ModuleProperties.Module;

/**
 * ConfigurationProperties 注解获取参数值 Controller
 * 
 * @author CL
 *
 */
@RestController
@RequestMapping(value = "config")
public class ConfigurationPropertiesController {

	@Autowired
	private ModuleProperties moduleProperties;

	/**
	 * 获取参数
	 * 
	 * @return
	 */
	@RequestMapping(value = "get")
	public String get() {
		List<Module> module = moduleProperties.getModule();
		return module.toString();
	}

}
# 启动项目,访问测试接口
curl http://127.0.0.1:8080/config/get

# 返回
[模块编码:core, 是否启用:true, 版本:1, 模块编码:common, 是否启用:false, 版本:2]

6. 项目地址

  spring-boot-read-properties

posted @ 2021-04-25 22:59  C3Stones  阅读(1262)  评论(0编辑  收藏  举报