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

Springboot使用教程

二、配置文件

SpringBoot使用一个全局的配置文件,配置文件名是固定的;

•application.properties

•application.yml

1.配置文件的作用

修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;

YAML(YAML Ain’t Markup Language)

​ YAML A Markup Language:是一个标记语言

​ YAML isn’t Markup Language:不是一个标记语言;

2.标记语言

​ 以前的配置文件;大多都使用的是 xxxx.xml文件;

​ YAML:以数据为中心,比json、xml等更适合做配置文件;

--YAML:配置例子
server:port: 8081--xml:配置例子
<server><port>8081</port>
</server>

3.YAML基本语法 

k:(空格)v:表示一对键值对(空格必须有);属性和值也是大小写敏感;

空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

server:port: 8081path: /hello

4.YAML值的写法

字面量:普通的值(数字,字符串,布尔)

​ k: v:字面直接来写;

​ 字符串默认不用加上单引号或者双引号;

​ “”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思

​ name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi

​ ‘’:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

​ name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

对象、Map(属性和值)(键值对)

​ k: v:在下一行来写对象的属性和值的关系;注意缩进

​ 对象还是k: v的方式

数组(List、Set)

用- 值表示数组中的一个元素

5.配置文件值注入

application.yml

person:lastName: helloage: 18boss: falsebirth: 2017/12/12maps: {k1: v1,k2: 12}   --Map(属性和值)lists:              --数组- lisi- zhaoliudog:                --对象name: 小狗age: 12

或者 application.properties

person.lastName=zhangsan
person.age=17
person.boss=false
person.birth=2017/12/15
person.maps.k1=v1   maps: {k1: v1,k2: v2}
person.maps.k2=v2
person.list=lisi,zhaoliu
person.dog.name=张三
person.dog.age=12

javaBean

/*** 将配置文件中配置的每一个属性的值,映射到这个组件中* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;*      prefix = "person":配置文件中哪个下面的所有属性进行一一映射** 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;**/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {private String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> lists;private Dog dog;

我们在pom.xml导入配置文件处理器,以后编写配置就有提示了

<!--导入配置文件处理器,配置文件进行绑定就会有提示--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>

6.properties配置文件编码问题

properties配置文件在idea中默认utf-8可能会乱码,需要做以下调整 

6.@Value获取值和@ConfigurationProperties获取值比较

@ConfigurationProperties

@Value
功能批量注入配置文件中的属性一个个指定
松散绑定(松散语法)支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂类型封装支持支持

配置文件yml还是properties他们都能获取到值;

如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;

如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {/*** <bean class="Person">*      <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>* <bean/>*///lastName必须是邮箱格式@Email//@Value("${person.last-name}")private String lastName;//@Value("#{11*2}")private Integer age;//@Value("true")private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> lists;private Dog dog;

7.@PropertySource&@ImportResource&@Bean

@PropertySource:加载指定的配置文件;

/*** 将配置文件中配置的每一个属性的值,映射到这个组件中* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;*      prefix = "person":配置文件中哪个下面的所有属性进行一一映射** 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;*  @ConfigurationProperties(prefix = "person")默认从全局配置文件中获取值;**/
@PropertySource(value = {"classpath:person.properties"})
@Component
@ConfigurationProperties(prefix = "person")
//@Validated
public class Person {/*** <bean class="Person">*      <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>* <bean/>*///lastName必须是邮箱格式// @Email//@Value("${person.last-name}")private String lastName;//@Value("#{11*2}")private Integer age;//@Value("true")private Boolean boss;

运行创建了一个对象,要使用时 Person person(@Autowired)

@ImportResource

导入Spring的配置文件,让配置文件里面的内容生效;

Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;

想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • c语言:操作符
  • 【远程桌面】Microsoft Remote Desktop 4 mac
  • 景芯2.5GHz A72训练营dummy添加(一)
  • 4.8作业
  • 蓝桥杯 历届真题 双向排序【第十二届】【省赛】【C组】
  • 创建线程的方式
  • VGA显示器字符显示
  • GitHub教程:最新如何从GitHub上下载文件(下载单个文件或者下载整个项目文件)之详细步骤讲解(图文教程)
  • stable-diffusion-webui怎么样增加自己训练的LoRA模型?
  • HTTP/1.0、HTTP/1.1、HTTP/2.0、HTTP3.0的区别
  • 前端开发之el-table(vue2中)固定列fixed滚动条被固定列盖住
  • UniApp 应用发布到苹果商店指南
  • 使用卷积神经网络(CNN)识别验证码
  • 【网站项目】在线办公小程序
  • VSCode配置AI自动补全插件Tabnine
  • ECS应用管理最佳实践
  • gf框架之分页模块(五) - 自定义分页
  • gops —— Go 程序诊断分析工具
  • Java教程_软件开发基础
  • JS字符串转数字方法总结
  • maya建模与骨骼动画快速实现人工鱼
  • nodejs实现webservice问题总结
  • python学习笔记-类对象的信息
  • 初探 Vue 生命周期和钩子函数
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 后端_ThinkPHP5
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 聊聊directory traversal attack
  • 如何使用 JavaScript 解析 URL
  • 三分钟教你同步 Visual Studio Code 设置
  • 山寨一个 Promise
  • 实现菜单下拉伸展折叠效果demo
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 我有几个粽子,和一个故事
  • 学习使用ExpressJS 4.0中的新Router
  • 在electron中实现跨域请求,无需更改服务器端设置
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #window11设置系统变量#
  • ()、[]、{}、(())、[[]]命令替换
  • (¥1011)-(一千零一拾一元整)输出
  • (6)添加vue-cookie
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (阿里云万网)-域名注册购买实名流程
  • (第27天)Oracle 数据泵转换分区表
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (篇九)MySQL常用内置函数
  • ***利用Ms05002溢出找“肉鸡
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .skip() 和 .only() 的使用