SpringBoot之配置

本文介绍了SpringBoot中starter-parent的作用,如何通过依赖传递获取所需jar包,配置文件如application.properties和YAML的使用,以及如何处理配置文件加载顺序、多profile切换、数据校验和打包过程中的问题。
摘要由CSDN通过智能技术生成

起步依赖原理分析

在 spring-boot-starter-parent 里定义了各种技术的版本信息,组合了一套最优的技术版本搭配;

在各种starter中,定义类完成改功能需要的坐标合计,其中大部分信息都来自父工程

【注】按住Ctrl键再鼠标左键点击spring-boot-starter-parent可以打开该文档,这就是父类的文档

工程文件在继承parent,引入starter之后,通过依赖传递,就可以简单方便地获得需要的jar包,并且不会存在版本冲突问题。

自定义SpringApplication

官网提供了一个这样的实例,用于关闭启动时的横幅。

配置文件

配置文件分类

默认配置文件名称:application

  • application.properties

    使用键值对的格式

server.port = 8080

  • application.yml(application.yaml)

server:

    port: 8080

注意:冒号和8080之间有一个空格

加载顺序

如果三种配置文件都有,那么properties的优先级最高,其次是yml,最后是yaml。

yaml

全称是YAML Ain't Markup Language。是一种直观地能被电脑识别的数据序列化格式,并且容易被人阅读,容易和脚本语言交互。YAML文件是以数据为核心的,比传统的XML更加简洁。

YAML的扩展名可以是.yml或.yaml。

基本语法

  • 大小写敏感
  • 数据值之前必须有空格,空格数目大于0
  • 使用缩进表示层级关系
  • 缩进时不能用Tab键,只允许使用空格(各个操作系统Tab对应的空格数目不同,导致层次混乱)
  • 相同层级的元素左对齐
  • #表示注释,从这个字符直到行尾都会被解析器省略
  • server的冒号后面有没有空格无所谓

数据格式

1. 对象map:键值对

person:

    name:  zhangsan

#行内写法

person:   {name:  zhangsan}

2. 数组:一组按次序排列的值

address:

    -beijing

    -shanghai

#行内写法

address:  [beijing,zhanghai]

3. 纯量:单个的,不可再分的值

msg1: 'hello \n world'   # 单引号忽略转义字符

msg2: "hello \n world"  # 双引号识别转义字符

参数引用

${key}

name: lisi

person:

    name: ${name}

读取配置文件内容

  1. @Value
  2. Environment
  3. @ConfigurationProperties
  4. @PropertiesSource("classpath:data/user.properties"),这是引入外部配置文件,且不能是YAML文件,而且写的时候要注意格式,使用行内写法,冒号要换成等号。

@Component    把注解的属性加入到Spring容器(组件)中

@Value("${user.name}")  通过SpEL表达式绑定

@ConfigurationProperties(prefix="user")  通过指定配置文件中的某一个节点,自动和属性进行绑定,在指定时属性名称不一定要完全一致,即支持松散绑定。不支持SPEL表达式,但是可以使用占位符。举例如下:

-------------------------------------------------------------------------------------

address:

     id : 1

    desc : ${user.name}   //这个不是SPEL表达式,而是对其他属性的引用

username: ${radom.value}

age: ${radom.int}

或者age: ${radom.int(2)}    2是位数

或者age: ${radom.int[1,100]}   表示范围

--------------------------------------------------------------------------------------

@Validated  用于数据校验  例如@Notnull 就是校验数据非空

解决中文乱码:setting——file encoding —— UTF-8

自动提示:可以在官网上查到依赖,加上以后在配置文件里编写时就能看到提示。

profile

在开发SpringBoot应用时,通常一套程序会被安装到不同的环境,比如:开发、测试、生产,其中数据库地址、服务器端口等配置都不同,如果每次打包都要修改配置文件则非常麻烦。

profile就是来进行动态配置切换的。

配置方式

  • 多profile文件方式
  • YML多文档方式

激活方式

  • 配置文件
  • 虚拟机参数
  • 命令行参数

代码演示

1. 多profile文件方式

先利用快速创建SpringBoot项目的方式搭建起来(具体方式在上一篇里)

在resources文件夹里新建下面的三个文档

之后直接运行查看结果

可以看到端口号是8080,并且第二行提示没有激活profile设置

接下来在application.properties里添加激活

再次运行查看结果

这次的端口号变为8081,并且第二行提示已经激活dev

2. 新建application.yml文件

三个横杠表示分割

再次运行查看结果

上面的激活都是在配置文件里面,下面介绍其他方式

在这个下选择Edit Configurations

在VM options里写,表示虚拟机配置

-Dspring.profiles.active=test

虚拟机成功覆盖

使用命令行,在里找到program arguments在里面写

--spring.profiles.active=pro

最终效果如下图所示

注意运行时先把刚刚写过的虚拟机命令删除

打包JAR

点击package进行打包

我在打包时出现了这样的错误:SpringBoot打包失败:Please refer to XXX\target\surefire-reports for the individual test results.

可以在pom.xml文件里添加

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
        <testFailureIgnore>true</testFailureIgnore>
    </configuration>
</plugin>

再次打包即可

有SUCCESS提示证明打包成功

在此目录下可以看到打包好的jar包

按住shift键点右键,打开powershell,输入

 java -jar .\springboot-profiles-0.0.1-SNAPSHOT.jar

回车查看

也可以直接指定外部参数

java -jar .\springboot-profiles-0.0.1-SNAPSHOT.jar --spring profiles.active=dev

内部配置加载顺序

SpringBoot程序启动时,会从以下位置加载配置文件:

  1. file:./config/  :当前项目下的/config目录下
  2. file:./             :当前项目下的根目录
  3. classpath:/config/ :classpath的/config目录
  4. classpath:/           :classpath的根目录

加载顺序就是上述顺序,高优先级配置的属性会生效

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值