Spring boot系列:配置文件(二)

原创 2017年09月13日 15:13:16

1、小试牛刀

1.1 随机数

Spring Boot提供了RandomValuePropertySource帮助开发者在配置文件中直接生成随机值,它很多场景都有用武之地,比如密钥、测试用例等。这些随机值可以是整数,longs或字符串,我们只需要在配置文件中定义即可:

#随机字符串
buke.secret=${random.value}
#随机int类型数字
buke.number=${random.int}
#随机long类型数字
buke.bignumber=${random.long}
#随机最大值
buke.ten=${random.int(10)}
#随机范围值
buke.range=${random.int[1024,65536]}

需要注意的是,每次配置文件加载后(即SpringApplication启动run后),生成的随机数编程固定值,除非再次重启才会变更。

1.2 使用配置

使用也简单,像如下代码一样,只需要在想要绑定自定义值的属性上添加注解@Value(value = "${property}")即可。

 @Value(value = "${buke.secret}")
 public String secret;

1.3 绑定实体类

使用@Value(“${property}”)注解方式注入配置属性有时候可能显得比较笨重麻烦,尤其是需要使用多个properties或需要使用的数据本身有层次结构的时候。为了控制和property项目配置,Spring Boot提供一个允许使用自定义beans的替代方法来使用properties。

/**
 * 自定义配置属性绑定实体
 * @author 漆可
 * @date 2017年9月12日 下午8:30:35
 */
@Component
@ConfigurationProperties(prefix = "buke")
public class ConfigBean
{
    private String secret;
    private int number;
    private long bignumber;
    private int less;
    private int range;

    //getters setters ...
}

1.4 测试效果

我们写个接口,测试绑定效果:

@RestController
public class ProperfileController
{
    @Autowired
    ConfigBean configBean;  

    @RequestMapping("/test")
    public Object test()
    {
        Map<String, Object> map = new HashMap<>();
        map.put("secret", configBean.getSecret());
        map.put("number", configBean.getNumber());
        map.put("bignumber", configBean.getBignumber());
        map.put("less", configBean.getLess());
        map.put("range", configBean.getRange());

        return map;
    }
}

上述代码的只做了一件事情,获取在配置文件中定义的随机值,并通过接口放回给前端页面显示:

这里写图片描述

1.5 替换者Yaml

Spring Boot支持并推荐使用Yaml配置文件。Yaml是Json的一个超集,与properties相比,它拥有数据的层级结构,又比XMl文件结构简单。

注意字段分号:后面要加一个空格,不然无法读取到该值。将上述application.properties文件改为Yaml格式的application.yml:

buke:
  secret: ${random.value}
  bignumber: ${random.long}
  less: ${random.int(10)}
  range: ${random.int[1024,65536]}
  number: ${random.int}

需要指出的是,同级目录上,properties配置的属性会覆盖Yaml属性,而不是有些网上所说的Yaml覆盖前者。

2 通过命令行设置属性值

Spring Boot允许外化(externalize)项目配置,即不依靠项目本身的文件就可以改变、覆盖的项目原先的配置文件内容,方便我们在不同的环境执行不同的配置内容。最常用的就是通过命令行修改配置参数。

在使用命令行运行jar包部署Spring Boot应用的时候,可以使用命令行设置属性值。

java -jar xxx.jar –server.port=8090

如上命令行通过使用–server.port属性设置xxx.jar应用的端口为8090。

在命令行运行时,采用--xxx=xxx的格式设置设置属性值。连续的两个减号–就是对application.properties中的属性值进行赋值的标识。以上命令等价于我们在application.properties中添加属性server.port=8090。可设置的的属性值可以是我们自己定义的,也可以是Spring Boot中默认的参数。

通过命令行来修改属性值固然提供了不错的便利性,但是通过命令行就能更改应用运行的参数也是一种不安全的行为。我们可以在程序的启动入口加上SpringApplication.setAddCommandLineProperties(false)来禁用命令行传参。

3 应用的配置文件

3.1 应用文件的位置

spring会从以下位置加载application.properties或application.yml配置文件:

  1. 当前目录下的一个/config子目录
  2. 当前目录
  3. 一个classpath下的/config包
  4. classpath根路径(root)

