SpringBoot之多环境配置全解析

SpringBoot之多环境配置全解析

    • 一、多环境配置的核心思路
    • 二、3种配置文件格式详解
      • 2.1 properties格式(传统格式)
        • 1. 基础配置文件(application.properties)
        • 2. 环境专属配置文件
      • 2.2 yaml/yml格式(推荐)
        • 1. 单文件多环境配置(推荐)
        • 2. 多文件yaml配置(类似properties)
      • 2.3 三种格式的对比与选择
    • 三、多环境配置的数据读取方式
      • 3.1 @Value注解(简单值读取)
      • 3.2 Environment对象(灵活读取)
      • 3.3 @ConfigurationProperties(对象封装,推荐)
        • 步骤1:定义配置类并绑定配置
        • 步骤2:在配置文件中添加对应配置
        • 步骤3:使用配置对象
    • 四、自定义对象封装(复杂配置示例)
      • 示例:封装支付接口配置
        • 1. 配置文件(application.yml)
        • 2. 定义配置类
        • 3. 使用自定义配置
    • 五、多环境启动方式
      • 5.1 配置文件中指定(默认方式)
      • 5.2 命令行参数指定(优先级最高)
      • 5.3 IDE中指定(开发调试)
        • IDEA配置步骤:
      • 5.4 环境变量指定(服务器部署)
    • 六、Maven多环境控制(兼容联动)
      • 6.1 配置pom.xml
      • 6.2 修改配置文件(使用Maven变量)
      • 6.3 打包与启动
    • 七、常见问题与避坑指南
      • 7.1 配置文件优先级问题
      • 7.2 配置冲突与覆盖规则
      • 7.3 敏感信息泄露问题
        • Jasypt使用示例:
      • 7.4 多环境下的配置激活失败
      • 7.5 复杂配置的校验问题
      • 总结

一个SpringBoot项目在实际开发中通常需要在开发环境测试环境生产环境中切换运行,而不同环境的配置(如数据库连接、端口号、日志级别)往往不同,手动修改配置不仅繁琐,还容易出错,而SpringBoot提供了灵活的多环境配置机制。

一、多环境配置的核心思路

多环境配置的核心是“环境隔离”:将不同环境的配置分离到独立文件中,通过指定“环境标识”自动加载对应配置。

核心优势

  • 避免手动修改配置,减少人为错误;
  • 配置与环境强关联,清晰易维护;
  • 支持灵活切换环境,适应不同阶段需求。

二、3种配置文件格式详解

SpringBoot支持propertiesyamlyml三种配置文件格式,其中yaml/yml以简洁的缩进语法更受欢迎。

2.1 properties格式(传统格式)

properties文件采用key=value格式,多环境配置通过“文件名+环境标识”区分。

1. 基础配置文件(application.properties)

存放公共配置(所有环境共享的配置):

# 公共配置(所有环境共享)
server.port=8080 # 默认端口(可被环境配置覆盖)
spring.application.name=multi-env-demo
2. 环境专属配置文件
  • 开发环境:application-dev.properties

    # 开发环境配置
    server.port=8081
    spring.datasource.url=jdbc:mysql://localhost:3306/dev_db
    spring.datasource.username=dev_user
    spring.datasource.password=dev_pwd
    
  • 测试环境:application-test.properties

    # 测试环境配置
    server.port=8082
    spring.datasource.url=jdbc:mysql://test-server:3306/test_db
    spring.datasource.username=test_user
    spring.datasource.password=test_pwd
    
  • 生产环境:application-prod.properties

    # 生产环境配置
    server.port=80
    spring.datasource.url=jdbc:mysql://prod-server:3306/prod_db
    spring.datasource.username=prod_user
    spring.datasource.password=prod_pwd
    

2.2 yaml/yml格式(推荐)

yaml和yml是同一种格式(后缀不同),采用缩进+键值对语法,结构清晰,支持列表和嵌套。

