详解 Spring Boot 项目中的配置文件

这篇具有很好参考价值的文章主要介绍了详解 Spring Boot 项目中的配置文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

详解 Spring Boot 项目中的配置文件

🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!

欢迎志同道合的朋友一起加油喔🤺🤺🤺

详解 Spring Boot 项目中的配置文件


目录

1. Spring Boot 项目中配日文件的作用是什么

2. Spring Boot 配置文件的两种格式

1. properties的语法

2. yml的语法

3. properties与yml的对比

4. 设置不同环境下的配置文件

3. 更多的系统配置项



1. Spring Boot 项目中配日文件的作用是什么

配置文件中最主要的两个作用: 连接数据库和用于定位问题的关键日志.

  • 一个项目中没有数据库的话那就谈不上一个完整的项目.
  • 假设你正在使用一个在线购物网站。你在购物车里放了一些想买的东西,准备稍后结账。但如果这个网站没有数据库来保存这些信息,你可能会发现当你回来时,购物车里的物品都不见了。
  • 另一方面,如果这个网站没有配置文件,那么在出现问题时,开发人员可能会很难找出问题的原因。例如,如果支付系统突然出现故障,没有配置文件的话,可能就难以追踪到具体出了什么问题。

配置文件的作用:

  • 连接数据库的信息
  • 用于发现和定位问题的关键日志
  • 设置项目的启动端口
  • 第三方系统的调用密钥等信息 (例如老师在某平台给我们上课时, 他能在平台上拿到我们的数据, 就是通过配置文件中设置的标识来调用第三方接口获取的)

2. Spring Boot 配置文件的两种格式

Spring Boot 中有两种格式的配置文件:

  • properties  (application.properties) (Spring Boot项目创建时默认的格式)
  • yml / ymal (application.yml)

Spring Boot 中这两种格式的配置文件的命名方式必须以 application 开头,  否则配置就不会生效, 这就牵扯到了高级框架中的 "约定大于配置" , 我们要做的事情越来越少了, 但是要遵守的约定越来越多了.

【问题】为什么需要两种格式的配置文件呢 ? 仅仅是为了提供更多的选择 ?

1. yml 相比于 properties 在写法上简化了许多 (后面会演示代码)

2. 在跨平台等问题上也是有很大的优势 (后面会讲到)

【问题】两种格式的配置文件如果同时存在, 会以哪种格式为主?

1. 当一个项目中出现了两种格式的配置文件时, properties 格式的配置文件优先级高, 所以会以 properties 格式的配置文件为主. 例如 properties 配置文件中设置了端口为 8081, .yml 配置文件中也设置了端口, 为 8082, 那么最终程序启动时的端口就是 8081, 但是加载完 properties 文件之后, 也会加载 .yml 文件中的配置信息.

2.理论上是这两种格式的配置文件可以出现在一个项目中, 但是一般都会统一配置文件,如果两种格式都写了, 可能会有增加排查问题的风险; 就好比衣服种类有很多, 但是一个餐厅里的服务员一般都会统一服装, 否则会显得杂乱无章, 不正式

1. properties的语法

properties以键值的形式配置,键和值中间用 = 连接起来(key=value),配置文件中的 # 代表注释信息

# 配置系统端口
server.port=8082
# 配置数据库源
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/blog?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456

这些配置都属于系统配置项(给Spring框架用),用户还可以自定义配置项(可在程序中用)

用户自定义配置

# 自定义配置
name=张三
age=20

在程序中如何读取自定义的配置项呢?

使用 @Value(“${ xxx }”) 的方式可读取用户自定义的配置

@Value("${name}")
private String name;
@Value("${age}")
private int age;

读取的时候,自定义与系统的配置项都可以获取到

【代码实例】

@Controller
@ResponseBody  //加在类上, 表示当前类中的所有方法返回的都是非静态页面的数据
public class TestController {
    //读取用户自定义的配置
    //一定要是${key}格式
    @Value("${name}")
    private String name;

    @Value("${age}")  // 读取用户自定义的配置
    private String age;

    @Value("${server.port}")  //读取系统配置项
    private int port;
    @RequestMapping ("/sayHi")   // = WebServlet("/URL")  
    public String sayHi() {
        return "hello world " + "->" + name + age + " port = " + port;
    }
}

