当前位置: 首页 > news >正文

【SpringBoot入门】SpringBoot的配置

SpringBoot的配置文件

  • 一、SpringBoot配置文件分类
  • 二、yaml 概述
  • 三、多环境配置
  • 四、@Value 和 @ConfigurationProperties
  • 五、总结

一、SpringBoot配置文件分类

SpringBoot 是基于约定的,很多配置都是默认的(主方法上@SpringBootApplication注解的子注解@EnableAutoConfiguration实现的,是在META-INF/spring.factories中的自动配置了,可以看狂神的运行原理的解释,它是boot2解析,boot3里面实现用的更多的是流(Stream),其他没怎么变)。

但是如果想使用自己的配置替换默认配置或添加其他配置的话,可以使用application.properties或者application.yml(application.yaml)进行配置。

  1. 遵循框架的规则,默认配置文件名称:application
  2. 在同一级目录下的优先级:properties>yml>yaml,这个如果没看源码也可以通过测试得出。

二、yaml 概述

首先需要明白的yaml是一种语言,是 “YAML Ain’t a Markup Language” (YAML不是一种标记语言)的递归缩写。百度上解释是它是以数据作为中心,而不是以标记语言为重点!.yml 是用YAML语言编写的配置文件,YAML的诞生是参考JSON,XML和SDL等语言。
居然是语言,就有它的语法、格式。

下面给出是.yml配置文件的案例:

house:
  family:
    name: Doe
    parents:
      - John
      - Jane
    children:
      - Paul
      - Mark
      - Simone
  address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 12345
  • YAML语法特点
    • #可以用来注释
    • 每个散列表的成员用冒号+空白": "分开键值和内容。(空格必须存在)
    • 使用缩进表示层级关系,但是不能使用TAB键,只允许空格
    • 结构可以通过缩进来表示,连续的成员通过减号"-“来表示,或者使用”{}"

注意:

  • “ ” 双引号,不会转义字符串里面的特殊字符 , 特殊字符会作为本身想表示的意思; 比如 :name: “kuang \n shen” 输出 :kuang 换行 shen

  • ‘’ 单引号,会转义特殊字符 , 特殊字符最终会变成和普通字符一样输出 比如 :name: ‘kuang \n shen’ 输出 :kuang \n shen
    (引用狂神说的注意)

下面写一个 application.yml 配置文件,进行测试

server:
  port: 9000 #修改端口号
  servlet:
    context-path: /xxx #修改上下文路径

在这里插入图片描述需要注意的是,它还可以进行参数引用,使用${??},例如:

port: 9001
server:
  port: ${port}
  servlet:
    context-path: /xxx

在这里插入图片描述.properties小编觉得应该都会用,就不多写了,yml是被推荐的配置方式,更直观吧。

三、多环境配置

在项目进行过程中,除了有开发环境,还有测试环境,上线环境等。每个环境有不同的配置信息,例如端口,上下文件,数据库的url,用户名、密码等等。

使用多环境配置文件,可以方便的切换不同的配置。

使用方式:创建多个配置文件,名称规则:application-环境名称.properties(yml)

例如:
创建开发环境的配置文件:application-dev.properties(application-dev.yml)
创建测试使用的配置文件:application-test.properties(application-test.yml)

配置下面的语句就可以实现环境切换:

.yml:

spring:
  profiles:
    active: 环境名称

.properties

spring.profiles.active=环境名称

测试:

准备好了三个配置文件
在这里插入图片描述application.yml的内容

spring:
  profiles:
    active: dev
server:
  port: 8080

application-dev.yml的内容

server:
  port: 9001
  servlet:
    context-path: /yyy

测试结果
在这里插入图片描述
可以观察出:环境进行了切换后,application.yml中的后面内容不起效.

四、@Value 和 @ConfigurationProperties

下面是application.yml配置。

server:
  port: 8082
  servlet:
    context-path: /demo

# 配置key=value
school:
  name:
   - 合肥师范
   - 武汉大学
  address: 合肥
  • @Value测试
    在这里插入图片描述* @ConfigurationProperties测试

在这里插入图片描述
如果直接这样,那么配置文件中的name注入不进去(会为null),因为配置文件中的是多成员。

如果是这样那么就可以注入成功。数组也是可以的。
在这里插入图片描述在这里插入图片描述

注意:@ConfigurationProperties 注解的使用,一定要记得要对 prefix属性进行赋值(默认是空字符串) ,它会在配置文件中查询 prefix 这个元素,然后进行“映射”。

下面可以看看狂神说这个图,对@Value和@ConfigurationProperties进行个对比

在这里插入图片描述

五、总结

小编写的这篇博客没有对properties配置进行说明,其实用法是一样的。而且SpringBoot官方推荐我们使用yaml进行配置,所以这里讲解和例子都是用的yml配置。

如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;

如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@ConfigurationProperties,不要犹豫!因为它不单单可以做到简单类型的映射。

推荐文献:
狂神说SpringBoot03:yaml配置注入

相关文章:

  • EXCEL中单元格相对/绝对/混合引用的区别
  • 一线大厂软件测试常见面试题1500问,背完直接拿捏面试官,
  • Redis缓存穿透、击穿、雪崩问题及解决方法
  • 【数据结构与算法】什么是链表?并用代码手动实现一个单向链表
  • 【Mysql系列】——详细剖析数据库“索引”【上篇】
  • 贯穿设计模式第一话--单一职责原则
  • tf模型在C++部署
  • 【产品经理】常用需求优先级评估模型
  • CCM调试的理论依据
  • libvirt零知识学习4 —— libvirt源码编译安装(2)
  • leetcode每日一题:1005. K 次取反后最大化的数组和
  • this\super\statis\abstract关键字作用
  • Spring Boot 3.0系列【22】应用篇之嵌入式 Servlet 容器
  • 位置编码Positional Encoding
  • 【XXL-JOB】XXL-JOB定时处理视频转码
  • 【Leetcode】104. 二叉树的最大深度
  • 3.7、@ResponseBody 和 @RestController
  • docker容器内的网络抓包
  • Koa2 之文件上传下载
  • PV统计优化设计
  • Rancher-k8s加速安装文档
  • React-flux杂记
  • 半理解系列--Promise的进化史
  • 反思总结然后整装待发
  • 分布式事物理论与实践
  • 关于for循环的简单归纳
  • 解析 Webpack中import、require、按需加载的执行过程
  • 前端知识点整理(待续)
  • 区块链将重新定义世界
  • 使用docker-compose进行多节点部署
  • 如何正确理解,内页权重高于首页?
  • ​Java并发新构件之Exchanger
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (二)linux使用docker容器运行mysql
  • (二)斐波那契Fabonacci函数
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (六)Hibernate的二级缓存
  • (论文阅读11/100)Fast R-CNN
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)Google的Objective-C编码规范
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .net和php怎么连接,php和apache之间如何连接
  • .net生成的类,跨工程调用显示注释
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @JsonSerialize注解的使用
  • @拔赤:Web前端开发十日谈
  • [ 数据结构 - C++] AVL树原理及实现
  • []FET-430SIM508 研究日志 11.3.31
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]