【Java 开发日记】有了解过 SpringBoot 的参数配置吗?

【Java 开发日记】有了解过 SpringBoot 的参数配置吗?

目录

核心概念:application.properties 与 application.yml

配置的加载位置与优先级

外部化配置(非常强大)

如何在代码中获取配置值?

常用配置示例

总结


当然了解,Spring Boot 的参数配置是其核心特性之一,也是它实现“约定大于配置”理念的关键。它极大地简化了传统 Spring 应用中繁琐的 XML 配置。

一、核心概念:application.propertiesapplication.yml

Spring Boot 默认使用这两种文件进行配置(二者选其一即可,.yml 更常用)。

application.properties (传统键值对格式)

server.port=8081 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=secret logging.level.com.example.demo=debug

application.yml (YAML 格式,层次感更强,推荐使用)

server: port: 8081 spring: datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: secret logging: level: com.example.demo: debug

YAML 注意事项:缩进必须使用空格,不能使用 Tab 键,冒号后面必须有一个空格。

二、配置的加载位置与优先级

Spring Boot 会从以下位置按从高到低的优先级加载 application 配置文件(高优先级的配置会覆盖低优先级的配置):

  1. 当前项目根目录下的/config子目录
  2. 当前项目根目录
  3. classpath 下的/config (即 src/main/resources/config)
  4. classpath 根路径 (即 src/main/resources)

最佳实践:在开发时,将通用配置放在 src/main/resources/application.yml 中。在打包部署时,可以在 JAR 包所在目录创建一个 config 文件夹,里面放一个 application.yml 来覆盖开发环境的配置(如数据库连接),这样就实现了配置与代码分离

三、外部化配置(非常强大)

除了配置文件,Spring Boot 还支持多种外部配置方式,优先级高于application.yml。这在容器化部署(如 Docker)时尤其有用。

  1. 命令行参数
java -jar yourapp.jar --server.port=8888 --spring.datasource.url=jdbc:mysql://prod-server:3306/proddb
  1. 操作系统环境变量
    Spring Boot 会自动识别形如 SPRING_DATASOURCE_URL 的环境变量(注意大小写和下划线)。
  2. Profile-specific 配置(多环境配置)这是管理不同环境(开发、测试、生产)配置的最佳方式。在通用的 application.yml 中,通过 spring.profiles.active 属性来激活特定环境的配置。
    • 配置文件命名规则:application-{profile}.yml
    • 例如:
      • application-dev.yml (开发环境)
      • application-test.yml (测试环境)
      • application-prod.yml (生产环境)

application.yml

spring: profiles: active: dev # 默认激活开发环境

激活方式

  • 在配置文件中设置(如上所示)。
  • 命令行激活:java -jar yourapp.jar --spring.profiles.active=prod
  • JVM 参数:-Dspring.profiles.active=test
  • 环境变量:export SPRING_PROFILES_ACTIVE=prod

四、如何在代码中获取配置值?

@Value 注解 (适用于单个属性)

@Component public class MyComponent { @Value("${server.port}") private int serverPort; @Value("${app.message: Hello Default}") // 使用冒号指定默认值 private String message; // ... }

@ConfigurationProperties注解 (推荐,用于绑定一组配置)

这是更类型安全、更面向对象的方式。

步骤 1:在 application.yml 中定义配置

app: user: name: "Alice" age: 30 email: "[email protected]" hobbies: - reading - hiking

步骤 2:创建一个配置类来绑定这些属性

@Component @ConfigurationProperties(prefix = "app.user") // 前缀是 app.user @Data // Lombok 注解,自动生成 getter/setter // 或者也可以手动写 getter 和 setter public class UserProperties { private String name; private Integer age; private String email; private List<String> hobbies; }

步骤 3:在需要的地方注入并使用

@Service public class MyService { @Autowired private UserProperties userProperties; public void doSomething() { System.out.println("User name: " + userProperties.getName()); System.out.println("User hobbies: " + userProperties.getHobbies()); } }

别忘了在启动类上添加 @EnableConfigurationProperties 注解(但如果你像上面一样在配置类上使用了 @Component,则不需要)。

五、常用配置示例

# 服务器配置 server: port: 8080 servlet: context-path: /api # 应用上下文路径 # 数据源配置 spring: datasource: url: jdbc:mysql://localhost:3306/test username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver # JPA 配置 jpa: hibernate: ddl-auto: update # 生产环境不要用 create-drop 或 update show-sql: true # 日志配置 logging: level: root: info org.springframework.web: debug com.example: trace file: name: logs/myapp.log # 输出到文件 # 自定义配置 myapp: feature: enabled: true api-url: https://api.example.com

总结

Spring Boot 的参数配置系统非常灵活和强大,其核心思想是:

