【基础篇】三、SpringBoot基础配置

文章目录

  • 0、模块的复制
  • 1、配置文件格式
  • 2、yaml语法
  • 3、读取yaml数据的三种方式
  • 4、关于封装自定义对象来读取yaml配置的思考

【基础篇】三、SpringBoot基础配置_第1张图片

0、模块的复制

平时要大量创建模块时,可以直接复制模块,打开project的目录:

【基础篇】三、SpringBoot基础配置_第2张图片

复制粘贴:

【基础篇】三、SpringBoot基础配置_第3张图片
进入副本,修改pom文件中的Maven坐标,注意,GAV坐标必须改,name和description随便,也可以删掉,name的值就是IDEA中maven栏的模块名,当这个值为空时,则取artifactId的值

【基础篇】三、SpringBoot基础配置_第4张图片

删掉多余的文件,留一个src和pom文件就行,iml文件一会儿用IDEA打开模块会重新生成。

【基础篇】三、SpringBoot基础配置_第5张图片

使用IDEA打开:

【基础篇】三、SpringBoot基础配置_第6张图片
【基础篇】三、SpringBoot基础配置_第7张图片

成功:

【基础篇】三、SpringBoot基础配置_第8张图片

1、配置文件格式

SpringBoot默认配置文件application.properties,通过键值对配置对应属性

# 修改服务器端口
server.port=80

# 关闭运行日志图标(banner),即Spring的那个轮廓图不要了
spring.main.banner-mode=off

# 放一张自己的图做为服务启动的banner,图片放resources目录下
spring.banner.image.location=mylogo.png

#设置日志相关,默认info,debug级别太细
logging.level.root=debug

# 某个包下使用error级别的日志
logging.level.com.llg=error

SpringBoot中导入对应starter后,提供对应配置属性,书写时也出现相应的提示。更多属性及含义,可以去官网文档:https://docs.spring.io/spring-boot/docs/…

【基础篇】三、SpringBoot基础配置_第9张图片

SpringBoot属性配置文件,可用properties、yml、yaml格式,常用yml文件:

【基础篇】三、SpringBoot基础配置_第10张图片
当三个配置文件都存在的时候,优先级:

  • application.properties > application.yml > application.yaml
  • 不同配置文件中相同配置按照加载优先级相互覆盖
  • 不同配置文件中不同配置全部保留
关于写配置文件中的属性时,没有提示的解决方案:

打开项目结构,这次不看Moudles,选择Facets,再点击你要操作的模块名,然后点击绿叶标志的按钮

【基础篇】三、SpringBoot基础配置_第11张图片

点击+,把两个yml文件的配置文件加进来:

【基础篇】三、SpringBoot基础配置_第12张图片
【基础篇】三、SpringBoot基础配置_第13张图片

此时,项目中yml的图标已变成了Spring配置文件的图标

【基础篇】三、SpringBoot基础配置_第14张图片
可能出现的一个小Bug:

【基础篇】三、SpringBoot基础配置_第15张图片

2、yaml语法

yaml文件介绍:

yaml,一种数据层序列化格式,文件扩展名为.yml(主流)和.yaml。优点:

  • 以数据为核心,重数据、轻格式
  • 容易与脚本语言交互

【基础篇】三、SpringBoot基础配置_第16张图片

yaml文件语法:

  • 大小写敏感
  • 属性层级关系使用多行描述,每行结尾使用冒号结束
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格,不是tab,空格数量不限
  • 属性值前添加空格
  • #表示注释
  • 数组数据在数据书写位置的下方使用减号做为数据开始的符号,每行写一个数据,减号与数据间加空格

【基础篇】三、SpringBoot基础配置_第17张图片
关于字面值的表示方法:

【基础篇】三、SpringBoot基础配置_第18张图片

3、读取yaml数据的三种方式

方式一: 使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名}

【基础篇】三、SpringBoot基础配置_第19张图片

//演示下取对象数组中某个对象的属性
@Value("${users[0].age}")
private String age;

另外,在yaml配置文件内部,也可以使用dollar大括号来优化,做到一改全改:

【基础篇】三、SpringBoot基础配置_第20张图片
改为:
【基础篇】三、SpringBoot基础配置_第21张图片
且可以使用:来配个默认值。

addr: ${nacos-addr:nacos-headless}

当属性中出现转义字符,想让这个字符生效,必须加双引号,不加则按普通字符处理。

lesson: "Spring\tboot\nlesson"

方式二: 封装全部数据到Environment对象,再使用getProperty(“属性名”)

上面的方式中,想取个值,还得定义个变量去装,如此,如果一次性取多个值,岂不是乱了?==> Environment对象,通过自动装配,将所有数据封装到Environment对象中,取数据直接调用getProperty()方法,如此就节约了变量的定义。

【基础篇】三、SpringBoot基础配置_第22张图片

方式三: 自定义对象封装指定数据,注解+prefix属性来说明要封装哪一块数据

上面的方式用一个对象封装所有配置数据,能不能有针对性的封装呢?比如:

datasource:
  driver: com.mysql.jdbc.Driver
  url: jdbc:mysql://localhost:3306/test_db
  username: root
  password: root123

思路大概是:

  • 创建类,用来封装某一部分配置中的数据
  • 由Spring去帮饿哦们加载数据到对象中,一定要告诉Spring加载哪组数据
  • 使用的时候直接从Spring中获取信息使用
//注意属性名要和配置文件中的字段保持一致
@Setter
@Getter
public class MyDataSource{

	private String driver;
	private String url;
	private String username;
	private String password;
}

思考?Spring拿到配置文件的值了,怎么给你的这个类的对象赋值? ⇒ 这个对象得受Spring控制 ⇒ 做为Bean => 加@Component

再思考?配置信息那么多字段,Spring怎么知道你要谁 ⇒ 指定要加载的数据 ⇒ @ConfigurationProperties

//如此,配置文件中的信息就会加载到我这个自定义的对象中
@Setter
@Getter
@Component
@ConfigurationProperties(prefix = "datasource")
public class MyDataSource{

	private String driver;
	private String url;
	private String username;
	private String password;
}

注入下MyDataSource这个Bean,看下属性是否都拿到了

@Autowired
private MyDataSource datasource;

【基础篇】三、SpringBoot基础配置_第23张图片
【基础篇】三、SpringBoot基础配置_第24张图片

4、关于封装自定义对象来读取yaml配置的思考

server:
  servlet:
    context-path: /test123

查看启动日志,发现tomcat的context path变了:

【基础篇】三、SpringBoot基础配置_第25张图片

这个数据怎么进去的?就是用封装对象的方式+@ConfigurationProperties注解去拿的。(当然改完context-path后,调接口的api路径也就得变了,/访问不通了)

后期引入一种技术后,在配置文件中写配置就能生效,其实就是用读取yaml的第三种方式,将对应的配置加载到一个个自定义的对象中,提供给技术框架来使用。

你可能感兴趣的:(SpringBoot,spring,boot,java,后端)