一文带你深入了解SpringBoot参数配置的详细步骤

 更新时间:2025年12月25日 08:44:48   作者:悟空码字  
SpringBoot应用就像一个超级智能的变形金刚,而参数配置就是你手里的万能遥控器,下面小编就和大家详细介绍一下SpringBoot参数配置的相关应用,感兴趣的小伙伴可以了解下

一、参数配置:程序员的“遥控器”

SpringBoot应用就像一个超级智能的变形金刚,而参数配置就是你手里的万能遥控器!你想让它变成温柔的Hello Kitty模式?调参数!想让它变成狂暴的哥斯拉模式?还是调参数!它就像你女朋友的脾气——全看你如何“配置”!

参数配置的三大门派:

application.properties - 保守派,喜欢用点号分隔

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/my_db

application.yml - 文艺派,喜欢用缩进写诗

server:
  port: 9090
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/my_db

@Value注解 - 直男派,直接注入不啰嗦

@Value("${my.secret.password}")
private String password; // 默认值:123456(才怪!)

二、详细配置步骤:从“Hello World”到“Hello 宇宙”

第1步:基础配置 - 给你的应用穿条裤子

# application.yml - 基础生存包
server:
  port: 8080  # 端口号,建议别用80,免得和隔壁老王冲突
  servlet:
    context-path: /api  # 上下文路径,相当于给你的应用加个姓
  
spring:
  application:
    name: my-awesome-app  # 应用名,起得霸气点准没错
  
  # 数据库配置 - 应用的“肠胃系统”
  datasource:
    url: jdbc:mysql://localhost:3306/my_db?useSSL=false&serverTimezone=UTC
    username: root
    password: IForgetItAgain  # 建议别写这里,用环境变量!
    driver-class-name: com.mysql.cj.jdbc.Driver
    hikari:
      maximum-pool-size: 20  # 连接池大小,人多好办事
      minimum-idle: 5  # 最少闲着的连接,不能太懒
      connection-timeout: 30000  # 连接超时,30秒还连不上就放弃吧

第2步:高级配置 - 给你的应用装上“涡轮增压”

# 继续在application.yml中添加
spring:
  # JPA配置 - 对象和数据库的“翻译官”
  jpa:
    show-sql: true  # 显示SQL,方便偷看它在背后说什么
    hibernate:
      ddl-auto: update  # 自动更新表结构,危险但方便!
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL8Dialect
  
  # Redis配置 - 应用的“短期记忆”
  redis:
    host: localhost
    port: 6379
    timeout: 3000ms  # 超时时间,3秒还想不明白就算了
    lettuce:
      pool:
        max-active: 8  # 最大活跃连接,别太多会打架
  
  # 文件上传配置 - 胃口大小设置
  servlet:
    multipart:
      max-file-size: 10MB  # 单个文件最大,别上传整个电影!
      max-request-size: 100MB  # 总请求大小
  
# 自定义配置 - 你的专属“秘密武器”
myapp:
  config:
    max-retry-count: 3  # 重试次数,事不过三!
    enable-feature-x: true  # 要不要开启某个神秘功能
    api-key: ${API_KEY:default-key}  # 优先用环境变量,没有就用默认值

第3步:Profile配置 - 应用的多重人格

创建不同环境的配置文件,让你的应用学会“变脸”:

application.yml          # 公共配置,大家都得遵守
application-dev.yml     # 开发环境 - 随便折腾版
application-test.yml    # 测试环境 - 装模作样版  
application-prod.yml    # 生产环境 - 正经上班版

application-dev.yml(开发环境)

spring:
  datasource:
    url: jdbc:h2:mem:testdb  # 内存数据库,用完就扔
    username: sa
    password: 
  h2:
    console:
      enabled: true  # 启用H2控制台,可视化偷看数据
      path: /h2-console

logging:
  level:
    com.myapp: DEBUG  # 详细日志,方便甩锅时找证据
    org.springframework.web: DEBUG

application-prod.yml(生产环境)

spring:
  datasource:
    url: jdbc:mysql://prod-db:3306/prod_db?useSSL=true
    username: ${DB_USERNAME}  # 从环境变量读取,安全第一!
    password: ${DB_PASSWORD}
    
logging:
  level:
    com.myapp: WARN  # 生产环境日志别太多,磁盘会哭
    org.springframework: ERROR

