• Spring Boot 配置文件


    配置文件作用

    配置文件是保存整个项目中所有重要的数据的,比如:

    1. 数据库的连接信息
    2. 项目的启动端口
    3. 第三方系统的调用密钥等
    4. 用于发现和定位问题的普通日志和异常日志等

    如果没有配置文件,那么 Spring Boot 项目就不能连接和操作数据库,甚至是不能保存可以用于排查问题的关键日志。

    1. 配置文件的信息,一般都是 key-value 的形式。
    2. 配置文件可以设置为 开发环境 和 线上环境 两个部分,在开发的时候使用 开发环境,上线的时候使用 线上环境。
    3. 可以有多个配置文件,用来表示 开发,测试,线上 环境。

    配置文件的分类

    1. 系统级别的,如连接字符串,日志相关的设置,系统定义好的。
    2. 用户自定义的。

    配置文件的格式

    Spring Boot 的配置文件主要有两种格式“

    1. .properties
    2. .yml

    这两个的功能是一样的,但是,这两个是不同时代的产物,yml 是 properties 的升级版。

    配置文件一定是 application.xxx 也是约定大于配置的思想。不然就不起作用了。

    指定端口

    通过 server.port 来指定端口。.properties 如下:
    在这里插入图片描述
    运行结果如下:
    在这里插入图片描述
    就只能通过 9090 端口来访问了。

    .yml 文件配置:

    在这里插入图片描述
    运行结果如下:

    在这里插入图片描述

    规则

    1. 一个项目当中可以存在两种配置文件,但是不建议一个项目中出现两种配置文件。
    2. 当一个项目的某个配置,出现在两种格式的配置文件当中,那么配置项会以 properties 为主。

    properties

    配置文件的基本语法:key=value 之间没有空格。而且一个键值对之后也不能有空格。

    server.port=9090
    
    • 1

    server.port 就是系统配置,配置数据库连接:
    在这里插入图片描述

    缺点

    properties 中有很多冗余的信息,如:
    在这里插入图片描述
    所以改变的时候,就可以通过 yml 来完成改进。

    yml

    yml 是一个可读性高,语法简洁,易于理解的配置文件。并且可以简单表达一些元素的形态,基础语法是:key: value 空格不能省略,如果是多层目录的话,就一层层往下:
    在这里插入图片描述
    yml 支持更多的类型,如对象,数组等类型。yml 最大的优势是跨语言。

    连接数据库

    如图:
    在这里插入图片描述
    相比较 properties,yml 的数据冗余度就很低了。

    单双引号

    单双引号对 yml 中文件的内容引用之后,会有不同的效果:

    spring:
      datasource:
        url: jdbc:mysql://127.0.0.1:3306/user?characterEncoding=utf8&useSSL=false
        name: root
        password: sjp151
    
    mystring: hello\nworld
    mystring2: 'hello\nworld'
    mystring3: "hello\nworld"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    运行结果如下:
    在这里插入图片描述
    只有最后一个换行了,不加 引号 和 单引号的都没换行,加了双引号的换行了。

    1. 不加引号 和 加 单引号相当于是加了 转义字符。
    2. 给 双引号 也加上转义字符 mystring3: "hello\\nworld" 运行结果如下:
      在这里插入图片描述
      就可以输出原字符串了。

    配置对象和取对象

    在 yml 中配置一个对象:

    student:
      id: 1
      name: zhangsan
      age: 18
    
    • 1
    • 2
    • 3
    • 4

    也可以使用行内写法:

    student: {id: 1,name: zhangsan,age: 18}
    
    • 1

    取对象,取对象的时候就不能用 @Value 来取了。要在对象里面添加一个注解 @ConfigurationProperties(prefix = “student”)

    创建对象并加注解:

    @Data
    @Component
    @ConfigurationProperties(prefix = "student")
    public class student {
        private int id;
        private String name;
        private int age;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    @Data 注解就包括了,Getter,Setter 等方法。

    通过 @Autowird 来注入类,然后来使用:

    @Controller
    public class UserController {
        @Autowired
        private Student student;
    
        @ResponseBody
        @RequestMapping("/sayhi")
        public String sayHi() {
            return "student: " + student;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    运行结果如下:
    在这里插入图片描述

    配置集合和获取

    类似于对象的写法:

    listname: #配置文件的名称
      name: #集合的名称
        - mysql #集合的值
        - sqlserver
        - oracle
    
    • 1
    • 2
    • 3
    • 4
    • 5

    当然也能写成行内式:

    listname: {name: [mysql,sqlserver,oracle]}
    
    • 1

    集合读取的时候和对象读取差不多,也是通过 @ConfigurationProperties 来读取的:

    @Data
    @Component
    @ConfigurationProperties("listname")
    public class ListName {
        private List<String> name;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行代码:

    @Controller
    public class UserController {
    
        @Autowired
        private ListName listName;
    
        @ResponseBody
        @RequestMapping("/sayhi")
        public String sayHi() {
            return "listname: " + listName.getName();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    运行结果如下:
    在这里插入图片描述

    读取配置文件

    使用 @Value 注解就可以读取配置文件的某一个项了,但是读取的时候一定要加 $ 符号 和 大括号:

    @Controller
    public class UserController {
        
        @Value("${server.port}")
        private String port;
        @ResponseBody
        @RequestMapping("/sayhi")
        public String sayHi() {
            return "Hello World  port: " + port;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    运行结果如下:
    在这里插入图片描述
    也可以一次读取多个,那么就需要多个 @Value,我们在 yml 当中也写入参数:
    在这里插入图片描述
    然后引入:

    @Controller
    public class UserController {
    
        @Value("${server.port}")
        private String port;
        @Value("${myyml.string}")
        private String myyml;
        @ResponseBody
        @RequestMapping("/sayhi")
        public String sayHi() {
            return "Hello World  port: " + port + " myyml: " + myyml;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    运行结果如下:
    在这里插入图片描述

  • 相关阅读:
    Verilog实战学习到RiscV - 3 : ICEStick 评估板点灯
    更换Mac硬盘后如何将数据恢复到新驱动器?
    涂鸦Wi-Fi&BLE SoC开发幻彩灯带(5)----烧录授权
    七天学会C语言-第六天(指针)
    数据仓库性能测试方法论与工具集
    React Native for Arcgis 地图开发 GraphicLayer (十二)
    前缀和专题训练
    C语言两个有序数组归并
    (原创)多线程并发:AQS源码分析(1)——独占锁的实现原理
    消费升级下摩托车TBOX市场未来十年CAN数据应用发展趋势展望
  • 原文地址:https://blog.csdn.net/sjp151/article/details/126827991