1. 单文件多环境配置(推荐)

yaml支持在一个文件中通过spring.profiles区分环境,无需创建多个文件:

# application.yml
# 公共配置
spring:application:name: multi-env-demoprofiles:active: dev # 默认激活开发环境# 开发环境(通过---分隔)
---
spring:profiles: dev
server:port: 8081
spring:datasource:url: jdbc:mysql://localhost:3306/dev_dbusername: dev_userpassword: dev_pwd# 测试环境
---
spring:profiles: test
server:port: 8082
spring:datasource:url: jdbc:mysql://test-server:3306/test_dbusername: test_userpassword: test_pwd# 生产环境
---
spring:profiles: prod
server:port: 80
spring:datasource:url: jdbc:mysql://prod-server:3306/prod_dbusername: prod_userpassword: prod_pwd

语法说明

  • ---分隔不同环境的配置块;
  • spring.profiles: dev指定环境标识(与properties的-dev对应);
  • spring.profiles.active: dev指定默认激活的环境。
2. 多文件yaml配置(类似properties)

也可将不同环境配置拆分到独立文件:

  • 公共配置:application.yml
  • 开发环境:application-dev.yml
  • 测试环境:application-test.yml
  • 生产环境:application-prod.yml

2.3 三种格式的对比与选择

格式语法特点优势劣势适用场景
propertieskey=value,无缩进兼容性好,适合简单配置冗余代码多,不支持嵌套传统项目、简单配置
yaml/yml缩进语法,支持嵌套简洁直观,支持复杂结构对缩进敏感(空格错误易出错)推荐使用,尤其是复杂配置

建议:优先使用单文件yaml配置,减少文件数量,提高维护效率。

三、多环境配置的数据读取方式

SpringBoot提供了多种方式读取配置文件中的数据,满足不同场景需求。

3.1 @Value注解(简单值读取)

@Value("${key}")用于读取简单类型的配置(字符串、数字等),直接注入到变量中。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class EnvController {// 读取端口号@Value("${server.port}")private int port;// 读取数据库URL(支持默认值:${key:默认值})@Value("${spring.datasource.url:jdbc:mysql://localhost:3306/default_db}")private String dbUrl;@GetMapping("/env")public String getEnvInfo() {return "当前端口:" + port + ",数据库地址:" + dbUrl;}
}

特点

  • 适用于读取零散的简单配置;
  • 支持默认值(${key:默认值}),当配置不存在时使用默认值;
  • 不适合读取复杂对象(如嵌套结构)。

3.2 Environment对象(灵活读取)