management:
  endpoints:
    web:
      exposure:
        include: health,info  # 只暴露必要的监控端点

第4步:配置类 - 程序员最后的倔强

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

@Component
@ConfigurationProperties(prefix = "myapp.config")
@Data  // Lombok注解,自动生成getter/setter
public class MyAppConfig {
    /**
     * 最大重试次数
     * 默认值:防止有人不配置时系统直接崩溃
     */
    private int maxRetryCount = 3;
    
    /**
     * 是否开启神秘功能X
     * 默认值:false(安全第一)
     */
    private boolean enableFeatureX = false;
    
    /**
     * API密钥
     * 建议:写在配置文件里不如写在环境变量里
     * 写在环境变量里不如写在脑子里(但容易忘)
     */
    private String apiKey = "change-me";
    
    /**
     * 服务器列表
     * 示例配置:myapp.config.servers[0]=http://server1
     *         myapp.config.servers[1]=http://server2
     */
    private List<String> servers = new ArrayList<>();
    
    /**
     * 连接超时时间
     * 单位:毫秒
     * 哲学问题:等待多久才算真爱?
     */
    private Duration connectionTimeout = Duration.ofSeconds(30);
}

// 使用配置类
@Service
public class MyService {
    @Autowired
    private MyAppConfig config;
    
    public void doSomething() {
        if (config.isEnableFeatureX()) {
            System.out.println("神秘功能已开启,但没人知道是啥功能");
        }
        
        for (int i = 0; i < config.getMaxRetryCount(); i++) {
            try {
                // 尝试做事
                break;
            } catch (Exception e) {
                System.out.println("第" + (i+1) + "次失败,还剩" + 
                    (config.getMaxRetryCount() - i - 1) + "次机会");
            }
        }
    }
}

第5步:环境变量和命令行参数 - 终极武器

# 运行时指定配置
java -jar myapp.jar --server.port=9090 --spring.profiles.active=prod

# 使用环境变量(Linux/Mac)
export SPRING_DATASOURCE_PASSWORD=SuperSecret123
export MYAPP_CONFIG_APIKEY=MyAwesomeKey
java -jar myapp.jar

# 使用环境变量(Windows PowerShell)
$env:SPRING_DATASOURCE_PASSWORD="SuperSecret123"
java -jar myapp.jar

优先级总结(从高到低):

  • 命令行参数(--开头)
  • 环境变量(SPRING_APPLICATION_JSON)
  • Profile特定配置文件(application-{profile}.yml)
  • 默认配置文件(application.yml)
  • @ConfigurationProperties默认值

三、配置验证 - 给你的配置上个保险

import javax.validation.constraints.*;

@Component
@ConfigurationProperties(prefix = "myapp.config")
@Validated  // 开启验证
@Data
public class ValidatedConfig {
    
    @NotNull(message = "API密钥不能为空,除非你想裸奔")
    @Size(min = 10, max = 100, message = "API密钥长度要在10-100之间")
    private String apiKey;
    
    @Min(value = 1, message = "重试次数至少1次,放弃治疗不可取")
    @Max(value = 10, message = "重试次数最多10次,要学会放弃")
    private int maxRetryCount = 3;
    
    @Pattern(regexp = "^(http|https)://.*", message = "URL必须以http或https开头")
    private String baseUrl;
    
    @AssertTrue(message = "如果开启功能X,必须提供密钥")
    public boolean isFeatureXValid() {
        return !enableFeatureX || (apiKey != null && !apiKey.isEmpty());
    }
}

四、动态刷新配置 - 不用重启的魔法

# 添加Spring Cloud Config依赖后
spring:
  cloud:
    config:
      enabled: true
  config:
    import: optional:configserver:http://localhost:8888  # 配置中心地址

# 在需要刷新的类上添加
@RefreshScope
@Component
public class ConfigRefreshService {
    @Value("${myapp.config.feature-toggle}")
    private String featureToggle;
    // 配置更新后,这个值会自动刷新!
}

五、配置加密 - 让密码不再裸奔

# 使用jasypt加密敏感信息
spring:
  datasource:
    password: ENC(加密后的字符串)  # 看起来像乱码就对了
    
# 启动时提供加密密钥
java -jar myapp.jar --jasypt.encryptor.password=my-secret-key

总结:配置之道,存乎一心

SpringBoot的配置系统就像是一套精密的乐高积木,既有现成的标准件(自动配置),也允许你自由发挥(自定义配置)。掌握配置的艺术,需要记住几个核心原则:

