Spring Boot 配置

     在用qt工程时,第一、客户机与服务器调试会出现,A客户机开发人员需要与不同的服务器开发人员调试,同样B服务器开发人员需要与不同的客户机开发人员调试,在只有一个配置文件的情况下,需要频繁修改本地IP及端口,对端IP及端口,造成联试困难。第二、开发环境与部署环境存在与不同网段,服务器软件与数十个设备通信,当切换环境调试时,并且只有一个配置文件的情况下,需要将与数十个设备通信的IP进行修改。

        借鉴springboot配置方式,更改现有工程的配置文件加载逻辑, 将Qt配置文件写成多份,主配置文件用于指定加载那个配置文件,方便客户机与服务器的多对多调试,服务器在不同网段的与分机设备调试。

一、配置文件分类

         SpringBoot是基于约定的,所以很多配置都有默认值,比如默认端口为8080,如果需要使用自己的配置,需要在配置文件中进行设置。默认配置文件名称:application 。配置文件类型分为application.properties、application.yml、application.yaml。在同一级目录下优先级为:properties > yml > yaml,同一配置优先级高的起效,当配置出现在低优先级中并且高优先级没有这一配置,则低优先级才起效,即当三个文件同时存在时,三个文件都会被springboo扫描,而不是只扫描优先级最高的文件。

properties格式:

server.port=8080
server.address=127.0.0.1

yml/yaml格式:

server:
  port: 8080
  address: 127.0.0.1

二、YMAL

(1) 基本语法    

大小写敏感
数据值前边必须有空格,作为分隔符
使用缩进表示层级关系
缩进时不允许使用Tab键,只允许使用空格(各个系统 Tab对应的 空格数目可能不同,导致层次混乱)。
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
# 表示注释,从这个字符一直到行尾,都会被解析器忽略。

(2) 数据格式  

            对象(map):键值对的集合。

person:
   name: zhangsan
# 行内写法
person: {name: zhangsan}
           数组:一组按次序排列的值
address:
   - beijing
   - shanghai
# 行内写法
address: [beijing,shanghai]
  纯量:单个的、不可再分的值
msg1: 'hello \n world' # 单引忽略转义字符
msg2: "hello \n world" # 双引识别转义字符

参数引用:

name: lisi
person:
    name: ${name} # 引用上边定义的name值

三、读取配置内容

           

1) @Value

    @Value("${name}")
    private String name;

    //获取map值
    @Value("${person.name}")
    private String name1;

    //获取数组中的元素
    @Value("${address[0]}")
    private String address1;

    //获取纯量
    @Value("${msg1}")
    private String msg11;

2) Environment

    @Autowired
    private Environment env;

    env.getProperty("name");
    //获取map值
    env.getProperty("person.name");
    //获取数组中的元素
    env.getProperty("address[0]");
    //获取纯量
    env.getProperty("msg1");

3) @ConfigurationProperties

@ConfigurationProperties(prefix = "person") //添加注解

//首先定义Person类
package cti.cetc.helloworld.controller;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component //添加注解
@ConfigurationProperties(prefix = "person") //添加注解
public class Person {
    private String name;
    private int age;
    private String[] address;
}


//在定义Person时,添加注解
@Autowired
private Person person;


该注解prefix 是前置条件
name:nnj
person:
  name: mmj
1、prefix 为默认值时
 person.name会直接取 name:nnj赋值
2、prefix = "person"时
  person.name会直接取 person:
                         name: mmj赋值


四 profile

       我们在开发Spring Boot应用时,通常同一套程序会被安装到不同环境,比如:开发、测试、生产等。其中数据库地址、服务 器端口等等配置都不同,如果每次打包时,都要修改配置文件,那么非常麻烦。profile功能就是来进行动态配置切换的。
      
       
1) profile配置方式
多profile文件方式
application-dev.properties/yml 开发环境
application-test.properties/yml 测试环境
application-pro.properties/yml 生产环境
yml多文档方式
在yml中使用 --- 分隔不同配置
---
server:
  port: 8080
  address: 127.0.0.1
spring:
  profiles: dev
---
server:
  port: 8081
  address: 127.0.0.1
spring:
  profiles: pro
  
---
server:
  port: 8082
  address: 127.0.0.1
spring:
  profiles: test
---

spring:
  profiles:
    active: dev

2) profile激活方式
配置文件: 再配置文件中配置:spring.profiles.active=dev
虚拟机参数:在VM options 指定:-Dspring.profiles.active=dev
命令行参数:java –jar xxx.jar --spring.profiles.active=dev

五、内部配置加载顺序

Springboot程序启动时,会从以下位置加载配置文件:
1. file:./config/ :当前项目下的/config目录下
2. file:./ :当前项目的根目录
3. classpath:/config/ :classpath的/config目录
4. classpath:/ :classpath的根目录
加载顺序为上文的排列顺序,高优先级配置的属性会生效

六、外部配置加载顺序

先加载与jar包同级的config文件夹下的application.properties

再加载与jar包同级的application.properties

最后加载jar内的application.properties

 

  • 13
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值