浏览器输入url(http://localhost:9090/sayHi)之后显示结果如下: 

详解 Spring Boot 项目中的配置文件

properties的优缺点

  • 优点:是系统的默认的配置文件格式,优先级更高
  • 缺点:写法比较冗余

2. yml的语法

yml是yaml的缩写,它的语法格式为 key: value,其中冒号为英文格式,并且value与冒号中间的空格不可省略

# 系统端口号
server:
  port: 8083
# 数据库源信息
spring:
  datasource:
    username: root
    password: 123456

yml支持更多的数据类型

# 字符串
str1: 你好 \n 你好
str2: '你好 \n 你好'
str3: "你好 \n 你好"

# 布尔值
flag1: true
flag2: false

# 整数
num: 10

# 浮点数
pai: 3.14

# null ~代表null
Node: ~

读取的方式与properties格式相同,使用@Value("${ xxx }")

@Component
public class TestYml {
    @Value("${str1}")
    private String str1;
    @Value("${str2}")
    private String str2;
    @Value("${str3}")
    private String str3;
    @Value("${num}")
    private int num;
    @Value("${flag1}")
    private boolean flag1;
    @Value("${flag2}")
    private boolean flag2;
    @Value("${pai}")
    private double pai;
    @Value("${node}")
    private String node;

    //该注解代表构造方法,初始化bean的时候会调用该方法
    @PostConstruct
    public void construct(){
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
        System.out.println(num);
        System.out.println(pai);
        System.out.println(flag1);
        System.out.println(flag2);
        System.out.println(node);
    }
}

打印结果:

详解 Spring Boot 项目中的配置文件

 从上述字符串的打印发现:

  • 字符串默认可以不用加引号
  • 加单引号,会对特殊字符进行转义,也就是特殊字符也当字符串对待了
  • 加双引号,不会对特殊字符转义,也就是特殊字符有自己的特殊含义,\n代表换行

yml配置对象

# 对象
student1:
  id: 1
  name: 张三
  age: 10
# 对象的行内表示
student2: {id: 2,name: 李四, age: 15}

读取对象使用 @ConfigurationProperties 注解

@Component
@ConfigurationProperties("student1")//这里不需要使用$
@Getter
@Setter //这里是通过set方法赋值属性的,提供set方法
@ToString
public class Student {
    //字段与yml里的名称相同
    private int id;
    private String name;
    private int age;
}

测试类:

@Controller
public class StudentController {
    @Autowired
    private Student student;
    
    @PostConstruct
    public void printStu(){
        System.out.println(student);
    }
}

打印结果:详解 Spring Boot 项目中的配置文件

yml配置list集合

# list集合
nametype:
  name:
    - 张三
    - 李四
@Component
@ConfigurationProperties("nametype")
@Setter
@Getter
@ToString
public class TestList {
    private List<String> name;
}
@Controller
public class ListController {
    @Autowired
    private TestList testList;


    @PostConstruct
    public void printList(){
        System.out.println(testList);
    }
}

打印结果:详解 Spring Boot 项目中的配置文件

yml的优点

  • 写法简单,易于理解
  • 支持更多的数据类型,如数组,对象等
  • 支持更多的编程语言,Java,Python,Glang等

3. properties与yml的对比

  • 格式不同,properties是以key=value的格式,yml是以key: value的格式,并且层级之间使用换行缩进方式配置,vlaue与:之间的空格不可省略
  • properties配置存在冗余,yml很好的解决冗余问题
  • properties是项目默认的配置文件格式,yml是后面新的一种配置格式
  • yml的通用性更好,支持更多的语言
  • yml支持更多的数据类型

4. 设置不同环境下的配置文件

一般项目分为三个环境:

  1. 开发环境
  2. 测试环境
  3. 上线运行环境

 😔在实际的项目开发过程中,我们可能有测试环境、开发环境、部署环境,这些环境下使用的数据库连接或者项目启动的端口号可能都不太相同,只有一份配置文件,如果在不同的环境下运行程序的话就需要我们频繁地去修改配置文件,如果修改的配置项目少还好;如果多呢?不仅效率低,还可能出错。那么我们应该怎么解决这种这种问题呢?

环境不同可能配置项存在差异,如数据库源,端口号不同等差异

我们可以使用如下配置文件的方式解决:

  • 相同公共的配置放在application.yml(.properties)中
  • 不同环境的配置文件放在application-xxx.yml(.properties)中(xxx可以为任意名字)
  • 一般使用pro为线上环境,dev为开发环境,test为测试环境

在公共的配置文件中(application.yml)添加如下配置项:

# 设置配置文件的运行平台
spring:
  profiles:
    active: dev

示例:开发环境端口要求4567,测试环境端口要求5678,线上环境端口要求1234

详解 Spring Boot 项目中的配置文件

  • 如果改变环境,只需要更改主配置文件application.yml中的配置项spring.profiles.active即可
  • active 后面写 prod, test 和 dev, 就表示当前主配置文件要搭配那个运行环境来使用.

3. 更多的系统配置项

链接: 点击获取更多的系统配置项

详解 Spring Boot 项目中的配置文件文章来源地址https://www.toymoban.com/news/detail-477213.html

到了这里,关于详解 Spring Boot 项目中的配置文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker和Kubernetes部署Spring Boot项目:如何灵活修改配置文件?

      大家好,我是G探险者,今天我们来聊一下通过容器化部署的springboot项目,如何灵活的修改配置文件。 有同事问我,我们的springboot项目是容器化部署,使用的是K8S容器编排平台,部署上去后,修改项目里面的配置不太方便,还需要进入到容器内部进行修改,太麻烦了,怎么

    2024年02月10日
    浏览(41)
  • Spring Boot学习随笔- @SpringBootApplication详解、加载绝对路径配置文件、工厂创建对象(@ConfigurationProperties、@Value)

    学习视频:【编程不良人】2021年SpringBoot最新最全教程 这是一个 组合注解 ,就是由多个注解组成。下列注解红框内称为 元注解 (jdk提供) @Target :指定注解作用范围 @Retention :指定注解什么时候生效 重要注解 @SpringBootConfiguration:自动配置Spring、SpringMVC相关环境 @EnableAutoCo

    2024年02月05日
    浏览(57)
  • 聊聊Spring Boot配置文件:优先级顺序、加载顺序、bootstrap.yml与application.yml区别详解

    在 Spring Boot 中,配置文件的优先级顺序是: application-{profile}.yml ( application-{profile}.properties ) application.yml ( application.properties ) bootstrap.yml ( bootstrap.properties )。其中, {profile} 表示不同的环境配置,如 dev 、 test 、 prod 等。 优先级从高到低,高优先级的配置覆盖低优先级

    2024年01月25日
    浏览(59)
  • Spring Boot 中的 @Field 注解详解

    Spring Boot 是目前 Java 生态圈中最受欢迎的 Web 应用开发框架之一,它提供了很多优秀的功能和工具,可以帮助开发者快速构建高效、可靠的 Web 应用程序。其中一个重要的功能就是数据绑定和验证,Spring Boot 提供了多种方式来绑定请求参数、表单数据、JSON 数据等。其中,@Fi

    2024年02月11日
    浏览(33)
  • 【Spring Boot】Spring Boot配置文件详情

     Spring Boot是一个开源的Java框架,用于快速构建应用程序和微服务。它基于Spring Framework,通过自动化配置和约定优于配置的方式,使开发人员可以更快地启动和运行应用程序。Spring Boot提供了许多开箱即用的功能和插件,包括嵌入式Web服务器、安全性、数据访问、缓存、测试

    2024年02月12日
    浏览(54)
  • Spring Boot项目中的ASCII艺术字

    佛祖保佑: 可以使用Ascii艺术字实现个性化Spring Boot启动banner图案,轻松修改更换banner.txt文件内容,收集了丰富的banner艺术字和图,并且支持中文banner下载,让你的banner好玩儿更有意思。-bootschool.net 这个链接来进行自定义ASCII艺术字!完美! 重点!! 在resources目录下创建b

    2024年04月25日
    浏览(26)
  • Spring —— Spring Boot 配置文件

    JavaEE传送门 JavaEE Spring —— Bean 作用域和生命周期 Spring —— Spring Boot 创建和使用 如果没有配置信息, Spring Boot 项目就不能连接和此操作数据库, 甚至是不能保存可以用于排查问题的关键日志, 配置文件的作用是非常重要的. 系统使用的配置文件 (系统配置文件), 如端口号的配

    2023年04月09日
    浏览(38)
  • spring boot中的多环境配置

    的作用是为了启动某个环境,两个作用基本一致, 环境定义如下: 或者是查找application-dev.yml这个文件的所有配置 加载问价,使用的是import,注意语法:

    2024年02月06日
    浏览(36)
  • Spring Boot 中的 CSRF 保护配置

    CSRF(Cross-Site Request Forgery)是一种网络攻击,它利用已认证用户的身份来执行未经用户同意的操作。Spring Boot 提供了内置的 CSRF 保护机制,可以帮助您防止这种类型的攻击。本文将介绍如何在 Spring Boot 中配置和使用 CSRF 保护。 CSRF 攻击是一种利用用户已经在网站上进行了身份

    2024年02月07日
    浏览(31)
  • Spring Boot中的Elasticsearch自动配置

    Elasticsearch是一个基于Lucene的分布式全文搜索引擎,它在搜索、分析等方面具有出色的表现。Spring Boot中的Elasticsearch自动配置为我们提供了一种快速集成Elasticsearch的方式,使我们可以在Spring Boot应用程序中轻松地使用Elasticsearch。 本文将介绍Spring Boot中的Elasticsearch自动配置的作

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包