当前位置: 首页 > news >正文

config是干什么的?

在 Java 后端开发中,“config”(通常指配置相关的代码、文件或模块)的核心作用是集中管理项目的配置信息,避免将固定值硬编码到业务代码里,让配置更灵活、可维护。

简单说,它就像项目的 “控制面板”—— 比如数据库的连接地址、端口号,接口调用的密钥,日志的输出级别,甚至是不同环境(开发 / 测试 / 生产)的参数差异,都可以通过 config 统一管理,不用改代码就能调整项目行为。

一、为什么需要 config?(解决的核心问题)

如果没有 config,你可能会在代码里写死这样的内容:

// 硬编码的问题:改数据库地址要改代码、重新部署!
String dbUrl = "jdbc:mysql://localhost:3306/meal_db";
String dbUser = "root";
String dbPwd = "123456";

二、Java 后端中 config 的常见形式

根据项目框架(如 Spring Boot、Spring Cloud),config 主要有以下两种形态:

1. 配置文件(最基础的 config)

是后端项目最常用的配置载体,直接存储键值对或结构化配置,常见格式有:

  • .properties(简单键值对,Spring 早期常用):
    # 数据库配置
    spring.datasource.url=jdbc:mysql://localhost:3306/meal_db
    spring.datasource.username=root
    spring.datasource.password=123456
    # 服务器端口
    server.port=8080

    .yml/.yaml(结构化更强,Spring Boot 主流,缩进敏感):

    spring:datasource:url: jdbc:mysql://localhost:3306/meal_dbusername: rootpassword: 123456
    server:port: 8080
  • .json(较少用于 Spring 项目,更多在中间件配置或自定义场景)
2. 配置类(代码层面的 config,配合框架使用)

在 Spring Boot 中,除了配置文件,还会用标注 @Configuration 的 Java 类来定义 “动态配置”—— 比如数据库连接池、线程池、拦截器、第三方接口客户端(如 Redis、OSS)的初始化逻辑,本质是将 “配置” 转化为可被 Spring 管理的 Bean。

举个例子(数据库相关的配置类)

// 标注 @Configuration,告诉 Spring 这是一个配置类
@Configuration
public class DataSourceConfig {// 从配置文件中读取 db.url、db.username 等参数(@Value 注解)@Value("${spring.datasource.url}")private String dbUrl;@Value("${spring.datasource.username}")private String dbUser;@Value("${spring.datasource.password}")private String dbPwd;// 定义一个数据库连接池 Bean,供项目全局使用@Beanpublic DataSource dataSource() {HikariConfig config = new HikariConfig();config.setJdbcUrl(dbUrl); // 使用配置文件中的参数config.setUsername(dbUser);config.setPassword(dbPwd);return new HikariDataSource(config);}
}

三、config 的核心能力(后端常用场景)

  1. 多环境切换开发、测试、生产环境的配置不同(比如开发用本地数据库,生产用云数据库),通过 config 可以快速切换:

    新建不同环境的配置文件:application-dev.yml(开发)、application-prod.yml(生产)
    在主配置文件 application.yml 中指定激活的环境:
    spring:profiles:active: dev # 激活开发环境,上线时改为 prod 即可

  2. 动态配置刷新传统配置改了要重启项目,而通过 Spring Cloud Config、Nacos、Apollo 等配置中心,可以实现 “改配置不重启项目”—— 比如线上需要调整接口超时时间,直接在配置中心修改,项目会自动感知并生效

  3. 敏感配置加密数据库密码、接口密钥等敏感信息,不能明文存放在配置文件里。通过 config 配合加密工具(如 Jasypt),可以将敏感信息加密存储,项目启动时自动解密:

    # 加密后的密码(不是明文 123456)
    spring.datasource.password=ENC(abc123xyz...)

四、具体例子

/*** Web配置类,注册拦截器*/
@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate JwtInterceptor jwtInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(jwtInterceptor).addPathPatterns("/api/**")  // 拦截所有API请求.excludePathPatterns("/api/auth/**");  // 排除认证相关接口}
}

这段代码是一个 Spring Boot 中的 Web 配置类,主要作用是注册和配置拦截器(这里是 JWT 拦截器),用于对接口请求进行统一处理(比如身份验证)。

