Spring Boot配置文件

文章目录

  • 配置文件的作用
  • 配置文件的格式
    • properties 配置文件说明
    • yml 配置文件说明
      • yml进阶使用
  • Spring Boot读取配置文件
  • 设置不同环境的配置文件
  • 总结

配置文件的作用

Spring Boot 配置文件在应用程序开发中起着非常重要的作用,它们用于定义应用程序的行为、组件和依赖的配置选项。这些配置文件可以影响应用程序的运行时行为,从数据库连接设置到日志级别,几乎所有方面都可以通过配置文件进行配置。以下是 Spring Boot 配置文件的主要作用:

  1. 配置应用程序行为: 配置文件允许定义应用程序的行为,如数据库连接、服务端口、缓存设置等。这些配置项决定了应用程序如何在运行时表现。

  2. 管理组件和依赖: 通过配置文件,可以指定应用程序的组件、模块和依赖项的配置选项。例如,你可以配置数据源、消息队列连接以及其他第三方库的设置。

  3. 区分环境配置: Spring Boot 支持根据不同的环境(如开发、测试、生产)加载不同的配置。通过使用不同的配置文件,你可以确保在不同的环境中使用适当的配置。

  4. 提供灵活性: 配置文件使应用程序的配置可以在不修改代码的情况下进行更改。这使得你可以根据需要调整应用程序的行为,而无需重新编译或重新部署应用程序。

  5. 外部化配置: 将配置信息从代码中分离出来,使得应用程序的配置可以在不同环境中共享,同时也更易于维护。

  6. 动态配置: 部分配置项可以在应用程序运行时动态修改,无需重新启动应用程序,从而提供了更大的灵活性。

  7. 日志配置: 配置文件可以定义应用程序的日志级别、日志输出位置等,以便进行适当的日志记录和监控。

  8. 安全配置: 配置文件可以包含敏感信息(如密码、秘钥等),因此可以用于安全地管理和保护这些信息。

总之,Spring Boot 配置文件允许开发人员在不同环境和场景中轻松地调整应用程序的行为和功能,同时提供了更好的代码组织、可维护性和可扩展性。通过适当配置,可以确保应用程序在各种情况下都能稳定运行并满足业务需求。

配置文件的格式

Spring Boot 支持两种主要的配置文件格式:.properties.yml(YAML)。可以根据你的偏好选择其中一种来配置您的 Spring Boot 应用程序。

  1. .properties 格式:
   # 注释key1=value1key2=value2

.properties 格式中,每一行表示一个配置项,使用等号(=)来分隔键和值。您可以使用 # 符号来添加注释。

  1. .yml 或 .yaml 格式:
   # 注释key1: value1key2: value2

.yml 格式中,使用冒号(:)来分隔键和值。层级关系通过缩进表示,不需要使用引号来引用字符串。

注意事项:

  • 属性文件中的配置项键和值都是字符串。在需要其他数据类型时,您可能需要进行适当的类型转换。
  • 属性文件中可以使用占位符,如 my.property=${value},然后在其他配置项中定义 value
  • .yml 格式通常比 .properties 格式更易于阅读和维护,尤其是对于有嵌套结构的配置项。

你可以将这些配置文件命名为 application.propertiesapplication.yml,然后放置在 Spring Boot 项目的 src/main/resources 目录中。Spring Boot 会自动加载这些文件,并将其中的配置项应用于应用程序。如果你需要针对不同的环境配置不同的属性,可以使用特定环境的配置文件,例如 application-dev.propertiesapplication-prod.yml

  1. 理论上讲 properties 可以和 yml ⼀起存在于⼀个项⽬当中,当 properties 和 yml ⼀起存在⼀个项
    ⽬中时,如果配置⽂件中出现了同样的配置,⽐如 properties 和 yml 中都配置了“server.port”,
    那么这个时候会以 properties 中的配置为主,也就是 .properties 配置⽂件的优先级最⾼,但加载
    完 .properties ⽂件之后,也会加载 .yml ⽂件的配置信息。
  2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配
    置⽂件格式,这样可以更好的维护(降低故障率)。这就好像连锁店的服饰⼀样,不管是⽼款的服
    装还是新款的服装,⼀定要统⼀了才好看。

