Spring系列之——springboot解析resources.application.properties文件
摘要:本文通过讲解如何解析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文件的更多相关文章
- springboot官网->application.properties文件
springboot application.properties 2.1.6.RELEASE
- SpringBoot中的application.properties外部注入覆盖
由想要忽略properties中的某些属性,引发的对SpringBoot中的application.properties外部注入覆盖,以及properties文件使用的思考. SpringBoot 配 ...
- springboot使用外部application.properties配置文件
一.背景介绍 springboot默认的application.properties文件只能在项目内部,如果打成docker镜像后配置文件也打进去了,这样每次需要改动配置(比如数据库的连接信息)就需要 ...
- SpringBoot读取application.properties文件
http://blog.csdn.net/cloume/article/details/52538626 Spring Boot中使用自定义的properties Spring Boot的applic ...
- Eclipse下SpringBoot没有自动加载application.properties文件
Eclipse内创建SpringBoot项目,在java/main/resources文件夹下面创建application.properties配置文件,SpringApplication.run后发 ...
- 自定义Yaml解析器替换Properties文件
自定义Yaml解析器替换Properties文件 项目结构 案例代码 配置类SpringConfiguration @Configuration @Import(JdbcCofnig.class) @ ...
- springboot:读取application.yml文件
现在开发主要使用微服务框架springboot,在springboot中经常遇到读取application.yml文件的情形. 一.概述 开发过程中经常遇到要读取application.yml文件中的 ...
- application.properties文件中暗藏玄机
上次分享了如何一步一步搭建一个springboot的项目,详细参见<5分钟快速搭建一个springboot的项目>,最终的结果是在"8080"端口搭建起了服务,并成功访 ...
- springboot使用@Value注入properties文件中的值,中文乱码
最近开发一个需求,讲一个中文值配置在properties文件中,然后代码中使用@Value注解进行注入使用,然而出现了如下状况: 中文出现乱码,将代码修改如下: String str = new St ...
随机推荐
- Python 获取秒级时间戳与毫秒级时间戳
原文:Python获取秒级时间戳与毫秒级时间戳 1.获取秒级时间戳与毫秒级时间戳 import time import datetime t = time.time() print (t) #原始时间 ...
- 用 python 修改文件中指定的行数
#! /bin/python filename='setup.ini' lines=[] with open(filename,'r') as f: lines=f.readlines() lines ...
- 《Python绝技:运用Python成为顶级黑客》 用Python进行渗透测试
1.编写一个端口扫描器 TCP全连接扫描.抓取应用的Banner #!/usr/bin/python #coding=utf-8 import optparse import socket from ...
- position:absolute元素 怎样居中
<div style = 'height:20px;position:absolute;z-index:9999;top:0;left:0;right:0;margin:auto;'> & ...
- ajax post 400 bad request
是前端ajax没有加声明:contentType:'application/json',
- express 重新加载
1,res.location() 2. res.redirect() location()与redirect()的比较: Express的response对象,是对Node.js原生对象ServerR ...
- 一对一关联查询注解@OneToOne的实例详解
表的关联查询比较复杂,应用的场景很多,本文根据自己的经验解释@OneToOne注解中的属性在项目中的应用.本打算一篇博客把增删改查写在一起,但是在改的时候遇到了一些问题,感觉挺有意思,所以写下第二篇专 ...
- C#里面获取web和非web项目路径
非Web程序获取路径几种方法如下: 1.AppDomain.CurrentDomain.BaseDirectory 2.Environment.CurrentDirectory 3.HttpRunt ...
- css单行文本及多行文本溢出显示省略号
关于文本溢出的相关属性: 1. text-overflow: clip|ellipsis|string; 该属性规定当文本溢出包含元素时发生的事情. clip : 修剪文本. ellipsis : ...
- AngularJS入门之Services
关于AngularJS中的DI 在开始说AngularJS的Service之前,我们先来简单讲讲DI(Dependency Injection,通常中文称之为“依赖注入”). DI是一种软件设计模式, ...