第01章 Spring-Boot 应用文件application配置

文章目录

  • 第01章 Spring-Boot 应用文件application配置
    • 前言
    • 目标
    • 环境
    • 随机值配置
    • 属性占位符
    • 应用配置文件加载顺序
    • 应用配置文件键值对覆盖
    • 常用配置
      • 应用端口配置
      • 时间格式化配置
      • 时区设置
    • 多环境配置
      • 多环境配置的好处
      • Properties 多环境配置
      • YAML多环境配置
      • 两种配置方式的比较
      • 如何使用
    • 配置高级篇
      • 一、配置方式
    • 二、如何实现多环境配置
    • 三、配置信息的加载顺序
    • 四、自定义参数
    • 五、参数引用
    • 六、使用随机数
    • 七、命令行参数
    • 七、命令行参数

前言

  • 为什么要使用 Spring-Boot?

    可参考官方文档。

  • 什么是 Spring-Boot?

    可参考官方文档说明。

  • 官方地址

    https://spring.io/projects/spring-boot

目标

  • 完成 Jenkins 在 Docker 中的安装与配置。
  • 安装在 Docker 中的 Jenkins 能正常对外提供服务。
  • 在外部开发环境中能正常访问和使用 Jenkins 持续集成服务。

环境

  • **VMware:**VMware Workstation 14 Pro

  • **Linux:**CentOS7.4

  • **Docker:**18.06.0-ce, build 0ffa825

  • **Jenkins:**Jenkins2.121.1

  • **JDK:**jdk1.8.0_172

  • **Spring-Boot:**2.0.4

  • **Eclipse:**Eclipse Neon.3 (4.6.3)

  • spring-tool-suite:

    Version: 3.8.4.RELEASE
    Build Id: 201703310825
    Platform: Eclipse Neon.3 (4.6.3)

  • **Maven:**3.5.0

随机值配置

xxx.secret=${random.value}
xxx.number=${random.int}
xxx.bignumber=${random.long}
xxx.number.less.than.ten=${random.int(10)}
xxx.number.in.range=${random.int[1024,65536]}

在应用代码中可以使用注解读取:@Value(value = "${xxx.secret}")

注:出现黄点提示,是要提示配置元数据,可以不配置

属性占位符

当application.properties里的值被使用时,它们会被存在的Environment过滤,所以你能够引用先前定义的值(比如,系统属性)。

xxx.name=www.google.com
xxx.desc=${xxx.name} is a domain name

应用配置文件加载顺序

Application配置文件,加载按优先级排序,位置高的将覆盖位置低的

  1. 当前目录下的一个/config子目录

  2. 当前目录

  3. 一个classpath下的/config包

  4. classpath根路径(root)

这个列表是按优先级排序的(列表中位置高的将覆盖位置低的)

应用配置文件键值对覆盖

应用配置文件的加载顺序,相同的键值对会对值进行覆盖,后面的会覆盖前面的。

  1. @TestPropertySource 注解
  2. 命令行参数
  3. Java系统属性(System.getProperties())
  4. 操作系统环境变量
  5. 只有在random.*里包含的属性会产生一个RandomValuePropertySource
  6. 在打包的jar外的应用程序配置文件(application.properties,包含YAML和profile变量)
  7. 在打包的jar内的应用程序配置文件(application.properties,包含YAML和profile变量)
  8. 在@Configuration类上的@PropertySource注解
  9. 默认属性(使用SpringApplication.setDefaultProperties指定)

常用配置

应用端口配置

server.port=8090

时间格式化配置

spring: jackson.time-zone: Asia/Shanghaijackson.date-format: yyyy-MM-dd HH:mm:ss

时区设置

spring: jackson.time-zone: Asia/Shanghai

注意:使用YAML代替Properties写法,冒号后面加个空格

多环境配置

多环境配置的好处

1.不同环境配置可以配置不同的参数

2.便于部署,提高效率,减少出错

Properties 多环境配置

1.配置激活选项