properties 配置文件说明

.properties 配置文件是一种常用的配置文件格式,特别在 Java 生态中被广泛使用。在 Spring Boot 中,您可以使用 .properties 配置文件来定义应用程序的配置选项。以下是关于 .properties 配置文件的一些说明:

  1. 格式: .properties 配置文件使用简单的键值对格式来定义配置项。每一行表示一个配置项,使用等号(=)来分隔键和值。例如:key=value

  2. 注释: 你可以使用 # 符号添加注释,以便在配置文件中添加解释性的文本,不会被解析为配置项。

  3. 键和值: 配置项的键和值都是字符串。如果需要表示其他数据类型,你可能需要在代码中进行适当的类型转换。

  4. 占位符: 你可以使用 ${key} 形式的占位符,将一个键的值引用到另一个配置项中。这在将相同的值用于多个配置项时非常有用。

  5. 特殊字符转义: 如果你的值中包含特殊字符(如等号、冒号等),你可能需要使用反斜杠进行转义。

  6. 多行配置: 如果你的值需要跨多行,可以在每行末尾添加反斜杠来指示值的续行。也可以使用双引号(")来表示多行值。

示例 .properties 配置文件:

# 数据库连接配置
db.url=jdbc:mysql://localhost:3306/mydb
db.username=myuser
db.password=mypassword# 服务器端口
server.port=8080# 多行值
multi.line.value=This is a multi-line value \that continues on the next line.# 使用占位符
app.name=MyApp
app.welcomeMessage=Welcome to ${app.name}!

在 Spring Boot 项目中,你可以将这些配置项放置在 src/main/resources/application.properties 文件中,Spring Boot 将自动加载并应用这些配置项。如果你选择使用 .yml 格式,相同的配置项可以以更紧凑和易读的方式进行表示。选择适合你需求的配置文件格式,并确保保持良好的代码组织和文档,以便于维护和理解。

yml 配置文件说明

YAML(Yet Another Markup Language)是一种人类友好的数据序列化格式,它在配置文件中以 .yml.yaml 扩展名使用。在 Spring Boot 中,你可以使用 YAML 配置文件来定义应用程序的配置选项。以下是关于 YAML 配置文件的一些说明:

  1. 格式: YAML 使用缩进和冒号(:)来表示层级关系和键值对。每个键值对表示一个配置项。不同于 .properties 文件的简单键值对,YAML 支持更复杂的嵌套结构。

  2. 缩进: 缩进是 YAML 文件中非常重要的元素,它用来表示层级关系。缩进一般是 2 个空格,但必须保持一致。子项的缩进应该比其父项多两个空格。

  3. 注释: YAML 支持使用 # 符号添加注释,注释后的内容不会被解析为配置项。

  4. 字符串引号: 字符串可以使用单引号(')或双引号(")来引用,但是在大多数情况下,可以省略引号。需要引号的情况包括值中包含特殊字符(如冒号、空格等)或需要明确表示字符串而不是其他数据类型。

  5. 多行字符串: 你可以使用 | 符号来表示多行字符串,保留字符串中的换行和空格。使用 > 符号也可以表示多行字符串,但会忽略换行和空格。

  6. 数组和列表: 列表可以用连字符(-)表示,也可以使用 [] 表示数组。数组可以包含字符串、数字、布尔值等。

  7. 占位符: YAML 支持使用 ${key} 形式的占位符,将一个键的值引用到另一个配置项中。

示例 YAML 配置文件:

# 数据库连接配置
db:url: jdbc:mysql://localhost:3306/mydbusername: myuserpassword: mypassword# 服务器配置
server:port: 8080# 多行值
multi_line_value: |This is a multi-line valuethat continues on the next line.# 使用占位符
app:name: MyAppwelcomeMessage: Welcome to ${app.name}!

.properties 文件相比,YAML 文件更具有可读性和易用性,尤其对于有嵌套结构和多行值的配置项。在 Spring Boot 项目中,你可以将这些配置项放置在 src/main/resources/application.ymlsrc/main/resources/application.yaml 文件中,Spring Boot 将自动加载并应用这些配置项。

yml进阶使用

当使用 YAML(YAML Ain’t Markup Language)配置文件时,你可以利用其丰富的功能来组织和管理更复杂的配置项。以下是一些进阶的 YAML 使用技巧:

  1. 嵌套结构: YAML 支持嵌套结构,可以通过缩进来表示层级关系。这非常有助于将配置项进行逻辑分组。
   database:url: jdbc:mysql://localhost:3306/mydbusername: myuserpassword: mypassword
  1. 列表和数组: 使用 -[...] 来表示列表或数组。这对于定义多个相似配置项非常有用,如多个数据库配置。
   databases:- url: jdbc:mysql://localhost:3306/db1username: user1password: pass1- url: jdbc:mysql://localhost:3306/db2username: user2password: pass2
  1. 多行字符串: 使用 |> 表示多行字符串。| 保留换行和空格,> 忽略换行和空格。
   description: |This is a multi-linedescription thatcontinues on the next line.
  1. 引用和锚点: YAML 允许使用 & 来创建锚点(定义一个对象),使用 * 来引用锚点(重用对象)。
   base_config: &baseurl: jdbc:mysql://localhost:3306/mydbusername: myuserpassword: mypassworddatabase1:<<: *baseurl: jdbc:mysql://localhost:3306/db1database2:<<: *baseurl: jdbc:mysql://localhost:3306/db2
  1. 环境特定配置: 你可以根据不同的环境创建不同的配置块,根据激活的环境来加载不同的配置。
   spring:profiles:active: devdatasource:url: jdbc:mysql://localhost:3306/devdb---spring:profiles: proddatasource:url: jdbc:mysql://production-server:3306/proddb
  1. 属性引用: 在 Spring Boot 中,你可以在配置文件中使用 ${key} 形式的占位符引用其他配置项的值。
   app:name: MyAppmessage: Welcome to ${app.name}!
  1. 复杂类型: YAML 支持映射、列表、标量等多种数据类型,你可以根据需要使用这些类型来表示不同的配置项。
   users:- name: Aliceage: 28- name: Bobage: 32

使用这些进阶的 YAML 功能,你可以更好地组织和管理您的配置项,使配置文件更加结构化和易于阅读。请注意,正确的缩进和格式非常重要,因为它们直接影响了 YAML 文件的解析结果。

Spring Boot读取配置文件

Spring Boot 提供了多种方法来读取配置文件。你可以根据项目的需求和偏好选择适合您的方式。以下是 Spring Boot 读取配置文件的几种常见方法:

  1. 使用 @Value 注解: 你可以在 Spring Bean 中使用 @Value 注解来直接注入配置文件中的值。
   @Value("${property.key}")private String propertyValue;

这种方式适用于需要在类的字段中直接注入配置值的情况,适用于简单的配置项。

  1. 使用 @ConfigurationProperties 注解: 你可以在自定义的配置类中使用 @ConfigurationProperties 注解来绑定配置文件中的值。
   @Component@ConfigurationProperties(prefix = "myconfig")public class MyConfig {private String property1;private String property2;// ...}

这种方式适用于需要将一组相关的配置项绑定到一个 Java 对象中的情况。

  1. 使用 Environment 对象: 通过注入 Environment 对象,你可以直接从配置文件中获取属性值。
   @Autowiredprivate Environment environment;public void someMethod() {String propertyValue = environment.getProperty("property.key");}

这种方式适用于需要在方法内部获取配置值的情况。

  1. 使用 @Configuration 类: 你可以创建一个带有 @Configuration 注解的类,然后在其中定义 @Bean 方法来返回配置值。
   @Configurationpublic class AppConfig {@Beanpublic String propertyValue(@Value("${property.key}") String value) {return value;}}

这种方式适用于需要将配置值包装为 Spring Bean 的情况。

  1. 使用 @PropertySource 注解: 你可以在配置类上使用 @PropertySource 注解来指定要加载的配置文件。
   @Configuration@PropertySource("classpath:custom.properties")public class CustomConfig {// ...}

这种方式适用于加载不同于默认的配置文件的情况。

无论你选择哪种方法,Spring Boot 都会自动根据配置文件的名称和位置加载配置值,并将其注入到应用程序中。你可以根据项目的需求和代码组织的需要来选择合适的方法。

设置不同环境的配置文件

在 Spring Boot 中,你可以根据不同的环境(如开发、测试、生产)使用不同的配置文件来管理配置项。这种方式可以让你为每个环境提供特定的配置,从而使你的应用程序在不同环境中保持一致的行为。以下是如何设置不同环境的配置文件:

  1. 默认的 application.propertiesapplication.yml
    默认情况下,Spring Boot 会加载名为 application.propertiesapplication.yml 的配置文件。这是通用的配置文件,适用于所有环境。

  2. 激活特定环境的配置文件:
    你可以使用 spring.profiles.active 属性来指定要激活的环境。根据激活的环境,Spring Boot 会自动加载相应的配置文件。例如,对于 dev 环境,可以创建名为 application-dev.propertiesapplication-dev.yml 的配置文件。

   java -jar myapp.jar --spring.profiles.active=dev
  1. 多个激活的环境:
    如果需要同时激活多个环境,你可以使用逗号分隔的方式指定。
   java -jar myapp.jar --spring.profiles.active=dev,debug
  1. 使用不同的配置文件名:
    如果希望使用不同的配置文件名而不是默认的 application,你可以通过 spring.config.name 属性来指定。
   java -jar myapp.jar --spring.config.name=myconfig
  1. 使用外部配置文件:
    除了内部的 src/main/resources 目录,你还可以将配置文件放在外部位置,然后使用 spring.config.location 属性来指定配置文件的路径。
   java -jar myapp.jar --spring.config.location=/path/to/config/

通过使用上述方法,你可以轻松地为不同的环境创建和管理不同的配置文件。在应用程序的构建和部署过程中,根据需要激活适当的环境,确保应用程序在不同环境中正确地加载和使用配置。

总结

当使用 Spring Boot 进行应用程序开发时,配置文件是至关重要的,它可以影响应用程序的行为、功能和性能。以下是关于 Spring Boot 配置文件的综合总结:

  1. 配置文件格式: Spring Boot 支持两种主要的配置文件格式:.properties.yml(YAML)。.properties 文件是基于键值对的简单格式,.yml 文件是基于缩进和冒号的层级结构格式。

  2. 默认配置文件: 默认情况下,Spring Boot 会自动加载名为 application.propertiesapplication.yml 的配置文件。这些文件用于存放通用的配置项,适用于所有环境。

  3. 环境特定配置文件: 为不同的环境(如开发、测试、生产)创建特定的配置文件,命名规则为 application-{profile}.propertiesapplication-{profile}.yml。通过 --spring.profiles.active 属性来激活特定环境的配置。

  4. 激活多个环境: 使用逗号分隔的方式,可以同时激活多个环境,根据需要加载多个配置文件。

  5. 特定配置文件名: 如果需要使用不同的配置文件名,可以通过 --spring.config.name 属性指定。

  6. 外部配置文件: 除了内部的 src/main/resources 目录,你还可以将配置文件放在外部位置,通过 --spring.config.location 属性指定配置文件的路径。

  7. 配置文件的加载顺序: Spring Boot 配置文件会按照一定的优先级顺序加载,包括内部和外部的配置文件。具体的加载顺序可以在官方文档中查找。

  8. 读取配置值的方法: Spring Boot 提供了多种方式来读取配置值,包括使用 @Value 注解、@ConfigurationProperties 注解、Environment 对象、@Configuration 类以及更高级的功能如属性引用、复杂类型等。

通过合理使用这些配置文件的方法,你可以轻松地组织和管理应用程序的配置,确保应用在不同环境中具有一致的行为和性能。根据你的项目需求,选择适合的配置文件格式和加载方式,使得你的应用程序更加灵活、可维护和可扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/47295.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ganache 本地测试网远程连接

文章目录 前言1. 安装Ganache2. 安装cpolar3. 创建公网地址4. 公网访问连接5. 固定公网地址 前言 Ganache 是DApp的测试网络&#xff0c;提供图形化界面&#xff0c;log日志等&#xff1b;智能合约部署时需要连接测试网络。 Ganache 是一个运行在本地测试的网络,通过结合cpol…

窗口函数大揭秘!轻松计算数据累计占比,玩转数据分析的绝佳利器

上一篇文章《如何用窗口函数实现排名计算》中小编为大家介绍了窗口函数在排名计算场景中的应用&#xff0c;但实际上窗口函数除了可以进行单行计算&#xff0c;还可以在每行上打开一个指定大小的计算窗口&#xff0c;这个计算窗口可以由SQL中的语句具体指定&#xff0c;大到整个…

Servlet+JDBC实战开发书店项目讲解第七篇:模拟支付

ServletJDBC实战开发书店项目讲解第七篇&#xff1a;模拟支付 概述 在本篇文章中&#xff0c;我们将使用Servlet和JDBC来完成书店项目中的模拟支付功能。我们将介绍实现思路、后端代码设计以及前端代码设计&#xff0c;并通过代码实现订单支付成功&#xff0c;并实现查看未付…

AI极客日报0822 - AI创作是否应该有版权?

&#x1f440;AI 日报合集 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; 人工智能系统依法享有版权吗&#xff1f;这位法官给出了肯定的答案。让我们开始吧。 今日看点&#xff1a; 一位联邦法官明确表示&#xff0c;AI创作的艺术品没有版权&#xff01;中国&#xff0c…

PySide6学习笔记--基础环境的安装配置

PySide6介绍 QT官方发布Qt6.0之后&#xff0c;紧接着于2020年12月10日发布了PySide 6&#xff0c;对应C版的Qt6。从PySide6开始&#xff0c;PySide的命名也会与Qt的大版本号保持一致。需要注意的是使用PySide6开发的程序在默认情况下&#xff0c;不兼容Windows7系统&#xff0c…

测试框架pytest教程(4)运行测试

运行测试文件 $ pytest -q test_example.py 会运行该文件内test_开头的测试方法 该-q/--quiet标志使输出保持简短 测试类 pytest的测试用例可以不写在类中&#xff0c;但如果写在类中&#xff0c;类名需要是Test开头&#xff0c;非Test开头的类下的test_方法不会被搜集为用…

初识微服务

我们在曾经最常见的就是所谓的单体架构&#xff0c;但是由于网民越来越多&#xff0c;单体架构已经逐渐的被淘汰出去&#xff0c;所以我们在单体架构的基础上提出了微服务&#xff0c;它提倡将单一应用程序划分成一组小的服务&#xff0c;服务之间互相协调、互相配合&#xff0…

PCB布线必看系列之三W原则!! !

三W原则是指Wiring&#xff08;连线&#xff09;,Worship&#xff08;供电&#xff09;,Waste&#xff08;浪费&#xff09; 一、Wiring原则 Wiring连线是电路板上的信号传输线路&#xff0c;包括信号线&#xff0c;功率线&#xff0c;地线 布线注意原则&#xff1a; 1.信号…

vue 使用nvm控制node 版本,随意切换 node 版本

1.nvm 下载安装 https://github.com/coreybutler/nvm-windows/releases 找自己版本 1.安装版本 nvm list available // 查看所有node 版本 nvm install 版本号 // 安装指定版本号2.nvm 列表展示 nvm list //展示所有版本号3.nvm 切换环境 nvm use 版本号 // 切换版本4.…

python模块 — pip包管理工具

pip是Python语言中最常用的包管理工具之一&#xff0c;可以用于安装、卸载、查看和升级第三方模块。 下面是关于pip的一些常用命令&#xff1a; 1、安装模块 pip install <module_name> 2、卸载模块 pip uninstall <module_name> 3、查看所有已安装模块 pip…

redis7高级篇3 亿级别数据量的统计分析

一 亿级别统计分类 1.1 统计分类 1.聚合统计&#xff1a;统计多个集合聚合的结果&#xff0c;也就是多个集合之间交并差的统计。 2.排序统计&#xff1a;在需要展示最新列表&#xff0c;排行榜等场景时&#xff0c;如果数据更新频繁或者需要分页时&#xff0c;建议使用zset12…

登录 jwt ,filter

cookie 在请求头中叫做cookie&#xff0c;在响应头中叫set-cookie GetMapping("/c1")public Result cookie1(HttpServletResponse resp){resp.addCookie(new Cookie("login_name","itheima"));return Result.success();}GetMapping("/c2&qu…

Postman的高级用法—Runner的使用​

1.首先在postman新建要批量运行的接口文件夹&#xff0c;新建一个接口&#xff0c;并设置好全局变量。 2.然后在Test里面设置好要断言的方法 如&#xff1a; tests["Status code is 200"] responseCode.code 200; tests["Response time is less than 10000…

三维模型OSGB格式轻量化的纹理压缩和质量保持分析

三维模型OSGB格式轻量化的纹理压缩和质量保持分析 在三维模型应用中&#xff0c;纹理数据是一个重要的部分&#xff0c;可以为模型增加更多的真实感和细节。但是&#xff0c;由于纹理数据通常会占用大量的存储空间和传输带宽&#xff0c;因此&#xff0c;在OSGB格式轻量化处理中…

几个Web自动化测试框架的比较:Cypress、Selenium和Playwright

介绍&#xff1a;Web自动化测试框架对于确保Web应用程序的质量和可靠性至关重要。它们帮助开发人员和测试人员自动执行重复性任务&#xff0c;跨多个浏览器和平台执行测试&#xff0c;并在开发早期发现问题。 以下仅代表作者观点&#xff1a; 本文探讨来3种流行的Web自动化测…

HTML中如何改变按钮大小

在HTML中&#xff0c;你可以使用CSS来改变按钮的大小。CSS提供了多种方法来控制按钮的尺寸&#xff0c;以下是一些常见的方法&#xff1a; 使用width和height属性: 你可以使用width和height属性来指定按钮的宽度和高度。例如&#xff0c;将按钮的宽度设置为200像素&#xff0c;…

触摸屏与PLC之间 EtherNet/IP无线以太网通信

在实际系统中&#xff0c;同一个车间里分布多台PLC&#xff0c;用触摸屏集中控制。通常所有设备距离在几十米到上百米不等。在有通讯需求的时候&#xff0c;如果布线的话&#xff0c;工程量较大耽误工期&#xff0c;这种情况下比较适合采用无线通信方式。 本方案以MCGS触摸屏和…

视频云存储/安防监控EasyCVR视频汇聚平台如何通过角色权限自行分配功能模块?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、…

LLM生成式 AI 项目生命周期Generative AI project lifecycle

在本课程的其余部分中&#xff0c;您将学习开发和部署LLM驱动应用所需的技巧。在这个视频中&#xff0c;您将了解一个能帮助您完成此工作的生成式AI项目生命周期。此框架列出了从构思到启动项目所需的任务。到课程结束时&#xff0c;您应该对您需要做的重要决策、可能遇到的困难…

编写一个俄罗斯方块

编写俄罗斯方块 思路。 1、创建容器数组&#xff0c;方块&#xff0c; 2、下落&#xff0c;左右移动&#xff0c;旋转&#xff0c;判断结束&#xff0c;消除。 定义一个20行10列的数组表示游戏区。初始这个数组里用0填充&#xff0c;1表示有一个方块&#xff0c;2表示该方块固…