Spring Boot学习之旅:(二)两种配置文件

上一篇中创建了一个简单的springboot工程,简单的讲述了一下springboot 的启动方式,这里补充一下 ,除了从启动类启动外,还可以通过maven 用命令 maven package 打包成一个jar包的方式通过 命令行 java -jar 工程名.jar 启动 或者通过maven 插件 springboot:run 的方式 咳咳再将下去就跑题了。
下面进入正题这篇文章主要讲 springboot 的两种配置文件 .properties .yml 以及各种方式的优先级别。
springboot采纳了建立生产就绪Spring应用程序的观点。 Spring Boot优先于配置的惯例,旨在让您尽快启动和运行。在一般情况下,我们不需要做太多的配置就能够让spring boot正常运行。在一些特殊的情况下,我们需要做修改一些配置,或者需要有自己的配置属性。

一 .properties 配置

先看resources 文件夹下面有没有application.propertis 文件 没有的话创建一个。设置一下文件的编码。设置为utf-8在application.properties 文件中设置 两个数值如下

wen.hello=hello
wen.world=world

写一个controller 通过value 注解 获取数据 如下

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/** 
* @author 作者 cxhc
* @version 创建时间:2017年9月21日 下午10:05:49 
*/
@RestController
@RequestMapping("/hello")
public class HelloContreller {
        @Value("${wen.hello}")
        private  String hello;
        @Value("${wen.world}")
        private  String world;
    @RequestMapping("/index.do")
    public String helloPage() {
        System.out.println(hello+world);
        return hello+world;
    }
}

打开浏览器输入 http://localhost:8080/hello/index.do
就能看到helloworld 如下

这里写图片描述

另外.properties 中德值也是可以互相引用的如创建一个helloworld 可以这么写 wen.helloworld=${wen.hello}${wen.world}

下面通过java 配置的方式配置 读写 properties 首先声明一个配置类

/** 
* @author 作者 cxhc
* @version 创建时间:2017年9月24日 下午6:14:25 
*/
//这里标注       前缀
@Component
@ConfigurationProperties(prefix = "wen")
public class ConfigString {
     private String hello;
     private String world;
    /**
     * @return the hello
     */
    public String getHello() {
        return hello;
    }
    /**
     * @param hello the hello to set
     */
    public void setHello(String hello) {
        this.hello = hello;
    }
    /**
     * @return the world
     */
    public String getWorld() {
        return world;
    }
    /**
     * @param world the world to set
     */
    public void setWorld(String world) {
        this.world = world;
    }
     
}

启动项目
便可以看到和之前一样的效果ConfigString 中德值也是可以修改的使用
ConfigString.setHello("haha");修改。

二.yml 配置

下面看yml 的配置 在properties 文件同一目录下创建一个application.yml的文件
内容如下

wen:
    hello: hello
    world: world
    helloworld: ${wen.hello}${wen.world}

使用的方式和上面properties 是一样的就不再详细叙述了
注意一点 :冒号后要加个空格

三 配置优先级

.Application属性文件,按优先级排序,位置高的将覆盖位置低的

  1. 当前目录下的一个/config子目录
  2. 当前目录
  3. 一个classpath下的/config包
  4. classpath根路径(root)
    同时properties 文件的优先级高于yml
    另外springboot 中配置这些方式优先级如下:
    1. 命令行参数
      2.来自java:comp/env的JNDI属性
      3.Java系统属性(System.getProperties())
      4.操作系统环境变量
      5.RandomValuePropertySource配置的random.*属性值
      6.jar包外部的application-{profile}.properties或application.yml(带spring.profile)配置文件
      7.jar包内部的application-{profile}.properties或application.yml(带spring.profile)配置文件
      8.jar包外部的application.properties或application.yml(不带spring.profile)配置文件
      9.jar包内部的application.properties或application.yml(不带spring.profile)配置文件
      10.@Configuration注解类上的@PropertySource
      11.通过SpringApplication.setDefaultProperties指定的默认属性

四.自定义配置文件

上面介绍的是我们都把配置文件写到application.yml或者application.properties中。有时我们不愿意把配置都写到application配置文件中,这时需要我们自定义配置文件,比如test.properties:
创建一个test.properties 文件和application.properties 同目录
内容如下

com.wen.name=cxhc
com.wen.age=22

创建一个实体类和他对应


@Configuration
@PropertySource(value = "classpath:test.properties")
@ConfigurationProperties(prefix = "com.wen")
public class TestConfig {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

修改controller 添加一个方法获取test.properties 中的文件


@RestController
@RequestMapping("/hello")
public class HelloContreller {
    @Autowired
    ConfigString ConfigString;
    @Autowired
    TestConfig testConfig;
    @RequestMapping("/index.do")
    public String helloPage() {
        ConfigString.setHello("haha");
        System.out.println(ConfigString.getHello()+ConfigString.getWorld());
        return ConfigString.getHello()+ConfigString.getWorld();
    }
    @RequestMapping("/testConfig.do")
    public String testConfig() {
        ConfigString.setHello("haha");
        System.out.println(testConfig.getName()+testConfig.getAge());
        return testConfig.getName()+testConfig.getAge();
    }
}
 

启动项目浏览器输入http://localhost:8080/hello/testConfig.do便可以看到结果

五 多个环境配置文件

在开发过程一般都会遇到多环境配置的问题如开发环境,测试环境,生产环境等等。如果只用一个配置文件修改起来麻烦了
创建三个properties

  1. application-test.properties:测试环境
    2.application-dev.properties:开发环境
    3.application-prod.properties:生产环境
    那怎么使用呢 例如现在项目工程使用的是默认的端口 8080 在
    application-test.properties 添加端口配置改为 8081
server.port=8081

在application.properties 中引用 application-test.properties
添加 spring.profiles.active=test

启动项目
这里写图片描述

发现端口已经修改过来了

六推荐

项目源码 https://github.com/haha174/boot
个人博客 http://www.haha174.top/article/details/259872
七 查考文献


spring-boot-reference-guide-zh
pring Boot干货系列:(二)配置文件解析
Spring Boot 属性配置和使用
SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容