摘要: 本文通过讲解如何解析 application.properties 属性, 介绍了几个注解的运用 @Value @ConfigurationProperties @EnableConfigurationProperties @Autowired @ConditionalOnProperty
1 准备
1.1 搭建 springboot
1.2 写一个 controller 类
- package com.gbm.controller;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.Web.bind.annotation.ResponseBody;
- /**
- * Created by Administrator on 2019/2/20.
- */
- @Controller
- public class IndexController {
- @RequestMapping("/index")
- @ResponseBody
- public String index() {
- return "我爱北京天安门!";
- }
- }
- View Code
2 几种获取属性值方式
配置 application.properties
- value.local.province=Zhejiang
- value.local.city=Hangzhou
- complex.other.province=Jiangsu
- complex.other.city=Suzhou
- complex.other.flag=false
- View Code
2.1 使用注解 @Value("${xxx}") 获取指定属性值
2.1.1 在 controller 类中获取属性值
- package com.gbm.controller;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Controller;
- import org.springframework.Web.bind.annotation.RequestMapping;
- import org.springframework.Web.bind.annotation.ResponseBody;
- /**
- * Created by Administrator on 2019/2/20.
- */
- @Controller
- public class IndexController {
- @Value("${value.local.province}")
- private String province;
- @Value("${value.local.city}")
- private String city;
- @RequestMapping("/index")
- @ResponseBody
- public String index() {
- StringBuffer sb = new StringBuffer();
- sb.append(this.city);
- sb.append(",");
- sb.append(this.province);
- sb.append(" ");
- return sb.toString();
- }
- }
- View Code
2.1.2 任何浏览器上运行 http://localhost:8080/index, 结果如下
2.2 使用注解 @ConfigurationProperties(prefix = "xxx") 获得前缀相同的一组属性, 并转换成 bean 对象
2.2.1 写一个实体类
- package com.gbm.models;
- import org.springframework.boot.context.properties.ConfigurationProperties;
- import org.springframework.stereotype.Component;
- /**
- * Created by Administrator on 2019/2/21.
- */
- @Component
- @ConfigurationProperties(prefix = "complex.other")
- public class Complex {
- private String province;
- private String city;
- private Boolean flag;
- public String getProvince() {
- return province;
- }
- public void setProvince(String province) {
- this.province = province;
- }
- public String getCity() {
- return city;
- }
- public void setCity(String city) {
- this.city = city;
- }
- public Boolean getFlag() {
- return flag;
- }
- public void setFlag(Boolean flag) {
- this.flag = flag;
- }
- @Override
- public String toString() {
- return "Complex{" +
- "province='" + province + '\'' +
- ", city='" + city + '\'' +
- ", flag=" + flag +
- '}';
- }
- }
- View Code
2.2.2 在 controller 类中获取属性值
- package com.gbm.controller;
- import com.gbm.models.Complex;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.Web.bind.annotation.RequestMapping;
- import org.springframework.Web.bind.annotation.ResponseBody;
- /**
- * Created by Administrator on 2019/2/20.
- */
- @Controller
- public class IndexController {
- @Autowired
- private Complex complex;
- @RequestMapping("/index")
- @ResponseBody
- public String index() {
- return complex.toString();
- }
- }
- View Code
2.2.3 在 SpringBootApplication 中使 Configuration 生效
- package com.gbm.myspingboot;
- import com.gbm.models.Complex;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
- import org.springframework.boot.context.properties.EnableConfigurationProperties;
- import org.springframework.context.annotation.ComponentScan;
- import org.springframework.context.annotation.ComponentScans;
- @SpringBootApplication
- @ComponentScans({@ComponentScan("com.gbm.controller"), @ComponentScan("com.gbm.models")})
- @EnableConfigurationProperties(Complex.class)
- @ConditionalOnProperty(value = "complex.other.town", matchIfMissing = true)
- public class MyspingbootApplication {
- public static void main(String[] args) {
- SpringApplication.run(MyspingbootApplication.class, args);
- }
- }
- View Code
2.2.4 任何浏览器上运行 http://localhost:8080/index, 结果如下
3 总结
关于解析 application.properties 文件, 最重要的是对注解的使用, 本文主要涉及到如下几个注解的运用
@Value("${xxx}")-- 获取指定属性值
@ConfigurationProperties(prefix = "xxx")-- 获得前缀相同的一组属性, 并转换成 bean 对象
@EnableConfigurationProperties(xxx.class)-- 使 Configuration 生效, 并从 IoC 容器中获取 bean
@Autowired-- 自动注入 set 和 get 方法
@ConditionalOnProperty(value = "complex.other.town", matchIfMissing = true)-- 缺少该 property 时是否可以加载, 如果是 true, 没有该 property 也会正常加载; 如果是 false 则会抛出异常. 例如
- package com.gbm.myspingboot;
- import com.gbm.models.Complex;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
- import org.springframework.boot.context.properties.EnableConfigurationProperties;
- import org.springframework.context.annotation.ComponentScan;
- import org.springframework.context.annotation.ComponentScans;
- @SpringBootApplication
- @ComponentScans({@ComponentScan("com.gbm.controller"), @ComponentScan("com.gbm.models")})
- @EnableConfigurationProperties(Complex.class)
- @ConditionalOnProperty(value = "complex.other.town", matchIfMissing = false)
- public class MyspingbootApplication {
- public static void main(String[] args) {
- SpringApplication.run(MyspingbootApplication.class, args);
- }
- }
matchIfMissing=false 代码
- Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
- 2019-02-21 23:30:56.532 ERROR 3152 --- [ main] o.s.boot.SpringApplication : Application run failed
来源: http://www.bubuko.com/infodetail-2963604.html