Environment是Spring的核心接口,可通过getProperty("key")方法动态读取配置,支持默认值和类型转换。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class EnvController {@Autowiredprivate Environment env;@GetMapping("/env2")public String getEnvInfo2() {// 读取字符串String username = env.getProperty("spring.datasource.username");// 读取整数(指定类型)Integer port = env.getProperty("server.port", Integer.class);// 读取并指定默认值String driver = env.getProperty("spring.datasource.driver-class-name", "com.mysql.cj.jdbc.Driver");return "用户名:" + username + ",端口:" + port + ",驱动:" + driver;}
}

特点

  • 适合动态读取配置(如根据条件读取不同key);
  • 支持类型转换(无需手动强转);
  • 需注入Environment对象,稍显繁琐。

3.3 @ConfigurationProperties(对象封装,推荐)

@ConfigurationProperties用于将配置文件中的一组相关配置封装为Java对象,适合读取复杂配置(如数据库连接信息、自定义配置)。

步骤1:定义配置类并绑定配置
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;// 绑定前缀为"spring.datasource"的配置
@ConfigurationProperties(prefix = "spring.datasource")
@Component // 注册为Spring组件
public class DataSourceProperties {private String url;private String username;private String password;private String driverClassName;// 必须提供getter和setter(Spring通过setter注入)public String getUrl() { return url; }public void setUrl(String url) { this.url = url; }public String getUsername() { return username; }public void setUsername(String username) { this.username = username; }public String getPassword() { return password; }public void setPassword(String password) { this.password = password; }public String getDriverClassName() { return driverClassName; }public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; }
}
步骤2:在配置文件中添加对应配置
# application.yml(开发环境)
spring:datasource:url: jdbc:mysql://localhost:3306/dev_dbusername: dev_userpassword: dev_pwddriver-class-name: com.mysql.cj.jdbc.Driver
步骤3:使用配置对象
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class EnvController {@Autowiredprivate DataSourceProperties dataSourceProps;@GetMapping("/db")public String getDbInfo() {return "数据库配置:" + "URL=" + dataSourceProps.getUrl() + ",用户名=" + dataSourceProps.getUsername();}
}

特点

  • 适合读取一组相关配置(如数据库、缓存、第三方API等);
  • 支持嵌套结构(如spring.redis.hostspring.redis.port可封装为RedisProperties);
  • 配合@Validated可实现配置校验(如非空检查、格式校验)。

四、自定义对象封装(复杂配置示例)

对于自定义的复杂配置(如支付接口参数、缓存策略),@ConfigurationProperties同样适用。

示例:封装支付接口配置

1. 配置文件(application.yml)
# 自定义支付配置
pay:api:url: https://pay-dev-api.comtimeout: 3000 # 超时时间(毫秒)merchant:id: dev_merchant_123key: dev_pay_keysupported-types: # 支持的支付方式(列表)- WECHAT- ALIPAY
2. 定义配置类
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;@ConfigurationProperties(prefix = "pay")
@Component
public class PayProperties {private Api api;private Merchant merchant;private List<String> supportedTypes;// 内部类:API配置public static class Api {private String url;private int timeout;// getter和setter}// 内部类:商户配置public static class Merchant {private String id;private String key;// getter和setter}// 外部类的getter和setterpublic Api getApi() { return api; }public void setApi(Api api) { this.api = api; }public Merchant getMerchant() { return merchant; }public void setMerchant(Merchant merchant) { this.merchant = merchant; }public List<String> getSupportedTypes() { return supportedTypes; }public void setSupportedTypes(List<String> supportedTypes) { this.supportedTypes = supportedTypes; }
}
3. 使用自定义配置
@Autowired
private PayProperties payProps;@GetMapping("/pay")
public String getPayInfo() {return "支付API:" + payProps.getApi().getUrl() + ",支持方式:" + payProps.getSupportedTypes();
}

五、多环境启动方式

SpringBoot提供了多种方式指定激活的环境,灵活满足不同场景(开发、测试、部署)。

5.1 配置文件中指定(默认方式)

application.ymlapplication.properties中通过spring.profiles.active指定:

# application.yml
spring:profiles:active: test # 默认激活测试环境
# application.properties
spring.profiles.active=prod # 默认激活生产环境

5.2 命令行参数指定(优先级最高)

启动jar包时通过--spring.profiles.active参数指定环境,优先级高于配置文件:

# 启动开发环境
java -jar multi-env-demo.jar --spring.profiles.active=dev# 启动生产环境(指定端口)
java -jar multi-env-demo.jar --spring.profiles.active=prod --server.port=8080

优势:部署时无需修改配置文件,直接通过命令切换环境。

5.3 IDE中指定(开发调试)

在IDEA/Eclipse中配置启动参数,方便开发调试:

IDEA配置步骤:
  1. 打开Run/Debug Configurations;
  2. 在Program arguments中添加:--spring.profiles.active=dev
  3. 启动项目,自动加载开发环境配置。

5.4 环境变量指定(服务器部署)

在服务器中通过环境变量SPRING_PROFILES_ACTIVE指定,适合容器化部署(如Docker、K8s):

# Linux环境设置环境变量
export SPRING_PROFILES_ACTIVE=prod# 启动项目(自动读取环境变量)
java -jar multi-env-demo.jar

Docker示例

FROM openjdk:8-jdk-slim
ENV SPRING_PROFILES_ACTIVE=prod # 设置环境变量
COPY target/multi-env-demo.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

六、Maven多环境控制(兼容联动)

通过Maven的profiles配置,可在打包时自动指定SpringBoot的激活环境,实现“一次打包,多环境部署”。

6.1 配置pom.xml

pom.xml中定义Maven环境,并通过resource filtering替换配置文件中的占位符:

<project><!-- ... 其他配置 ... --><profiles><!-- 开发环境 --><profile><id>dev</id><activation><activeByDefault>true</activeByDefault> <!-- 默认激活开发环境 --></activation><properties><spring.profile.active>dev</spring.profile.active> <!-- 对应Spring环境标识 --></properties></profile><!-- 测试环境 --><profile><id>test</id><properties><spring.profile.active>test</spring.profile.active></properties></profile><!-- 生产环境 --><profile><id>prod</id><properties><spring.profile.active>prod</spring.profile.active></properties></profile></profiles><build><resources><resource><directory>src/main/resources</directory><!-- 开启资源过滤:替换配置文件中的${变量} --><filtering>true</filtering></resource></resources></build>
</project>

6.2 修改配置文件(使用Maven变量)

application.yml中用@spring.profile.active@引用Maven变量:

# application.yml
spring:profiles:active: @spring.profile.active@ # 由Maven打包时替换

6.3 打包与启动

通过Maven命令指定环境打包,生成的jar包会自动激活对应环境:

# 打包开发环境(默认)
mvn clean package# 打包测试环境
mvn clean package -P test# 打包生产环境
mvn clean package -P prod

启动jar包时无需再指定环境(已由Maven固化到配置中):

java -jar target/multi-env-demo.jar # 自动使用打包时指定的环境

优势

  • 打包时绑定环境,避免部署时误操作;
  • 适合CI/CD流程(如Jenkins根据分支自动选择环境打包)。

七、常见问题与避坑指南

7.1 配置文件优先级问题

SpringBoot配置文件的加载顺序(优先级从高到低):

  1. 命令行参数(--spring.profiles.active=dev);
  2. 环境变量(SPRING_PROFILES_ACTIVE=dev);
  3. 系统属性(如-Dspring.profiles.active=dev);
  4. application-{profile}.yml(环境专属文件);
  5. application.yml(公共配置文件);
  6. 类路径下的config目录(src/main/resources/config/)中的配置文件;
  7. 类路径根目录(src/main/resources/)中的配置文件。

避坑点:若同一配置在多个地方定义,高优先级配置会覆盖低优先级配置。例如,命令行指定的server.port=8888会覆盖配置文件中的server.port=8080

建议:开发环境用配置文件默认值,测试/生产环境通过命令行或环境变量指定,避免配置文件冲突。

7.2 配置冲突与覆盖规则

当公共配置与环境专属配置存在相同key时,环境专属配置会覆盖公共配置

示例:

# 公共配置(application.yml)
server:port: 8080
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driver# 开发环境配置(application-dev.yml)
server:port: 8081 # 覆盖公共配置的8080
spring:datasource:url: jdbc:mysql://localhost:3306/dev_db # 新增配置

结果:开发环境最终端口为8081,数据库驱动沿用公共配置的com.mysql.cj.jdbc.Driver

注意:若同一环境配置在多个文件中定义(如application-dev.ymlapplication-dev.properties),properties文件优先级高于yaml文件(因文件格式优先级)。

7.3 敏感信息泄露问题

配置文件中的数据库密码、API密钥等敏感信息直接明文存储,存在安全风险。

解决方案

  1. Spring Cloud Config/Spring Cloud Vault:集中管理配置,加密存储敏感信息(适合微服务架构);
  2. Jasypt加密:通过jasypt对敏感信息加密,项目启动时解密。
Jasypt使用示例:
  1. 引入依赖:
<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.4</version>
</dependency>
  1. 配置加密密钥(生产环境通过命令行传入,避免硬编码):
jasypt:encryptor:password: ${JASYPT_PASSWORD:dev_key} # 开发环境默认密钥,生产环境从环境变量获取
  1. 生成加密后的密码(通过代码或命令行):
import org.jasypt.encryption.StringEncryptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;@Component
public class EncryptRunner implements CommandLineRunner {@Autowiredprivate StringEncryptor encryptor;@Overridepublic void run(String... args) throws Exception {String password = "prod_pwd";String encrypted = encryptor.encrypt(password);System.out.println("加密后:" + encrypted); // 输出如:EbfYkitulv73I2p0mXI50Q==}
}
  1. 在配置文件中使用加密值(用ENC()包裹):
spring:datasource:password: ENC(EbfYkitulv73I2p0mXI50Q==)

7.4 多环境下的配置激活失败

常见原因

  1. 环境标识拼写错误(如spring.profiles.active: deve,正确应为dev);
  2. 配置文件命名错误(如application-devl.yml,正确应为application-dev.yml);
  3. 单文件yaml中未用---分隔环境块,导致配置不生效;
  4. Maven过滤未开启,@spring.profile.active@未被正确替换。

排查步骤

  1. 检查启动日志,搜索The following profiles are active,确认激活的环境是否正确;
  2. 检查配置文件路径和命名,确保与环境标识匹配;
  3. 若使用Maven多环境,打包后解压jar包,查看BOOT-INF/classes/application.ymlspring.profiles.active是否被正确替换。

7.5 复杂配置的校验问题

使用@ConfigurationProperties封装配置时,若配置缺失或格式错误,可能导致业务异常。

解决方案:通过@Validated和JSR-303注解(如@NotNull@Min)进行配置校验。

示例:

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;@ConfigurationProperties(prefix = "pay.api")
@Component
@Validated // 开启校验
public class PayApiProperties {@NotEmpty(message = "支付API地址不能为空")private String url;@Min(value = 1000, message = "超时时间不能小于1000毫秒")private int timeout;// getter和setter
}

若配置缺失或不符合规则,项目启动时会直接报错,避免运行时异常:

Binding to target org.springframework.boot.context.properties.bind.BindException: 
Failed to bind properties under 'pay.api' to com.example.config.PayApiProperties failed:Property: pay.api.urlValue: nullReason: 支付API地址不能为空

总结

SpringBoot多环境配置的核心是“隔离与灵活切换”,结合实际开发经验,最佳实践如下:

  1. 配置文件格式:优先使用单文件yaml配置,通过---分隔环境,减少文件数量;
  2. 配置读取:简单配置用@Value,复杂配置用@ConfigurationProperties(配合校验);
  3. 环境激活:开发环境用配置文件默认值,测试/生产环境通过命令行参数环境变量指定,避免修改配置文件;
  4. 敏感信息:禁止明文存储,使用Jasypt加密或配置中心管理;
  5. Maven联动:通过Maven profiles实现“打包绑定环境”,适合CI/CD自动化部署;
  6. 配置校验:对核心配置添加校验规则,确保启动阶段暴露问题。

若这篇内容帮到你,动动手指支持下!关注不迷路,干货持续输出!
ヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノヾ(´∀ ˋ)ノ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91142.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91142.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uvm-tlm-nonblocking-get-port

前文展示了使用本质为阻塞性质的uvm_blocking_get_port TLM端口的示例&#xff0c;其中接收方会停滞等待发送方完成get任务。类似地&#xff0c;UVM TLM还提供非阻塞类型的uvm_nonblocking_get_port&#xff0c;发送方需通过try_get来检测get是否成功&#xff0c;或通过can_get…

【NCS随笔】如何在hello_world添加蓝牙功能(一)

如何在hello_world添加蓝牙功能&#xff08;一&#xff09;环境准备 硬件&#xff1a;nRF54L15DK 软件版本&#xff1a;NCS3.0.2 例程&#xff1a;hello_world 宏的配置 # Config loggerCONFIG_LOGyCONFIG_USE_SEGGER_RTTyCONFIG_LOG_BACKEND_RTTyCONFIG_LOG_BACKEND_UARTnONFI…

机器学习——KNN实现手写数字识别:基于 OpenCV 和 scikit-learn 的实战教学 (超级超级超级简单)

用KNN实现手写数字识别&#xff1a;基于 OpenCV 和 scikit-learn 的实战教学在这篇文章中&#xff0c;我们将使用 KNN&#xff08;K-Nearest Neighbors&#xff09;算法对手写数字进行分类识别。我们会用 OpenCV 读取图像并预处理数据&#xff0c;用 scikit-learn 构建并训练模…

【Git】分支

文章目录理解分支创建分支切换分支合并分支删除分支合并冲突分支管理策略分支策略bug 分支删除临时分支小结理解分支 本章开始介绍 Git 的杀手级功能之一&#xff08;注意是之一&#xff0c;也就是后面还有之二&#xff0c;之三……&#xff09;&#xff1a;分支。分支就是科幻…

【32】C# WinForm入门到精通 ——打开文件OpenFileDialog 【属性、方法、事件、实例、源码】

WinForm 是 Windows Form 的简称&#xff0c;是基于 .NET Framework 平台的客户端&#xff08;PC软件&#xff09;开发技术&#xff0c;是 C# 语言中的一个重要应用。 .NET 提供了大量 Windows 风格的控件和事件&#xff0c;可以直接拿来使用。 本专栏内容是按照标题序号逐渐…

Wan2.2开源第1天:动态灯光功能开启创意氛围新境界

在开源软件蓬勃发展的今天&#xff0c;每一次新版本的发布都如同在创意的星空中点亮了一颗璀璨的新星。今天&#xff0c;&#xff08;通义万相国际版wan&#xff09;Wan2.2正式开源&#xff0c;它带着令人眼前一亮的动态灯光功能惊艳登场&#xff0c;为所有追求创意与氛围营造的…

Excel制作滑珠图、哑铃图

Excel制作滑珠图、哑铃图效果展示在较长时间周期内&#xff0c;很多参数都是在一定范围内浮动的&#xff0c;并不是一成不变的&#xff0c;为了直观表达各类别的浮动范围&#xff0c;使用“滑珠图”就是一个不错的选择&#xff0c;当滑珠图两侧均有珠子的时候&#xff0c;又称为…

Day07 JDBC+MyBatis

1.JDBC入门程序2.JDBC执行DQL语句3.JDBC预编译SQL 防止SQL注入随便输入用户名&#xff0c;密码为or1 1,sql注入4.Mybatis入门 Mapper 持久层XxxMapper替代Dao4.1调用接口的findAll()方法时自动执行上方的SQL语句&#xff0c;并将SQL查询的语句自动封装到返回值中5.Mybatis辅助…

OSS-服务端签名Web端直传+STS获取临时凭证+POST签名v4版本开发过程中的细节

这里写自定义目录标题配置OSS服务端代码初始化STS Client获取STS临时凭证创建policy计算SigningKeyOSSUtil.javaSTSPolicyDTO.java提供接口Apifox模拟Web端文件直传本文主要结合服务端STS获取临时凭证(签名)直传官方文档对开发中比较容易出错的地方加以提醒&#xff1b;建议主要…

uniapp实现微信小程序导航功能

1.导航按钮<button click"navigation()">导航到仓库</button>2.导航功能const navigation (item) > {let address item.province item.city item.district item.address //地址let latitude Number(item.latitude) …

07.4-使用 use 关键字引入路径

使用 use 关键字引入路径 每次调用函数时都必须写出完整路径&#xff0c;可能会感觉不便且重复。在清单7-7中&#xff0c;无论我们选择绝对路径还是相对路径来调用 add_to_waitlist 函数&#xff0c;每次调用时都必须指定 front_of_house 和 hosting。幸运的是&#xff0c;有一…

7.Linux :进程管理,进程控制与计划任务

Linux &#xff1a;进程管理&#xff0c;进程控制与计划任务 一、进程管理 1. 进程与程序 程序&#xff1a;静态的可执行文件&#xff08;存储于磁盘&#xff09;。进程&#xff1a;动态执行的程序实例&#xff08;占用CPU/内存&#xff09;。 2. 查看进程命令作用常用组合ps静…

Matplotlib(四)- 图表样式美化

文章目录一、Matplotlib图表样式介绍1. 图表样式简介2. 默认图表样式2.1 查看默认配置2.2 常用的配置3. 图表样式修改3.1 局部修改3.1.1 通过绘图方法设置参数修改3.1.2 通过rcParams修改3.1.3 通过rc()方法修改3.2 全局修改二、颜色设置1. 颜色的三种表示方式1.1 颜色单词1.2 …

三十四、【Linux常用工具】rsync+inotify实时同步演示

实时同步演示技术架构全景核心组件详解1. inotify 内核子系统2. Rsync 高效同步工具实践演示一、环境准备与安装1. 检查内核支持2. 安装 inotify-tools二、配置 Rsync 服务端&#xff08;目标机&#xff09;1. 创建 Rsync 配置文件2. 启动 Rsync 守护进程三、配置实时同步脚本&…

windows环境下MySQL 8.0 修改或重置密码

windows环境下MySQL 8.0 修改或重置密码 1打开命令窗口cmd&#xff0c;输入命令&#xff1a;net stop mysql&#xff0c; 停止MySQL服务&#xff0c; 开启跳过密码验证登录的MySQL服务 2输入命令 mysqld --console --skip-grant-tables --shared-memory 再打开一个新的cmd&…

基于YOLOP与GAN的图像修复与防御系统设计与实现

基于YOLOP与GAN的图像修复与防御系统设计与实现 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c;觉得好请收藏。点击跳转到网站。 1. 引言 1.1 研究背景 随着深度学习技术在计算机视觉领域的…

将目录文件转移到D盘,使之后的下载缓存数据转移,不再存入c盘

将 C:\Users 文件夹&#xff08;用户文件夹&#xff09;转移到其他盘是一个复杂且风险较高的操作。C:\Users 文件夹包含了系统中每个用户的个人数据和配置文件&#xff0c;修改这个路径可能会导致系统出现问题&#xff0c;包括程序无法正常工作或无法登录。因此&#xff0c; 强…

Cesium大气散射效果

由于做全球体积云效果的需要&#xff0c;再来研究下大气散射效果和体积云类似&#xff0c;关于大气散射颜色计算的过程也仅发生在这两个球体之间。如图所示。计算从相机出发的视线与球壳的交点&#xff0c;如果不相交&#xff0c;则该视线方向上不会发生大气散射&#xff0c;直…

预过滤环境光贴图制作教程:第二步 - 生成环境贴图图集

核心目标 本步骤的核心是生成一张包含 6 级分辨率的环境贴图图集(envAtlas),实现: 将第一步的立方体贴图(sourceCube)重新映射为等矩形投影(适合存储和采样); 生成 6 级不同分辨率的等矩形数据(0 级最高清,5 级最模糊); 用 RGBP 编码压缩 HDR 数据(平衡精度与存…

1. ESP开发之实体按键(KEYPADBUTTON)控制LVGL控件

说明LV_INDEV_TYPE_BUTTON的使用LV_INDEV_TYPE_KEYPAD的使用 说明 本实验使用LVGL版本为v9.2 LVGL中有四种输入设备,如下LV_INDEV_TYPE_POINTER, /**< Touch pad, mouse, external button*/ LV_INDEV_TYPE_KEYPAD, /**< Keypad or keyboard*/ LV_INDEV_TYPE_BUTTON, /*…