我们来逐部分解析:

1. 类定义与注解

@Configuration
public class WebConfig implements WebMvcConfigurer {
  • @Configuration:标注这是一个配置类,Spring 会自动扫描并加载它,相当于传统的 XML 配置文件。
  • implements WebMvcConfigurer:实现 Spring 的 WebMvcConfigurer 接口,该接口提供了一系列用于配置 Spring MVC 的方法(比如拦截器、视图解析器、跨域等),这里主要用到它的拦截器配置能力。

2. 注入 JWT 拦截器

@Autowired
private JwtInterceptor jwtInterceptor;
  • @Autowired:自动注入一个 JwtInterceptor 实例(这是一个自定义的拦截器,用于处理 JWT 令牌验证)。
  • 拦截器(Interceptor)是 Spring MVC 中的一种组件,能在请求到达控制器(Controller)之前、之后或视图渲染后进行一些通用处理(比如登录验证、日志记录)。

3. 配置拦截器规则

@Override
public void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(jwtInterceptor).addPathPatterns("/api/**")  // 拦截所有API请求.excludePathPatterns("/api/auth/**");  // 排除认证相关接口
}

这是核心方法,用于注册拦截器并定义拦截规则:

  • registry.addInterceptor(jwtInterceptor):将 jwtInterceptor 拦截器注册到 Spring 容器中,使其生效。
  • .addPathPatterns("/api/**"):指定需要被拦截的请求路径。/api/** 是通配符,表示所有以 /api/ 开头的请求(比如 /api/user/get/api/order/add 等)都会被这个拦截器处理。
  • .excludePathPatterns("/api/auth/**"):指定需要排除拦截的请求路径。/api/auth/** 表示所有以 /api/auth/ 开头的请求(比如登录 /api/auth/login、注册 /api/auth/register)不会被拦截 —— 因为用户登录前还没有 JWT 令牌,不能拦截这些接口。

整体作用

这个配置类的最终效果是:

  • 所有 /api/ 开头的接口请求,在到达 Controller 之前,都会先经过 JwtInterceptor 拦截器的处理(比如验证请求头中是否携带有效的 JWT 令牌,验证用户身份)。
  • 但登录、注册等 /api/auth/ 开头的接口例外,不会被拦截,允许匿名访问。

这是后端项目中实现接口权限控制的典型方式,通过拦截器统一验证用户身份,避免在每个 Controller 方法中重复编写验证逻辑,既规范又便于维护。

http://www.dtcms.com/a/446741.html

相关文章:

  • 哈希扩展学习
  • 回溯算法学习笔记(《代码随想录》)
  • 深圳外贸网站推广公司站酷网下载
  • 第十八周周报
  • 漳州企业网站建设制作购物型网站模板
  • 惠州网站建设php网站开发试题
  • MySQL复制拓扑管理核心知识点总结
  • 【含文档+PPT+源码】基于Java的宠物医院管理系统的设计与实现
  • 关于网站开发的技术博客小程序代理加盟前景
  • 松江网站开发培训班网站中英文域名
  • 4-8〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸命令注入漏洞
  • 【Linux网络】IP协议
  • 做网站流行的网站做流量推广的方式
  • 网站如何做淘宝客网站建设简介是什么意思
  • 家具网站 模板禅城网站建设
  • 子目录创建网站网站建设钅金手指排名十五
  • 网站建设项目需求分析深圳宣传片制作排名前十名
  • 计算机网络(四):数据链路层(功能概述、组帧/封装成帧、差错控制、流量控制与可靠传输机制)
  • C++ 面试总结
  • Netty面试重点-1
  • php 8.4.8 更新日志
  • 高明网站设计制作建造师
  • 网站建设哪家公司好一点59做网站
  • JavaWeb基础,Spring框架核心:IOC与AOP解析
  • P13978题解
  • Easyx使用(番外篇)
  • 【LaTeX】 10 LaTeX 数学公式笔记
  • 早熟收敛(Premature Convergence):遗传算法中的局部最优陷阱
  • 设计网站平台风格网站扫码怎么做的
  • 【Redis】免费Redis图形化客户端全攻略