spring.profiles.active=dev

2.添加其他配置文件

application-dev.properties
application-test.properties
application-prod.properties
application.properties

YAML多环境配置

1.配置激活选项

spring:profiles:active: dev

2.在配置文件添加三个英文状态下的短横线即可区分

---
spring:profiles: dev

两种配置方式的比较

  1. Properties配置多环境,需要添加多个配置文件,YAML只需要一个配件文件

    2.书写格式的差异,yaml相对比较简洁,优雅

  2. YAML的缺点:不能通过@PropertySource注解加载。如果需要使用@PropertySource注解的方式加载值,那就要使用properties文件。

如何使用

java -jar myapp.jar --spring.profiles.active=dev

配置高级篇

一、配置方式

1、Spring Boot 应用的配置内容都可以统一集中在src/main/resource/application.properties文件中进行配置。

根据我们引入的不同Starter模块,可以在这里定义容器端口号、数据库连接ixnxi、日志级别等各种配置信息。

2、支持现在被广泛推荐使用的YAML文件。

YAML(英语发音类似camel)是一个可读性高,用来表达资料序列的格式。

全称是:YAML Ain’t a Markup Language,不是一种标记语言。

YAML的意思其实是:Yet Another Markup Language(仍是一种标记语言),但为了强调这种语言以数据作为中心,而不是以标记语言为重点,而用反向缩略语重新命名。

YMAL设计参考了多种语言,包括C语言、python、perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。

YMAL特点:

YMAL的语法和其他高阶语言类似,并且可以简单地表达清单、散列表、标量等形态。

使用空白符号缩排和大量依赖外观的特色,特别适合来表达或编辑数据结构、各种设定文档、文件大纲。

比较适合表达阶层式的数据结构,也可以用精致的语法表示关联性(relational model)的资料。

YMAL使用空白符号和分行来分割资料,使得它特别适合用 grep/python/perl/ruby 操作。

巧妙避开各种封闭符号,如引号、各种括号等,这些符号在巢状结构时会变得复杂而难以辨认。

——维基百科

YAML 采用的配置格式不像properties的配置那样以单纯的键值对形式来表示,而是以类似大纲的缩进形式来表示。

YMAL还可以在一个单个文件中通过使用 spring.profies 属性来定义多个不同的环境变量。比如默认、指定等形式。

server:

port: 8881

spring:

profiles: testserver:port: 8882\---spring:profiles: prodserver:port: 8883

注意:YMAL目前还有一些不足,它无法通过@PropertySource注解来加载配置。但是,YAML将属性加载到内存中保存的时候是有序的,所以当配置文件中的信息需要具备顺序含义的时候,YAML的配置方式比起properties配置文件更有优势。

二、如何实现多环境配置

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

application-dev.properties:开发环境

application-test.properties:测试环境

application-prod.properties:生产环境

至于具体哪个配置文件会被加载,需要在application.properties 文件中通过 spring.profiles.active 属性来设置。

可在启动时动态修改这个配置属性值:

java -jar xxx.jar --spring.profiles.active=prod

总结多环境的配置思路:

1、在application.properties 中配置通用内容,并设置 spring.profiles.active=dev,以开发环境为默认配置

2、在application-{profile}.properties 中配置各个环境布偶她能更多内容。

3、通过命令行方式去激活不同环境的配置。

三、配置信息的加载顺序

为了能够更加合理的重写各属性的值,Spring Boot 使用了下面这种较为特别的属性加载顺序:

1、在命令行中传入的参数。

2、SPRING_APPLICATION_JSON 中的属性。SPRING_APPLICATION_JSON是以JSON格式配置在系统环境变量中的内容。

3、java:com/env 中的 JNDI 属性。

4、Java的系统属性,可以通过 System.getProperties() 获得的内容。

5、操作系统的环境变量。

6、通过 random.* 配置的随机属性。

7、位于当前应用 jar包之外,针对不同{profile}环境的配置文件内容,例如application-{profile}.properties或是YMAL定义的配置文件。

