摘要:本文通过讲解如何解析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 "我爱北京天安门!";
}
}

2 几种获取属性值方式

  配置application.properties

value.local.province=Zhejiang
value.local.city=Hangzhou complex.other.province=Jiangsu
complex.other.city=Suzhou
complex.other.flag=false

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();
}
}

  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 +
'}';
}
}

  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();
}
}

  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);
}
}

  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

Spring系列之——springboot解析resources.application.properties文件的更多相关文章

  1. springboot官网->application.properties文件

    springboot application.properties 2.1.6.RELEASE

  2. SpringBoot中的application.properties外部注入覆盖

    由想要忽略properties中的某些属性,引发的对SpringBoot中的application.properties外部注入覆盖,以及properties文件使用的思考. SpringBoot 配 ...

  3. springboot使用外部application.properties配置文件

    一.背景介绍 springboot默认的application.properties文件只能在项目内部,如果打成docker镜像后配置文件也打进去了,这样每次需要改动配置(比如数据库的连接信息)就需要 ...

  4. SpringBoot读取application.properties文件

    http://blog.csdn.net/cloume/article/details/52538626 Spring Boot中使用自定义的properties Spring Boot的applic ...

  5. Eclipse下SpringBoot没有自动加载application.properties文件

    Eclipse内创建SpringBoot项目,在java/main/resources文件夹下面创建application.properties配置文件,SpringApplication.run后发 ...

  6. 自定义Yaml解析器替换Properties文件

    自定义Yaml解析器替换Properties文件 项目结构 案例代码 配置类SpringConfiguration @Configuration @Import(JdbcCofnig.class) @ ...

  7. springboot:读取application.yml文件

    现在开发主要使用微服务框架springboot,在springboot中经常遇到读取application.yml文件的情形. 一.概述 开发过程中经常遇到要读取application.yml文件中的 ...

  8. application.properties文件中暗藏玄机

    上次分享了如何一步一步搭建一个springboot的项目,详细参见<5分钟快速搭建一个springboot的项目>,最终的结果是在"8080"端口搭建起了服务,并成功访 ...

  9. springboot使用@Value注入properties文件中的值,中文乱码

    最近开发一个需求,讲一个中文值配置在properties文件中,然后代码中使用@Value注解进行注入使用,然而出现了如下状况: 中文出现乱码,将代码修改如下: String str = new St ...

随机推荐

  1. Two Pointers-349. Intersection of Two Arrays

    Given two arrays, write a function to compute their intersection. Example:Given nums1 = [1, 2, 2, 1] ...

  2. thinkphp5的mkdir() Permission denied问题

    最近一直在用tp5写项目,在此遇到的问题也比较多.今天来谈谈“mkdir() Permission denied”错误. 你如果不仅仅写代码,还得部署到线上,那么这个tp5的这个错误,你有很大概率会遇 ...

  3. poj3070矩阵快速幂求斐波那契数列

      Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13172   Accepted: 9368 Desc ...

  4. poj3070 Fibonacci(矩阵快速幂)

    矩阵快速幂基本应用. 对于矩阵乘法与递推式之间的关系: 如:在斐波那契数列之中 f[i] = 1*f[i-1]+1*f[i-2]  f[i-1] = 1*f[i-1] + 0*f[i-2].即 所以, ...

  5. SecureCRT连接Ubuntu,centos失败解决

    SecureCRT连接Ubuntu,centos失败,长时间的重新连接,连接不了. Ubuntu,centos默认未安装ssh远程加密连接服务.使用命令,安装即可. 1.sudo apt-get in ...

  6. xss跨站脚本攻击汇总

  7. iOS开发总结--三方平台开发之微信支付

    1.前言 现在很多应用都有支付功能,支付也是开发中比较麻烦的一个部分.其实,最麻烦的部分是商户帐号的审核,如果没有商户帐号,就没有你要给钱的那个对公账户. 2.关于交易 在这个金融类项目的开发中,接触 ...

  8. 【xsy1214】 异或路径(xorpath) 点分治+可持久化trie

    题目大意:给你一棵$n$个点的树,每个点有一个点权$x$,问你所有路径中点权异或和最大的路径的异或和 数据范围:$n≤30000$,$x≤2^{31}-1$. 如果是边上有点权的话非常简单,直接一个$ ...

  9. activiti插件安装-离线安装

    直接选择离线安装,在线因为网络问题,一直提示失败. 一.下载插件Activiti BPMN 2.0 designer 链接: https://pan.baidu.com/s/1gKBHZFnmNJx7 ...

  10. 获取列表数据时,getList 设置默认参数:getList(page = 1),点击分页及前往时,传page参数,其他使用page的默认值:1

    获取列表数据时,getList 设置默认参数:getList(page = 1),点击分页及前往时,传page参数,其他使用page的默认值:1