Spring Boot配置篇:详解application.properties和application.yml

Spring Boot配置篇:详解application.properties和application.yml

在上一篇文章中,我们介绍了如何快速搭建一个Spring Boot应用。在实际开发过程中,配置管理是非常重要的一个环节。Spring Boot提供了多种配置方式,其中最常用的就是application.properties和application.yml文件。本文将详细介绍这两种配置方式的使用方法和最佳实践。

Spring Boot配置文件概述

Spring Boot允许我们通过外部配置来覆盖默认的配置值,使得应用可以在不同的环境中运行而无需修改代码。Spring Boot支持多种外部配置方式,按优先级从高到低排列如下:

  1. 命令行参数
  2. SPRING_APPLICATION_JSON中的属性
  3. ServletConfig初始化参数
  4. ServletContext初始化参数
  5. JNDI属性
  6. Java系统属性
  7. 操作系统环境变量
  8. RandomValuePropertySource
  9. jar包外的application-{profile}.properties
  10. jar包内的application-{profile}.properties
  11. jar包外的application.properties
  12. jar包内的application.properties

其中,application.properties和application.yml是最常用的配置方式。

application.properties详解

application.properties是Java世界中最常见的配置文件格式,采用键值对的形式进行配置。

基本语法

properties 复制代码
# 基本键值对配置
server.port=8080
spring.application.name=springboot-config-demo

# 带有层级关系的配置
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456

# 列表配置
my.list.values=one,two,three

# 布尔值配置
my.feature.enabled=true

# 数字配置
my.number.value=42

常用配置项

properties 复制代码
# 服务器配置
server.port=8080
server.servlet.context-path=/api

# 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# JPA配置
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect

# Redis配置
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0

# 日志配置
logging.level.root=INFO
logging.level.com.example=DEBUG
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n

application.yml详解