配置的“三大纪律八项注意”

  • 安全第一:密码、密钥永远不要硬编码,用环境变量或配置中心
  • 环境隔离:开发、测试、生产配置严格分开,别在开发环境玩生产数据
  • 适度原则:不要过度配置,SpringBoot的自动配置已经帮你做了80%的工作

配置的“哲学思考”

  • YAML vs Properties:YAML就像写诗,Properties就像写清单,看你喜欢文艺还是务实
  • 配置优先级:记住命令行参数 > 环境变量 > 配置文件,这是权力的游戏!
  • 默认值的重要性:给配置项设置合理的默认值,就像给程序买保险

最后

记住,最好的配置是不需要配置(但这是理想状态)。SpringBoot的“约定优于配置”理念,意味着只要你遵守约定,它就会默默为你做好一切。但当你有特殊需求时,这套强大的配置系统又能给你充分的自由。

现在,拿起你的配置“遥控器”,去打造一个既听话又能干的SpringBoot应用吧!记住:配置不是目的,让应用更好地服务业务才是终极目标。祝你在配置的海洋里乘风破浪,但别淹死在配置文件中!

到此这篇关于一文带你深入了解SpringBoot参数配置的详细步骤的文章就介绍到这了,更多相关SpringBoot参数配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring AOP与代理类的执行顺序级别浅析

    Spring AOP与代理类的执行顺序级别浅析

    这篇文章主要介绍了Spring AOP与代理类的执行顺序级别,关于 Spring AOP和Aspectj的关系,两个都实现了切面编程,Spring AOP更多地是为了Spring框架本身服务的,而Aspectj具有更强大、更完善的切面功能
    2023-03-03
  • Java校验validate介绍和使用实例

    Java校验validate介绍和使用实例

    这篇文章主要介绍了Java校验validate介绍和使用的相关资料,还介绍了如何使用@Valid和@Validated注解进行声明式校验,以及如何处理复杂校验需求,通过自定义校验注解来实现,需要的朋友可以参考下
    2025-01-01
  • SpringSecurity自定义登录成功处理

    SpringSecurity自定义登录成功处理

    这篇文章主要为大家详细介绍了SpringSecurity自定义登录成功处理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • Java GZip 基于磁盘实现压缩和解压的方法

    Java GZip 基于磁盘实现压缩和解压的方法

    这篇文章主要介绍了Java GZip 基于磁盘实现压缩和解压,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考需要的朋友可以参考下
    2020-08-08
  • Spring中的事务管理及实现方式解析

    Spring中的事务管理及实现方式解析

    这篇文章主要介绍了Spring中的事务管理及实现方式解析,Spring事务管理基于底层数据库本身的事务处理机制,数据库事务的基础,是掌握Spring事务管理的基础,这篇总结下Spring事务,需要的朋友可以参考下
    2024-01-01
  • MyBatis-Plus集成Druid环境搭建的详细教程

    MyBatis-Plus集成Druid环境搭建的详细教程

    这篇文章主要介绍了MyBatis-Plus集成Druid环境搭建的详细教程,需要的朋友可以参考下
    2020-08-08
  • Maven分模块开发与依赖管理和聚合和继承及属性深入详细介绍

    Maven分模块开发与依赖管理和聚合和继承及属性深入详细介绍

    依赖管理是项目管理中非常重要的一环。几乎任何项目开发的时候需要都需要使用到库。而这些库很可能又依赖别的库,这样整个项目的依赖形成了一个树状结构,而随着这个依赖的树的延伸和扩大,一系列问题就会随之产生
    2022-10-10
  • Java 中的进制转换与编码机制详解

    Java 中的进制转换与编码机制详解

    在 Java 编程领域,进制转换是一项极为基础且重要的技能,下面给大家介绍Java 中的进制转换与编码机制,感兴趣的朋友一起看看吧
    2025-04-04
  • Springboot启用多个监听端口代码实例

    Springboot启用多个监听端口代码实例

    这篇文章主要介绍了Springboot启用多个监听端口代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Spring Boot教程之必须了解的核心概念

    Spring Boot教程之必须了解的核心概念

    这篇文章主要介绍了Spring Boot系列教程中的关于学习Spring Boot必须了解的核心概念的相关资料,需要的朋友可以参考下
    2022-08-08

最新评论