SpringBoot参数配置你真的用对了吗?端口、密码和多环境问题解析

内容分享1小时前发布
0 0 0

前几天,我上线一个新服务,结果遇到三个问题:

  1. 1. 明明在 application.yml 改了端口,重启后访问还是旧端口;
  2. 2. 数据库密码写在文件里,总感觉不安全;
  3. 3. 开发环境和生产环境的配置切换老是出错。

摸索了一圈,发现问题都出在配置没搞清楚。这里给大家总结一套可落地的方法。


一、SpringBoot 的两个核心配置文件

Spring Boot 有两种配置文件格式:

1. properties格式(简单直接)

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456
logging.level.com.example=debug

2. yml格式(推荐,更清晰)

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

logging:
  level:
    com.example: debug
    org.springframework: info
  file:
    name: app.log

Tip:两个文件功能一样,但 yml 更直观,层级清晰。


二、配置文件放哪里?

Spring Boot 会按优先级顺序查找配置文件,先找到的生效

  1. 1. 项目根目录 /config
  2. 2. 项目根目录
  3. 3. classpath 下 /config
  4. 4. classpath 根目录(最常用)
项目结构示例:
src/main/resources/
├── application.yml        ← 最常用
└── config/
    └── application.yml    ← 优先级更高

三、代码里怎么读取配置?

方法1:@Value(单值)

@Value("${server.port}")
private int port;

方法2:@ConfigurationProperties(一组配置)

myapp:
  name: 我的应用
  version: 1.0.0
  user:
    default-role: user
    allow-register: true
@Component
@ConfigurationProperties(prefix = "myapp")
@Data
public class AppConfig {
    private String name;
    private String version;
    private User user;
    
    @Data
    public static class User {
        private String defaultRole;
        private boolean allowRegister;
    }
}

四、多环境配置(开发 / 测试 / 生产)

前几天的问题,99% 都是由于环境没分清
Spring Boot 提供了多环境配置,推荐做法:

resources/
├── application.yml        # 通用配置
├── application-dev.yml    # 开发环境
├── application-test.yml   # 测试环境
└── application-prod.yml   # 生产环境

切换环境方式

  1. 1. 命令行(最常用)
java -jar app.jar --spring.profiles.active=prod
  1. 2. IDEA VM options
-Dspring.profiles.active=dev
  1. 3. 系统环境变量
export SPRING_PROFILES_ACTIVE=prod

注意:生产环境的数据库密码不要写死在文件里,用环境变量最安全:

spring.datasource.password=${DB_PASSWORD}

五、配置优先级(必定要记住!)

  1. 1. 命令行参数(最高)
  2. 2. 系统环境变量
  3. 3. 配置文件
  4. 4. 代码默认值(最低)

所以你改了 application.yml 却没生效,很可能被命令行或环境变量覆盖了。


六、快速上手模板

server:
  port: 8080
  servlet:
    context-path: /api

spring:
  application:
    name: 我的应用
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: ${DB_PASSWORD:123456}
    driver-class-name: com.mysql.cj.jdbc.Driver

启动命令示例:

export DB_PASSWORD=yourpassword
java -jar app.jar --spring.profiles.active=prod

总结

  • 环境分离:开发 / 测试 / 生产独立配置
  • 读取配置:@Value 或 @ConfigurationProperties
  • 密码安全:不要写死,使用环境变量
  • 优先级:命令行 > 环境变量 > 配置文件 > 代码默认值

来源:
https://mp.weixin.qq.com/s/j9sHLU2cmcl7gbPAlY0Hkg

© 版权声明

相关文章

暂无评论

none
暂无评论...