• Spring Boot配置文件


    目录

    1.配置文件的作用

    2.配置文件的格式

    3.properties 配置文件说明

                3.1properties 基本语法

                3.2读取配置文件

                3.3properties 的缺点

    4.yml配置文件的说明

                4.1yml基本语法

                4.2读取配置文件

                4.3yml配置对象

                4.4yml配置集合


    1.配置文件的作用

    (1)配置包括哪些文件呢?

    整个项目中所有重要的数据都是在配置文件中配置的,比如:
    ①数据库的连接信息(包括用户名和密码)
    ②项目的启动端口
    ③第三方系统的调用秘钥等信息
    ④用于发现和定位问题的普通日志和异常日志

    (2)要是没有配置文件的话会出现什么问题?

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

    (3)配置文件的分类:

    ①系统的配置文件:

    比如连接字符串,比如日志的相关设置,系统定义好的。

    ②用户自定义的

    2.配置文件的格式

    ①配置文件主要有两种格式:

    properties

    yml

    注意:要是没有properties的话,就先在IDEA中下载安装一个Spring Tools,要是没有下面这个yml的话,可以参考这篇文章,就可以得以创建:

    (11条消息) idea中如何创建yml文件_丶牧魂人的博客-CSDN博客_idea创建yml文件

    ②规则:

    a.一个项目中可以同时存在这两种配置文件,但是我们不建议一个项目中出现两种配置文件。
    b.当一个项目的某个配置,出现在两种格式的配置文件中时,那么配置项会以properies为主,而忽略yml中的配置

    对上述结论进行演示,我们在application.properties里面将端口号设为9090,而在application.yml中将端口号设为8080,然后我们会发现这个时候,打印的是9090

    3.properties 配置文件说明

    properties配置文件是最早期的配置文件格式,也是创建spring boot项目默认的配置文件

                3.1properties 基本语法

    ①格式:

    properties是以键值的形式配置的,key和value之间是以“=”进行连接的

    ②示例:

    ③注意:关于properies中文乱码问题的处理

    a.打开setting设置,找到encoding

     b.将下图标识地方全部修改为utf-8,并点击确认

     c.配置新项目中的乱码问题:(找到对应位置后,重复上述a,b步骤)

    d.将原来的application.properies删除掉,重新创建一个application.properi。因为之前的配置文件已经创建好了,我们才设置的文件格式,如果不删除重建的话,在这个application.properies中的话,仍然不会支持中文编码的。

    这样的话我们的中文设置配置好了。 

                3.2读取配置文件

    ①格式:

    @Value注解以及${}的格式就可以进行读取了

    ②注意:

    一个@Value只能读取一个配置文件,要是想要读取多个的话,就需要建立多个@Value

    ③示例:

    a.application.properties:

    1. # 这是端口号
    2. server.port=9090

    b.test:

    1. package com.example.demo.next;
    2. import org.springframework.beans.factory.annotation.Value;
    3. import org.springframework.stereotype.Controller;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.ResponseBody;
    6. @Controller
    7. public class test {
    8. @Value("${server.port}")
    9. private String port;
    10. @ResponseBody//返回一个非静态页面的数据
    11. @RequestMapping("/Sayhi")//设置路由地址
    12. public String sayHi(){
    13. System.out.println("Hello" + port);//在控制台打印
    14. return "Hello,World + port:" + port;//在网页上打印
    15. }
    16. }

    结果显示:

                3.3properties 的缺点

    因为properties的格式是key=value这种形式,因此很容易出现如下图所示的冗余的现象。

    4.yml配置文件的说明

    ①什么是yml?

    yml 是 YMAL 是缩写,它的全称 Yet Another Markup Language 翻译成中文就是“另一种标记语言”
    ②yml语言的特点:
    可读性高,易于理解
    支持更多的数据类型
    跨语言使用,如golang,java,高版本python等。

                4.1yml基本语法

    ①格式:

    key:(空格)value

    注意此处的空格一定不能省略,否则程序会报错

    ②示例:

     

                4.2读取配置文件

    yml读取配置文件和properties是一致的,都是通过@Value(${})来进行读取,演示如下:

    ①yml:

    1. #端口号
    2. server:
    3. port: 8080
    4. Stirng: java

    ②test:

    1. package com.example.demo.next;
    2. import org.springframework.beans.factory.annotation.Value;
    3. import org.springframework.stereotype.Controller;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.ResponseBody;
    6. @Controller
    7. public class test {
    8. @Value("${server.port}")
    9. private String port;
    10. @ResponseBody//返回一个非静态页面的数据
    11. @RequestMapping("/Sayhi")//设置路由地址
    12. public String sayHi(){
    13. System.out.println("Hello" + port);//在控制台打印
    14. return "Hello,World + port:" + port;//在网页上打印
    15. }
    16. }

                4.3yml配置对象

    ①我们在yml中进配置:(此处有两种不同的写法)

    1. #第一种写法
    2. student1:
    3. id: 1
    4. name: 张三
    5. age : 18
    6. #第二种写法
    7. student2: {id: 2,name: 李四,age: 20}

    ②创建一个student类,并且加上相关属性

    (注意:这个时候就不能用@Value 来读取配置中的对象了,此时要使用另⼀个注解@ConfigurationProperties来读取:)

    1. package com.example.demo.next;
    2. import lombok.Data;
    3. import org.springframework.boot.context.properties.ConfigurationProperties;
    4. import org.springframework.stereotype.Controller;
    5. @Controller
    6. @Data//这个注解为我们封装提供了getter,setter,toString等方法,我们就不用再写
    7. @ConfigurationProperties("student2")
    8. public class Student {
    9. private String name;
    10. private int id;
    11. private int age;
    12. }

    ③我们进行测试上述内容:(这里用UserController来进行测试)

    1. package com.example.demo.next;
    2. import org.springframework.beans.factory.annotation.Autowired;
    3. import org.springframework.stereotype.Controller;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.ResponseBody;
    6. @Controller
    7. public class UserController {
    8. @Autowired
    9. private Student student;
    10. @ResponseBody//返回一个非静态页面的数据
    11. @RequestMapping("/sayhi")//路由地址
    12. public String sayHi() {
    13. System.out.println(student);
    14. return "student:" + student;
    15. }
    16. }

    输出结果:

                4.4yml配置集合

    配置文件也可以配置 list 集合,如下所示:

    ①yml相关代码:

    1. #集合
    2. dbtypes: {name: [mysql,sqlserver,db2]}

    ②list相关的代码:

    1. package com.example.demo.next;
    2. import lombok.Data;
    3. import org.springframework.boot.context.properties.ConfigurationProperties;
    4. import org.springframework.stereotype.Controller;
    5. import java.util.List;
    6. @Data
    7. @Controller
    8. @ConfigurationProperties("dbtypes")
    9. public class ListTest {
    10. private List name;
    11. }

    ③创建一个UserController2来进行测试:

    1. package com.example.demo.next;
    2. import org.springframework.beans.factory.annotation.Autowired;
    3. import org.springframework.stereotype.Controller;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.ResponseBody;
    6. import java.util.List;
    7. @Controller
    8. public class UserController2 {
    9. @Autowired
    10. private ListTest list;
    11. @ResponseBody//返回一个非静态页面的数据
    12. @RequestMapping("/list")//设置路由地址(一定要全部小写)
    13. public String sayHi(){
    14. return "list: "+ list;
    15. }
    16. }

    另外,这里补充一个yml加“”与‘’的区别的例子:

    ①我们在yml中配置如下相关内容:

    1. mystring: hello\n世界
    2. mystring2: 'hello\n世界'
    3. mystring3: "hello\n世界"

    ②我们来建一个UserController3来实现这个测试:

    1. package com.example.demo.next;
    2. import org.springframework.beans.factory.annotation.Value;
    3. import org.springframework.stereotype.Controller;
    4. import org.springframework.web.bind.annotation.RequestMapping;
    5. import org.springframework.web.bind.annotation.ResponseBody;
    6. @Controller
    7. public class UserCntroller3 {
    8. @Value("${mystring1}")
    9. private String mystring1;
    10. @Value("${mystring2}")
    11. private String mystring2;
    12. @Value("${mystring3}")
    13. private String mystring3;
    14. @ResponseBody
    15. @RequestMapping("/test2")//设置路由地址
    16. public String sayHi(){
    17. System.out.println("mystring1:"+ mystring1);
    18. System.out.println("mystring2:"+ mystring2);
    19. System.out.println("mystring3:"+ mystring3);
    20. return null;
    21. }
    22. }

    ③输出结果如下:

    我们可以发现:当用单引号的时候,得到的内容是原来有的一模一样的内容,而用双引号得到的才是带有换行本身意义的字符。即:yml里面如果使用了双引号就会按照(原)语义执行,如果不加单、双引号,或者加了单引号,那么默认会将字符串中的特殊字符进行转义

    下期将为大家介绍spring boot 日志文件相关内容~

  • 相关阅读:
    Go :测试函数签名(附完整源码)
    读取图片输出字符图案:用字符输出足球的图案
    2023南昌航空大学考研介绍
    blender快捷键(持续更新)
    Python+Selenium- 环境搭建
    DevExpress WinForms甘特图组件 - 轻松集成项目管理功能到应用
    燃气智能巡检系统-燃气入户安检系统
    【Leetcode】剑指Offer 27:二叉树的镜像
    Eclipse MAT解析headp dump,total size小于file size
    1949-2020年全国31省铁路里程数据
  • 原文地址:https://blog.csdn.net/weixin_58850105/article/details/127430509