  • 约定大于配置:提供了大量默认配置,开箱即用。
  • 配置外部化:允许你通过文件、命令行、环境变量等多种方式覆盖默认配置,轻松适应不同环境。
  • 类型安全绑定:通过 @ConfigurationProperties 可以轻松地将一组配置映射到 Java Bean 上,是管理自定义配置的首选方式。

如果小假的内容对你有帮助,请点赞评论收藏。创作不易,大家的支持就是我坚持下去的动力!

Read more

JAVA中对象的几种比较

JAVA中对象的几种比较

文章目录 * 引言 * 基本元素比较 * 1. 基本数据类型:直接用 `==` 比较值 * 2. 包装类:分两种情况 * 3. String 类型:核心看 `==` 和 `equals()` 的区别 * 基本元素比较的核心建议 * 总结 * 对象的比较 * 1. 覆写基类 `Object` 的 `equals()` + `hashCode()` * 核心用途 * 核心规则 * 实现要点 * 示例 * 适用场景 * 2. 基于 `Comparable` 接口的比较 * 核心用途 * 核心方法 * 实现要点 * 示例 * 适用场景 * 3. 基于 `Comparator` 比较器的比较 * 核心用途 * 核心方法 * 实现形式 * 示例 * 适用场景 * 总结一下

By Ne0inhk
Java 基础知识总结(超详细整理)

Java 基础知识总结(超详细整理)

Java基础知识总结(超详细整理) Java是一种跨平台、面向对象的编程语言,其设计理念为“一次编写,到处运行”(Write Once, Run Anywhere),广泛应用于后端开发、Android开发、大数据处理等领域。以下从核心概念、语法、进阶特性等维度,系统梳理Java基础知识。 一、Java语言核心概念 1.1 跨平台原理 Java的跨平台依赖JVM(Java Virtual Machine,Java虚拟机) : * 开发者编写的.java源文件,通过javac编译器编译为字节码文件(.class) ; * 不同操作系统(Windows、Linux、macOS)安装对应的JVM,JVM负责将字节码解析为本地机器指令并执行; * 注意:JVM是跨平台的核心,但JVM本身不跨平台(需为不同系统安装对应版本的JVM)。 1.2 JDK、JRE、JVM的关系 三者是Java开发和运行的基础,关系如下(包含关系:

By Ne0inhk
Java 注解与反射实战:手把手实现自定义日志与参数校验注解

Java 注解与反射实战:手把手实现自定义日志与参数校验注解

前言:为什么需要自定义注解? 在日常开发中,我们经常遇到两类重复工作: 日志记录:每个重要方法都要写 "开始执行"、"参数是 xxx"、"执行结束" 的代码;参数校验:判断输入是否为 null、年龄是否在合理范围、手机号格式是否正确等。 这些工作机械且冗余,而注解 + 反射正是解决这类问题的 "银弹"—— 用注解标记需要处理的地方,用反射自动执行逻辑,实现 "一次定义,多处复用"。 本文将带你从零实现两个实用案例: 1. 自定义日志注解@Log:自动记录方法调用细节; 2. 自定义参数校验注解@NotNull、@Range:自动校验方法参数合法性。 全程实战,代码可直接运行,搭配图解帮你吃透底层逻辑。 案例一:自定义日志注解@

By Ne0inhk

鸿蒙PC开发全面开花!仓颉/Java/Python等多语言适配,解锁全场景开发新体验

鸿蒙PC开发全面开花!仓颉/Java/Python等多语言适配,解锁全场景开发新体验 随着鸿蒙操作系统(HarmonyOS)生态的持续演进,PC端已成为其全场景战略的核心阵地之一。如今,鸿蒙PC已实现对仓颉、rkTS、Java、JavaScript、Python、C/C++等主流编程语言的全面支持,为开发者提供了多元化的技术选型空间。无论是深耕系统底层开发,还是专注应用快速迭代,亦或是探索AI与全场景交互,都能在鸿蒙PC开发生态中找到契合的解决方案。本文将带你走进鸿蒙PC的多语言开发世界,从语言特性解析到适配能力解读,最后邀你一同尝鲜这场全场景开发革命。 一、先搞懂:这些编程语言各有何神通? 在切入鸿蒙PC的支持特性前,我们先快速梳理这六种语言的核心定位与优势。不同语言的设计理念差异,决定了它们在鸿蒙PC生态中的适配场景与价值,也让开发者能根据项目需求精准选型。 1. 仓颉:鸿蒙生态的“原生灵魂” 作为华为自研的现代编程语言,仓颉是鸿蒙生态的核心专属语言,专为全场景智能应用开发而生。它兼具高效编程、安全可靠、轻松并发和卓越性能四大核心特性,支持函数式、命令式、面向对象等多编

By Ne0inhk