一文带你深入了解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参数配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Apache Commons fileUpload实现文件上传之一

    Apache Commons fileUpload实现文件上传之一

    这篇文章主要介绍了Apache Commons fileUpload实现文件上传之一的相关资料,需要的朋友可以参考下
    2016-03-03
  • SpringBoot实现接口数据加解密的三种实战方案

    SpringBoot实现接口数据加解密的三种实战方案

    在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,Spring Boot 提供了多种优雅的加解密实现方案,本文将从原理到实战,带你掌握三种主流实现方式,需要的朋友可以参考下
    2025-05-05
  • java实现电话本管理系统

    java实现电话本管理系统

    这篇文章主要为大家详细介绍了JAVA实现电话本管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 日历显示读出输入的年月的java代码

    日历显示读出输入的年月的java代码

    这篇文章主要介绍了日历显示读出输入的年月的java代码,有需要的朋友可以参考一下
    2013-12-12
  • SpringBoot配置Spring Security的实现示例

    SpringBoot配置Spring Security的实现示例

    本文主要介绍了SpringBoot配置Spring Security的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • javamail 发送邮件的实例代码分享

    javamail 发送邮件的实例代码分享

    今天学习了一下JavaMail,javamail发送邮件确实是一个比较麻烦的问题。为了以后使用方便,自己写了段代码,打成jar包,以方便以后使用
    2013-08-08
  • Java泛型的使用限制实例分析

    Java泛型的使用限制实例分析

    这篇文章主要介绍了Java泛型的使用限制,结合实例形式分析了不能使用java泛型的情况以及泛型使用的相关注意事项,需要的朋友可以参考下
    2019-08-08
  • Java利用FTPClient实现文件上传和下载的实践指南

    Java利用FTPClient实现文件上传和下载的实践指南

    本文介绍如何使用Java中的FTPClient库来执行文件的上传和下载操作,首先,讲解了FTPClient的基本用法,包括连接FTP服务器和登录验证,然后,详细说明了如何使用 storeFile() 和 retrieveFile() 方法分别实现文件上传和下载,需要的朋友可以参考下
    2025-05-05
  • javaWEB实现相册管理的简单功能

    javaWEB实现相册管理的简单功能

    这篇文章主要介绍了javaWEB实现相册管理的简单功能,包括图片的上传、统一浏览、单个下载、单个删除,还有一个功能只能删除自己上传的文件,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • 关于Spring统一异常处理及说明

    关于Spring统一异常处理及说明

    这篇文章主要介绍了关于Spring统一异常处理及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论