这个列表是按优先级排序的(列表中前面的将覆盖后面的)。

3.2 修改配置文件名称

我们可以通过重写spring.config.name的值来修改配置文件的名称application

通过命令修改配置文件名称:

$ java -jar xxx.jar --spring.config.name=myprofile

通过配置文件修改配置文件名称:

spring.config.name=myprofile

或者这样:

spring: 
    config: 
        name: myprofile

3.3 修改配置文件路径

我们可以重写spring.config.location指定配置文件具体的路径(目录位置或文件路径列表以逗号分割)。

$ java -jar xxx.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

如果spring.config.location包含目录(相对于文件),必须以/结尾表示该配置是个目录,在加载前,spring.config.name配置的文件名称会被追加到后面。

不管spring.config.location配置的是什么值,默认的配置文件路径classpath:,classpath:/config,file:,file:config/都会被使用。
这样可以方便开发者,在该路径路径设置一些默认值,然后在运行的时候使用不同的文件覆盖它,同时保留这些默认配置。

4、多环境配置

4.1 定义

我们在开发web项目时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发、测试、生产等。当应用程序需要部署到不同运行环境时,一些配置细节通常会有所不同,最简单的比如日志级别,数据库地址、服务器端口。这就使得我们在打包的时候频繁的修改配置文件。

Profile配置,坊间戏称多环境配置,也叫隔离环境配置。它是一种强大的配置方式,解决了我们以往由于不同的环境配置频繁大量修改配置文件的问题。

4.2 多环境配置的方法

在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:

  • application-dev.properties:开发环境
  • application-test.properties:测试环境
  • application-prod.properties:生产环境

想要加载某个配置文件,只需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应指定配置文件的{profile}值。

spring.profiles.active=test

比如: 以上设置就会加载application-test.properties配置文件内容。

当然,也可以通过命令行指定具体配置文件。

java -jar xxx.jar --spring.profiles.active=test
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

HTTP协议中PUT和POST使用区别

这俩个方法初看一下好像都是更新资源,但是有本质上的区别,那就是语义。在HTTP中,PUT被定义为幂等(idempotent)的方法,POST则不是,这是一个很重要的区别。首先解释幂等,幂等是数学的一个...

解决Http PUT请求方式无法表单传参问题

问题描述SpringMVC中,Controller层设置该接口为PUT请求方式。但是请求的时候,只能是url地址拼接参数,不可以像POST请求一样通过表单方式传递参数。问题原因对于表单提交参数,tom...

Spring Boot系列 - 4. 读取配置文件(application.yml)中的属性值

Spring Boot系列 - 4. 读取配置文件(application.yml)中的属性值

Spring Boot系列教程五:使用properties配置文件实现多环境配置

实际项目开发过程中会用到多个环境,比如dev,test,product环境,不同的环境可能使用不同参数,为便于部署提高效率,本篇主要通过properties配置文件来实现多环境的配置。...

Spring Boot系列(二):Spring Boot的配置文件

Spring Boot 支持多种外部配置方式 一:应用配置文件; 1:默认配置方式:application.properties server:port: 8080 server.con...

Spring-Boot学习笔记(二) 配置文件之初步使用

在上一节,主要是搭建了一个spring-boot的项目工程。然后编写了一个restful API,实现了一个简单的web应用。我们比较发现,spring-boot并没有使用原来如spring-mvc那...

Spring Boot 基础知识学习(二)——配置文件多环境配置

SpringBoot 基础知识学习(二)——配置文件多环境配置             通过上一篇《Spring Boot 基础知识学习(一)——快速入门》我们知道SpringBoot使用默认配置来简...

Spring Boot_配置文件-多环境配置

  • 2016年10月28日 15:14
  • 26.65MB
  • 下载

spring boot 单元测试与读取配置文件(application.yml)中的属性值

1、引入依赖: org.springframework.boot spring-boot-starter-test test ...

spring boot 配置文件后缀的一个坑

Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationEx...
  • mzh1992
  • mzh1992
  • 2016年12月29日 18:24
  • 4332
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring boot系列:配置文件(二)
举报原因:
原因补充:

(最多只允许输入30个字)