8、位于当前应用jar包之内,针对不同{profile}环境的配置文件内容,例如application-{profile}.properties或是YMAL定义的配置文件。

9、位于当前应用 jar包之外的application.properties和YMAL配置内容。

10、位于当前应用 jar包之内的application.properties和YMAL配置内容。

11、在@Configuration注解修改的类中,通过@PropertySource注解定义的属性。

12、应用默认属性,使用SpringApplication.setDefaultProperties定义的内容。

优先级按上面的顺序由高到低,数字越小优先级越高。

可以看到,其中第7和第9项都是从应用jar包之外读取配置文件,所以,实现外部化配置的原理就是从此切入,为其制定外部配置文件的加载位置来取代jar包之内的配置内容。

这样,我们的工程在配置中就变得非常干净,只需要在本地放置开发需要的配置即可,而不用关系其它环境的配置,由其对应环境的负责人去维护即可。

四、自定义参数

除了可以在 Spring Boot 的配置文件中设置各个 Starter 模块中预定义的配置属性,也可以在配置文件中定义一些我们需要的自定义属性,在 application.properties中定义:

you.name=kony

you.age=18

在应用中可以通过@Value注解来加载这些自定义的参数。

@Service

public class person{

@Value("${you.name}")private String name;@Value("${you.age}")private int age;getter...setter...

}

@Value注解加载属性值支持两种表达式来进行配置:

1、一种是PlaceHolder方式,格式为${…}。

2、另一种是使用 SpEL 表达式(Spring Expression Language),格式为 #{…}。

五、参数引用

在application.properties 中的各个参数之间可以直接通过使用 PlaceHolder 的方式来进行引用。

you.name=kony

you.age=18

person.desc=my name is ${you.name} and age ${you.age}

六、使用随机数

在一些特殊情况下,希望有些参数每次被加载的时候不是一个固定的值,比如密码、服务端口等。在Spring Boot的属性文件中,可以通过使用¥{random}配置来阐释随机的int、long、string值。而不需要在程序中通过编码来实现这些逻辑。

配置方式有以下几种:

#随机字符串

you.name=${random.value}

#随机 int

you.age=${random.int}

#随机long

you.long=${random.long}

#10以内的随机数

you.random.scope1=${random.int(10)}

#10-20的随机数

you.random.scope2=${random.int(10,20)}

该配置可以设置应用端口场景,避免端口冲突。

七、命令行参数

如何启动Spring Boot 应用?

使用命令:java -jar,该命令除了启动应用之外,还可以在命令行中指定应用的参数,比如 java -jar xxx.jar --server.port=8080,直接以命令行的方式来设置server.port属性。

连续两个减号–就是对application.properties 中的属性值进行赋值的标识,相当于在文件中添加属性server.port=8080。

you.age=${random.int}

#随机long

you.long=${random.long}

#10以内的随机数

you.random.scope1=${random.int(10)}

#10-20的随机数

you.random.scope2=${random.int(10,20)}

该配置可以设置应用端口场景,避免端口冲突。

七、命令行参数

如何启动Spring Boot 应用?

使用命令:java -jar,该命令除了启动应用之外,还可以在命令行中指定应用的参数,比如 java -jar xxx.jar --server.port=8080,直接以命令行的方式来设置server.port属性。

连续两个减号–就是对application.properties 中的属性值进行赋值的标识,相当于在文件中添加属性server.port=8080。

通过命令行来修改属性值是 Spring Boot 非常重要的一个特性。

