• Spring Boot 配置文件


    1.配置文件作用

    整个项目中所有重要的数据都是在配置文件中配置的:

    • 数据库的连接信息 (包含用户名和密码的设置)
    • 设置项目的启动端口
    • 第三方系统的调用秘钥等信息
    • 用于发现问题和定位问题的普通日志和异常日志

    由此可以发现 , 如果没有配置文件 , Spring Boot 项目就不能连接和操作数据库 , 甚至不能保存用于查询问题的关键日志.

    2.配置文件的格式

    Spring Boot 配置文件的主要分为以下两种格式:

    • properties

    • .yml

    .ymlproperties 是两个时代的产物 , .yml 属于新时代的产物 , 创建 Spring Boot 时的配置文件默认格式是 properties , 如果用户指定要使用 .yml 就直接发给他.

    Tips:

    1. 从功能上来讲 , 两个配置文件可以共存 , 但企业中通常会规定使用某一种格式的配置文件.(避免相同配置项被覆盖)
    2. 如果连个配置文件中有相同的配置项 , 以 properties 中的配置项优先.

    3.properties 配置文件

    properties 是旧时代的配置文件格式 , 也是 Spring Boot 默认的配置项.

    3.1 properties 基本语法

    properties 是以键值对的形式配置的 , key 和 value 之间以 = 连接. 例如:

    #配置端口号
    server.port=9090
    #配置数据库连接
    spring.datasource.url = jdbc:mysql://127.0.0.1:3306/testdb?characterEncodeing=utf8
    spring.datasource.username=root
    spring.datasource.password=******
    #用户自定义配置文件
    username="zhangsan"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    可以看到端口号已经被改了

    image-20230419194020329

    Tips: 配置文件中以 # 来添加注释信息

    3.2 读取配置文件

    在项目中可以使用 @Value 可以主动读取配置文件中的内容.

    @Value 注解使用 “${}” 的格式读取 , 代码如下:

    @Controller//当前类加载到 spring 容器中
    @ResponseBody
    public class testController {
        @Value("${username}")//Tips: 一定是 ${key}格式
        private String myconfigration;
        //注册一个路由
        @RequestMapping("/sayHi") // = @WebServlet("/url")
        public String sayHi(){
            return "Hello world!" + "->" + myconfigration;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    运行结果:

    Tips: @Value 和 @Autowried 执行方式很像 , 都是通过注入的方式.

    3.3 properties 优缺点分析

    properties 优点:

    1. 系统默认的配置文件
    2. properties 配置项的优先级比 yml 高
    3. 格式简单 , 不易出错.

    properties 缺点:

    • 写法过于冗余
    spring.datasource.url = jdbc:mysql://127.0.0.1:3306/testdb?characterEncodeing=utf8
    spring.datasource.username=root
    spring.datasource.password=******
    
    • 1
    • 2
    • 3

    properties 有重复写很多的包名 , 而 yml 相同包名只需要写一次.

    4. yml 配置文件的说明

    yml 是 YAML 是缩写 , 它的全称 Yet Another Markup Language (另一种标记语言)

    yml 优点分析:

    • 可读性好:YAML使用缩进和空格来表示层次结构,使得数据结构更加清晰明了,易于阅读和理解。
    • 可扩展性好:YAML支持自定义标签和类型,可以根据需要扩展出符合自己需求的数据类型,比如日期、时间、正则表达式等。
    • 可移植性好:YAML是一种跨平台的数据序列化格式,可以在不同的编程语言和操作系统之间进行数据交换和传输。
    • 可互操作性好:YAML与其他数据格式之间的转换非常容易,比如可以将YAML转换为JSON、XML等格式。

    综上所述,YAML的通用性更强,可以满足不同场景下的数据序列化和交换需求,因此被广泛应用于配置文件、数据传输、API文档等领域。

    4.1 yml 基本语法

    yml 是树形结构的配置文件 , 基本语法是"key: value"(注意冒号后的空格不可省略)

    #正确格式
    string: mysql
    #错误格式
    string2:jdbc
    
    • 1
    • 2
    • 3
    • 4

    可以看到 , 正确格式有高亮!

    使用 yml 连接数据库

    代码示例;

    spring:
      datasource:
        url: 127.0.0.1:3306/dbname?character-Encoding=utf8
        username: root
        password: root
    
    • 1
    • 2
    • 3
    • 4
    • 5

    使用 properties 连接数据库:

    spring.datasource.url = jdbc:mysql://127.0.0.1:3306/testdb?characterEncodeing=utf8
    spring.datasource.username=root
    spring.datasource.password=******
    
    • 1
    • 2
    • 3

    明显 yml 要简洁不少.

    4.2 yml 进阶配置

    1) 配置不同的数据类型
    # 字符串
    string.value: Hello
    # 布尔值,true或false
    boolean.value: true
    boolean.value1: false
    # 整数
    int.value: 10
    int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制
    # 浮点数
    float.value: 3.14159
    float.value1: 314159e-5 # 科学计数法
    # Null,~代表null
    null.value: ~
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    Tips: 字符串默认不加单 / 双引号 , 如果加了会有不同含义.

    string: 
    	str1: hello \n spring boot
    	str2: 'hello \n spring boot'
    	str3: "hello \n spring boot"
    
    • 1
    • 2
    • 3
    • 4
        @Value("${string.str1}")
        private String str1;
        @Value("${string.str2}")
        private String str2;
        @Value("${string.str3}")
        private String str3;
    
    //    初始化方法
        @PostConstruct
        public void doPostConstruct(){
            System.out.println(str1);
            System.out.println(str2);
            System.out.println(str3);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    运行结果如下:

    image-20230419223627360

    双引号不会转义特殊字符的含义 , 特殊字符会表达本身的意思

    2) 配置对象
    student:
    	id: 1
    	name: 张三
    	age: 18
    	#或者是行内写法
    student: {id: 1,name: 张三,age: 18}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    @Value() 只能读取配置中的属性 , 而读取对象需要使用 @ConfigurationProperties()

    具体实现如下:

    @ConfigurationProperties("student")
    @Component
    @Setter
    @Getter
    @ToString
    public class StudentComponent {
        private int id;
        private String name;
        private int age;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    Tips: Getter 和 Setter 不能省略 , 此处使用 lombok 插件用注解替代.

    调用类的实现如下:

        @Autowired
        private StudentComponent studentComponent;
        
    //    初始化方法
        @PostConstruct
        public void doPostConstruct(){
            System.out.println(studentComponent);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    执行结果如下:

    image-20230419224237539

    yml 还可以配置集合类等 , 更多配置项可以访问 Spring Boot 官网

    Spring Boot 配置项


    5. propertise VS yml

    • properties 是键值对形式的配置文件 , 而 yml 是类似于 json 格式的树形配置文件.
    • properties 为默认的配置文件 , 但其配置存在一定的数据冗余 , 使用 yml 可以很好的解决数据冗余问题.
    • yml 通用性更好 , 支持更多语言 , 如 java, Go, Python 等 , 如果使用云服务器开发 , 可以使用一份配置文件作为 java 和 go 的共同配置文件.
    • yml 支持更多的数据类型

    6.设置不同的配置环境

    6.1 创建不同环境的配置文件

    通常配置文件可以分为 公用, 开发, 测试, 生产.

    假设产品有一个需求:

    • 开发环境端口号: 6666
    • 测试环境端口号: 7777
    • 生产环境端口号: 8888

    6.2 在 yml 中设置运行环境

    spring:
    	profiles:
    		active: dev
    
    • 1
    • 2
    • 3

    将运行环境设置为开发环境

    #服务器端口号
    serve:
    	port: 9090
    #数据库 url
    spring:
    	datasource:
    		url: jdbc:mysql//127.0.0.1:3306/testdb?characterEncodeing=utf8
    #数据库用户名
    spring:
    	datasource:
    		username: root
    #数据库密码
    spring:
    	datasource:
    		password: *****
    #开启调试日志(enable debug logs)
    debug: true
    #开启跟踪日志(enable trace logs)
    trace: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    .Net学习——Linq常用拓展方法使用
    语句覆盖、条件覆盖、判定覆盖、条件-判定覆盖、路径覆盖
    Android开源库
    关于Spring的两三事:万物之始—BeanDefinition
    Swagger使用详解
    Django REST Framework API和RESTful接口规范
    SpringMVC之自定义注解
    回归预测 | MATLAB实现BO-BiLSTM贝叶斯优化双向长短期神经网络多输入单输出回归预测
    恶意代码防范技术笔记(五)
    flink1.13报错:The file STDOUT does not exist on the TaskExecutor
  • 原文地址:https://blog.csdn.net/liu_xuixui/article/details/130636771