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博客助手

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

相关推荐
奋进的芋圆11 分钟前
Spring Boot 实现三模安全登录:微信扫码 + 手机号验证码 + 邮箱验证码
spring boot·redis·微信
怪兽源码21 分钟前
基于SpringBoot的选课调查系统
java·spring boot·后端·选课调查系统
恒悦sunsite28 分钟前
Redis之配置只读账号
java·redis·bootstrap
梦里小白龙33 分钟前
java 通过Minio上传文件
java·开发语言
人道领域34 分钟前
javaWeb从入门到进阶(SpringBoot事务管理及AOP)
java·数据库·mysql
csdn_aspnet1 小时前
ASP.NET Core 中的依赖注入
后端·asp.net·di·.net core
sheji52611 小时前
JSP基于信息安全的读书网站79f9s--程序+源码+数据库+调试部署+开发环境
java·开发语言·数据库·算法
毕设源码-邱学长1 小时前
【开题答辩全过程】以 基于Java Web的电子商务网站的用户行为分析与个性化推荐系统为例,包含答辩的问题和答案
java·开发语言
摇滚侠1 小时前
Java项目教程《尚庭公寓》java项目从开发到部署,技术储备,MybatisPlus、MybatisX
java·开发语言
€8111 小时前
Java入门级教程24——Vert.x的学习
java·开发语言·学习·thymeleaf·数据库操作·vert.x的路由处理机制·datadex实战