第01章 Spring-Boot 应用文件application配置相关推荐

  1. 《深入理解 Spring Cloud 与微服务构建》第十六章 Spring Boot Security 详解

    <深入理解 Spring Cloud 与微服务构建>第十六章 Spring Boot Security 详解 文章目录 <深入理解 Spring Cloud 与微服务构建>第十 ...

  2. 第五章 Spring Boot的数据库编程

    若有错,请指出 第二章 搭建Springboot环境,配置视图解析器jsp页面 第三章 全注解下的Spring Ioc 第四章 约定编程-Spring AOP 第五章 Spring Boot的数据库编 ...

  3. Spring Boot 2.0 配置图文教程第 2 章 Spring Boot 配置## 书信息 demo.book.name=[Spring Boot 2.x Core Action] demo.b

    本章内容 1.自定义属性快速入门 2.外化配置 3.自动配置 4.自定义创建 Starter 组件 摘录:读书是读完这些文字还要好好用心去想想,写书也一样,做任何事也一样 第 2 章 Spring B ...

  4. SpringBoot学习笔记-2:第二章 Spring Boot 配置

    第二章 Spring Boot 配置 1.YAML 配置 SpringBoot 全局配置文件 application.properties application.yml YAML 以数据为中心,比 ...

  5. 《Spring Boot极简教程》第8章 Spring Boot集成Groovy,Grails开发

    第8章 Spring Boot集成Groovy,Grails开发 本章介绍Spring Boot集成Groovy,Grails开发.我们将开发一个极简版的pms(项目管理系统). Groovy和Gra ...

  6. 是时候搞清楚 Spring Boot 的配置文件 application.properties 了!

    在 Spring Boot 中,配置文件有两种不同的格式,一个是 properties ,另一个是 yaml . 虽然 properties 文件比较常见,但是相对于 properties 而言,ya ...

  7. 19年8月 字母哥 第一章 spring boot 2.x基础及概念入门 这里全部看完了 热部署没出来 第二章在前面2页 用热点公司网不行

    http://springboot.zimug.com/1233100   文档 http://www.zimug.com/page/5     字母哥个人博客 11111 第一章 spring bo ...

  8. Spring boot yml文件的书写格式

    Spring boot yml文件的书写格式 使用ide 创建好spring boot文件格式后https://blog.csdn.net/weixin_42292697/article/detail ...

  9. springboot系列课程笔记-第一章-Spring Boot入门

    一.Spring Boot 入门 1.Spring Boot 简介 简化Spring应用开发的一个框架: 整个Spring技术栈的一个大整合: J2EE开发的一站式解决方案: 2.微服务 2014,m ...

最新文章

  1. linux查看指定程序的资源占用
  2. spring mvc项目中利用freemarker生成自定义标签
  3. linux c 实现函数 trim 除去字符串首尾空格
  4. 关于运行中输入ping后,跳出“打开方式”选择对话框的问题
  5. 基于visual Studio2013解决C语言竞赛题之1081shell排序
  6. 随堂小测app冲刺(三)
  7. 基于python和opencv的人脸识别
  8. 差分隐私 机器学习_微软发布多个建置可信AI的问责机器学习工具
  9. Android ListView更改item背景颜色
  10. Affinity Publisher for Mac排版设计工具
  11. Undefined index: submit in的错误处理
  12. PS给证件照换背景颜色
  13. 触摸屏一体机的类型有哪些
  14. Index Notation
  15. 使用sql服务器发送贺卡_发送免费电子贺卡的最佳网站
  16. javashop源码,javashop电商系统源码授权
  17. 2020张宇1000题【好题收集】【第四章:多元函数微分学】【第五章:二重积分】
  18. 04 : mysql 基础命令操作,字符集
  19. 小程序云开发(九):WeUI
  20. Wind安装程序出现x80070652错误问题

热门文章

  1. background-attachment: fixed/scroll
  2. 解决重邮无法访问蓝鸽听力以及无法访问部分内网的解决方法
  3. MUI设置卡头卡位的形式进行切换
  4. UE4 EventTick
  5. 【干货】-- 带你抓取并分析知乎高评分电影
  6. LS1028修改调试串口
  7. window Azure 部署java 应用
  8. pat乙级题目—1001 害死人不偿命的(3n+1)猜想
  9. 混合云——企业的最佳解决方案?
  10. 我的世界java版如何看坐标_坐标 - Minecraft Wiki,最详细的官方我的世界百科