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



    在这里插入图片描述

    0、模块的复制

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

    在这里插入图片描述

    复制粘贴:

    在这里插入图片描述
    进入副本,修改pom文件中的Maven坐标,注意,GAV坐标必须改,name和description随便,也可以删掉,name的值就是IDEA中maven栏的模块名,当这个值为空时,则取artifactId的值

    在这里插入图片描述

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

    在这里插入图片描述

    使用IDEA打开:

    在这里插入图片描述
    在这里插入图片描述

    成功:

    在这里插入图片描述

    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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

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

    在这里插入图片描述

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

    在这里插入图片描述
    当三个配置文件都存在的时候,优先级:

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

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

    在这里插入图片描述

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

    在这里插入图片描述
    在这里插入图片描述

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

    在这里插入图片描述
    可能出现的一个小Bug:

    在这里插入图片描述

    2、yaml语法

    yaml文件介绍:

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

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

    在这里插入图片描述

    yaml文件语法:

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

    在这里插入图片描述
    关于字面值的表示方法:

    在这里插入图片描述

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

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

    在这里插入图片描述

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

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

    在这里插入图片描述
    改为:
    在这里插入图片描述
    且可以使用:来配个默认值。

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

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

    lesson: "Spring\tboot\nlesson"
    
    • 1

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

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

    在这里插入图片描述

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

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

    datasource:
      driver: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/test_db
      username: root
      password: root123
    
    • 1
    • 2
    • 3
    • 4
    • 5

    思路大概是:

    • 创建类,用来封装某一部分配置中的数据
    • 由Spring去帮饿哦们加载数据到对象中,一定要告诉Spring加载哪组数据
    • 使用的时候直接从Spring中获取信息使用
    //注意属性名要和配置文件中的字段保持一致
    @Setter
    @Getter
    public class MyDataSource{
    
    	private String driver;
    	private String url;
    	private String username;
    	private String password;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    思考?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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

    @Autowired
    private MyDataSource datasource;
    
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    在这里插入图片描述

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

    server:
      servlet:
        context-path: /test123
    
    • 1
    • 2
    • 3

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

    在这里插入图片描述

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

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

  • 相关阅读:
    JuiceFS 用户必备的 6 个技巧
    QML 信号与响应方法的总结
    Linux 中的文件简单说明
    通信接口五种主要的类型是什么?RS-232、485、CAN、USB
    【C++入门】结构体
    利用jemalloc优化mysql
    5 款开源热搜项目「GitHub 热点速览」
    面试算法16:不含重复字符的最长子字符串
    [MapStruct]关于Mapping的高级选项
    Compose 自定义 - 绘制 Draw
  • 原文地址:https://blog.csdn.net/llg___/article/details/132903887