YAML(YAML Ain't Markup Language)是一种简洁的配置文件格式,相比properties文件,YAML更加结构化和易读。

基本语法

yaml 复制代码
server:
  port: 8080
  servlet:
    context-path: /api

spring:
  application:
    name: springboot-config-demo
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
    database-platform: org.hibernate.dialect.MySQL8Dialect
  redis:
    host: localhost
    port: 6379
    password: ""
    database: 0

logging:
  level:
    root: INFO
    com.example: DEBUG
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"

YAML的高级特性

1. 列表配置
yaml 复制代码
# 行内列表
my:
  servers: [dev.example.com, test.example.com, prod.example.com]

# 多行列表
my:
  servers:
    - dev.example.com
    - test.example.com
    - prod.example.com
2. 对象配置
yaml 复制代码
# 行内对象
user:
  info: {name: "张三", age: 25, email: "zhangsan@example.com"}

# 多行对象
user:
  info:
    name: "张三"
    age: 25
    email: "zhangsan@example.com"
3. 多行字符串
yaml 复制代码
# 字面量块标量(保留换行)
message: |
  这是一个多行字符串
  每一行都会保留换行符
  包括最后一行

# 折叠块标量(将换行转换为空格)
description: >
  这也是一个多行字符串
  但是换行会被转换为空格
  最终形成一个单行字符串

两种格式对比

特性 application.properties application.yml
可读性 一般 优秀
层级结构 通过点分隔 通过缩进表示
列表支持 需要逗号分隔 原生支持
多行字符串 不支持 支持
文件大小 较大 较小
学习成本 中等

配置文件的使用

1. 创建配置类

java 复制代码
package com.example.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {
    private String name;
    private int port;
    private boolean debug;
    private List servers;
    
    // getter和setter方法
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public int getPort() {
        return port;
    }
    
    public void setPort(int port) {
        this.port = port;
    }
    
    public boolean isDebug() {
        return debug;
    }
    
    public void setDebug(boolean debug) {
        this.debug = debug;
    }
    
    public List getServers() {
        return servers;
    }
    
    public void setServers(List servers) {
        this.servers = servers;
    }
}

2. 在配置文件中添加配置

application.yml:

yaml 复制代码
myapp:
  name: "我的应用"
  port: 8080
  debug: true
  servers:
    - server1.example.com
    - server2.example.com
    - server3.example.com

3. 在代码中使用配置

java 复制代码
package com.example.controller;

import com.example.config.MyAppProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConfigController {
    
    @Autowired
    private MyAppProperties myAppProperties;
    
    @GetMapping("/config")
    public String getConfig() {
        return "应用名称: " + myAppProperties.getName() + 
               ", 端口: " + myAppProperties.getPort() + 
               ", 调试模式: " + myAppProperties.isDebug();
    }
}

多环境配置

Spring Boot支持通过不同的配置文件来管理不同环境的配置。

1. 创建不同环境的配置文件

  • application.properties (默认配置)
  • application-dev.properties (开发环境)
  • application-test.properties (测试环境)
  • application-prod.properties (生产环境)

2. 激活特定环境

通过application.properties激活:

properties 复制代码
spring.profiles.active=dev

通过命令行参数激活:

bash 复制代码
java -jar app.jar --spring.profiles.active=prod

3. 环境配置示例

application-dev.properties:

properties 复制代码
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/dev_db
spring.datasource.username=dev_user
spring.datasource.password=dev_password
logging.level.root=DEBUG

application-prod.properties:

properties 复制代码
server.port=80
spring.datasource.url=jdbc:mysql://prod-server:3306/prod_db
spring.datasource.username=prod_user
spring.datasource.password=prod_password
logging.level.root=WARN

配置文件最佳实践

1. 配置文件组织原则

yaml 复制代码
# 按功能模块组织配置
server:
  port: 8080
  servlet:
    context-path: /api

spring:
  datasource:
    # 数据库相关配置
  redis:
    # Redis相关配置
  jpa:
    # JPA相关配置

logging:
  # 日志相关配置

myapp:
  # 自定义应用配置

2. 敏感信息处理

不要在配置文件中直接存储敏感信息,可以使用环境变量:

yaml 复制代码
spring:
  datasource:
    username: ${DB_USERNAME:root}
    password: ${DB_PASSWORD:password}

3. 配置验证

java 复制代码
package com.example.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Positive;

@Component
@Validated
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {
    
    @NotEmpty
    private String name;
    
    @Positive
    private int port = 8080;
    
    // getter和setter方法
}

总结

在本文中,我们详细介绍了Spring Boot中两种主要的配置文件格式:application.properties和application.yml。我们学习了:

  1. 两种配置文件的基本语法和使用方法
  2. YAML格式的高级特性,如列表、对象和多行字符串
  3. 两种格式的对比和选择建议
  4. 如何创建和使用自定义配置类
  5. 多环境配置的管理方式
  6. 配置文件的最佳实践

合理使用配置文件可以让我们的Spring Boot应用更加灵活和易于维护。在下一篇文章中,我们将介绍如何在Spring Boot中整合MyBatis进行数据访问操作。

作者:CSDN博客助手

版权声明:本文为博主原创文章,转载请附上原文出处链接和本声明。

相关推荐
星辰徐哥2 小时前
异步定时任务系统的设计与Rust实战集成
开发语言·后端·rust
被摘下的星星2 小时前
Java接口需要注意的细节
java·开发语言
培风图南以星河揽胜2 小时前
幻想简历!博主本人期望的 AI Agent 全栈简历:Java + Python + Vue3 跨语言实战,代码已开源!
java·人工智能·python
鬼先生_sir2 小时前
Dubbo:从入门到精通
java·dubbo·springcloud
艾莉丝努力练剑2 小时前
【Linux线程】Linux系统多线程(四):线程ID及进程地址空间布局,线程封装
java·linux·运维·服务器·c语言·c++·学习
有味道的男人2 小时前
电商效率翻倍:用 Open Claw 对接 1688 接口,快速实现图片选品 + 货源监控
java·开发语言·数据库
海兰3 小时前
【springboot】gradle快速镜像配置
spring boot·笔记·后端
cheems95273 小时前
[SpringMVC] Spring MVC 留言板开发实战
java·spring·mvc
BioRunYiXue3 小时前
AlphaGenome:DeepMind 新作,基因组学迎来 Alpha 时刻
java·linux·运维·网络·数据库·人工智能·eclipse
武超杰3 小时前
SpringBoot 整合 Spring Security 实现权限控制
spring boot·后端·spring