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
英文地址,請注明出處:http://en.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, /*…