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
版权声明:本文为博主原创文章,未经博主允许不得转载。

SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解

springboot采纳了建立生产就绪Spring应用程序的观点。 Spring Boot优先于配置的惯例,旨在让您尽快启动和运行。在一般情况下,我们不需要做太多的配置就能够让spring boot正...
  • forezp
  • forezp
  • 2017年04月22日 15:04
  • 34076

SpringBoot配置属性之MQ

activemq spring.activemq.broker-url指定ActiveMQ broker的URL,默认自动生成. spring.activemq.in-memo...
  • alibert
  • alibert
  • 2016年12月17日 18:49
  • 2710

Spring Boot 支持多种外部配置方式

Spring Boot 属性配置和使用 Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置。这些方式优先级如下: 1...
  • sun1021873926
  • sun1021873926
  • 2017年05月13日 01:33
  • 2761

Spring Boot干货系列:(二)配置文件解析

Spring Boot使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。所以,我们要想把Spring Boot玩的溜,就要懂...
  • u011280083
  • u011280083
  • 2017年12月13日 00:48
  • 119

Spring Boot干货系列:(二)配置文件解析

前言上一篇介绍了Spring Boot的入门,知道了Spring Boot使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。...
  • c3618392
  • c3618392
  • 2017年12月29日 20:51
  • 31

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

Spring Boot系列 - 4. 读取配置文件(application.yml)中的属性值
  • hemin1003
  • hemin1003
  • 2016年11月19日 09:33
  • 2066

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

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

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

Spring Boot 支持多种外部配置方式 一:应用配置文件; 1:默认配置方式:application.properties server:port: 8080 server.con...
  • abcchengxuyuan
  • abcchengxuyuan
  • 2017年04月29日 11:02
  • 208

Spring Boot教程二:读取配置文件

1:在application.properties中读取自定义属性的配置很简单,在这里不做过多的描述: 自定义属性与加载 例如定义如下属性:com.blog.title=Spring Boot教程...
  • wang_shuyu
  • wang_shuyu
  • 2017年12月07日 13:09
  • 45

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

在上一节,主要是搭建了一个spring-boot的项目工程。然后编写了一个restful API,实现了一个简单的web应用。我们比较发现,spring-boot并没有使用原来如spring-mvc那...
  • qq_31084201
  • qq_31084201
  • 2017年07月06日 14:10
  • 186
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring boot系列:配置文件(二)
举报原因:
原因补充:

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