【Springboot知識】Springboot配置加載機制深入解讀

文章目錄

    • 配置加載概述
      • **Spring Boot 配置加載機制詳解**
        • **一、配置加載順序(優先級由低到高)**
        • **二、關鍵配置機制說明**
          • **1. Profile 機制**
          • **2. 外部化配置**
          • **3. 配置屬性綁定到 Bean**
          • **4. 動態覆蓋配置**
        • **三、配置加載流程圖**
          • **2. 配置導入(Spring Boot 2.4+)**
          • **3. 配置元數據(IDE 提示)**
        • **五、調試配置問題**
        • **六、總結**
    • Relaxed Binding(寬松綁定)?
      • **Spring Boot 的 Relaxed Binding(寬松綁定)**
        • **一、Relaxed Binding 支持的格式**
        • **二、使用場景示例**
          • **1. Java 類定義**
          • **2. 配置文件示例**
          • **3. 環境變量示例**
        • **三、規則詳解**
        • **四、常見問題**
          • **1. 歧義問題**
          • **2. 集合類型綁定**
        • **五、最佳實踐**
        • **六、調試技巧**
    • ??PropertySource 抽象機制詳解?
      • **PropertySource 抽象機制詳解**
        • **一、PropertySource 核心概念**
          • **1. 接口定義**
          • **2. 內置實現類**
          • **3. 配置源的存儲結構**
        • **二、PropertySource 在 Spring Boot 中的應用**
          • **1. 默認加載的 PropertySource**
          • **2. 查看所有生效的 PropertySource**
        • **三、自定義 PropertySource**
          • **1. 實現自定義配置源**
          • **2. 注冊自定義配置源**
          • **3. 使用自定義配置**
        • **四、PropertySource 的高級用法**
          • **1. 動態刷新配置**
          • **2. 配置源優先級調整**
          • **3. 多文件配置合并**
        • **五、PropertySource 與 Relaxed Binding**
        • **六、總結**
    • **自定義配置加載工廠類及注解使用指南**
      • **一、創建自定義配置工廠類**
        • **1. 實現 `PropertySourceFactory`**
      • **二、通過注解加載配置**
          • **1. 使用 `@PropertySource` 指定工廠類**
        • **2. 加密配置文件示例**
      • **三、在代碼中使用配置**
        • **1. 注入配置值**
        • **2. 啟動類測試**
      • **四、高級功能擴展**
        • **1. 動態密鑰管理**
        • **2. 多配置文件支持**
        • **3. 配置優先級控制**
      • **五、驗證與調試**
        • **1. 查看所有配置源**
        • **2. 日志調試**
      • **六、注意事項**
    • 廣子

配置加載概述

Spring Boot 配置加載機制詳解

Spring Boot 的配置加載機制采用 層級化優先級策略,支持從多種來源(如配置文件、環境變量、命令行參數等)加載配置,并按 優先級從低到高 的順序覆蓋同名配置。以下是完整的配置加載流程及關鍵機制說明:

一、配置加載順序(優先級由低到高)

Spring Boot 按以下順序加載配置,后加載的配置會覆蓋前面的同名屬性

配置來源說明
1. @Configuration 類上的 @PropertySource通過注解顯式指定配置文件(如 @PropertySource("classpath:custom.properties"))。
2. 應用默認屬性(SpringApplication.setDefaultProperties通過代碼設置的默認屬性,優先級最低。
3. application.yml / application.yaml項目 resources 目錄下的 YAML 格式配置文件(支持多環境 Profile)。
4. application.properties項目 resources 目錄下的 Properties 格式配置文件。
5. Profile-specific 配置文件application-{profile}.ymlapplication-{profile}.properties
6. 外部化配置(Jar 包外部的配置文件)在 Jar 包同級目錄下的配置文件(如 ./config/application.yml)。
7. 環境變量(Environment Variables)操作系統或容器設置的環境變量(如 SPRING_DATASOURCE_URL)。
8. 命令行參數(Command Line Args)通過 --key=value 傳遞的參數(如 java -jar app.jar --server.port=8081)。
二、關鍵配置機制說明
1. Profile 機制

Spring Boot 通過 Profile 實現多環境配置隔離。
? 激活 Profile 的方式
? 配置文件:spring.profiles.active=dev
? 命令行參數:--spring.profiles.active=prod
? 環境變量:export SPRING_PROFILES_ACTIVE=test

? Profile-specific 配置文件
? 命名規則:application-{profile}.yml(如 application-dev.yml)。
? 優先級:當 Profile 激活時,同名配置會覆蓋默認的 application.yml

示例:

# application.yml(默認配置)
server:port: 8080# application-dev.yml(開發環境)
server:port: 9090

激活開發環境后,端口變為 9090

2. 外部化配置

Spring Boot 支持從 Jar 包外部 加載配置文件,便于部署時動態調整配置。
? 默認外部路徑優先級(從高到低):

  1. 當前目錄的 /config 子目錄:./config/application.yml
  2. 當前目錄:./application.yml
  3. 類路徑的 /config 包:classpath:/config/application.yml
  4. 類路徑根目錄:classpath:/application.yml

? 自定義外部路徑
通過命令行或環境變量指定路徑:

java -jar app.jar --spring.config.location=file:/opt/config/
3. 配置屬性綁定到 Bean

Spring Boot 通過 @ConfigurationProperties 將配置自動綁定到 Java Bean。

示例:

@Configuration
@ConfigurationProperties(prefix = "app")
public class AppConfig {private String name;private List<String> servers;// Getter/Setter
}
# application.yml
app:name: "MyApp"servers:- "server1"- "server2"
4. 動態覆蓋配置

通過 命令行參數環境變量 動態覆蓋配置:

# 命令行覆蓋端口
java -jar app.jar --server.port=8081# 環境變量覆蓋數據庫配置(注意大小寫轉換)
export SPRING_DATASOURCE_URL=jdbc:mysql://localhost:3306/mydb
三、配置加載流程圖
graph TD
A[啟動應用] --> B[加載默認屬性]
B --> C[加載@PropertySource指定的文件]
C --> D[加載application.yml/properties]
D --> E[加載Profile-specific配置]
E --> F[加載外部化配置]
F --> G[加載環境變量]
G --> H[加載命令行參數]
H --> I[最終合并配置]
``#### **四、高級特性**##### **1. 配置加密**
結合 **Spring Cloud Vault** 或 **Jasypt** 對敏感配置(如數據庫密碼)加密:  
```yaml
spring:datasource:password: ENC(加密后的字符串)
2. 配置導入(Spring Boot 2.4+)

通過 spring.config.import 導入其他配置:

# application.yml
spring:config:import:- "classpath:extra-config.yml"- "file:/opt/config/override.yml"
3. 配置元數據(IDE 提示)

src/main/resources/META-INF 下添加 spring-configuration-metadata.json,提供配置屬性的 IDE 自動提示。

五、調試配置問題

? 查看生效的配置
訪問 /actuator/env 端點,查看所有已加載的配置及其來源。
? 日志輸出配置加載詳情
application.yml 中啟用調試日志:

logging:level:org.springframework.boot.context.properties: TRACE
六、總結

? 優先級策略:命令行參數 > 環境變量 > 外部化配置 > Profile-specific > 默認配置。
? 靈活擴展:支持多環境、外部化配置、動態覆蓋和屬性綁定。
? 最佳實踐
? 使用 application.yml + Profile 管理多環境。
? 敏感信息通過外部化配置或加密工具管理。
? 避免在代碼中硬編碼配置,優先使用 @ConfigurationProperties

Relaxed Binding(寬松綁定)?

Spring Boot 的 Relaxed Binding(寬松綁定)

Relaxed Binding 是 Spring Boot 在配置屬性綁定中的一種靈活機制,允許在 配置文件(如 application.yml)或 環境變量 中使用不同格式的命名方式,而代碼中仍能正確綁定到對應的 Java 屬性。這種機制極大簡化了配置的兼容性處理。

一、Relaxed Binding 支持的格式

假設 Java 類中定義的屬性為 myProject.myField,以下配置格式均能生效:

配置來源合法格式示例說明
配置文件(.ymlmy-project.my-field短橫線命名(推薦標準寫法)
配置文件(.ymlmyProject.myField駝峰命名(與代碼字段名一致)
配置文件(.ymlmy_project.my_field下劃線命名(常見于環境變量風格)
環境變量MYPROJECT_MYFIELD全大寫+下劃線(Linux 環境變量風格)
系統屬性myproject.myfield全小寫+點號(寬松匹配)
二、使用場景示例
1. Java 類定義
@Configuration
@ConfigurationProperties(prefix = "app")
public class AppConfig {private String projectName;  // 對應配置文件中的不同格式private int maxRetryCount;   // 例如 max-retry-count, maxRetryCount, MAX_RETRY_COUNT// Getter/Setter
}
2. 配置文件示例
# application.yml
app:project-name: "Spring Boot App"    # 短橫線格式(推薦)max_retry_count: 3                # 下劃線格式
3. 環境變量示例
# Linux/MacOS
export APP_PROJECTNAME="MyApp"
export APP_MAXRETRYCOUNT=5# Windows(命令行)
set APP_PROJECTNAME=MyApp
set APP_MAXRETRYCOUNT=5
三、規則詳解
  1. 前綴(Prefix)處理
    ? prefix = "app" 可匹配以下形式:
    ? app.*(配置文件)
    ? APP_*(環境變量)
    ? app_*(下劃線)

  2. 屬性名匹配優先級
    當多個格式同時存在時,精確匹配優先于寬松匹配。例如:
    ? 若同時存在 app.project-nameapp.projectName,優先使用 app.project-name

  3. 大小寫不敏感
    配置中的鍵名不區分大小寫。例如 app.PROJECTNAMEapp.projectname 是等價的。

四、常見問題
1. 歧義問題

如果不同格式的配置指向同一個字段,可能導致意外覆蓋。例如:

app:project-name: "Name1"project_name: "Name2"

此時實際生效的值取決于配置加載順序(后加載的覆蓋先加載的)。

2. 集合類型綁定

對于 MapList 類型,建議在配置中使用短橫線格式:

app:servers:- name: "server1"ip: "192.168.1.1"- name: "server2"ip: "192.168.1.2"
五、最佳實踐
  1. 統一命名風格
    ? 推薦使用短橫線格式(如 max-retry-count),保持配置文件的簡潔性和可讀性。

  2. 避免混合格式
    同一項目中避免混用駝峰、下劃線和短橫線,防止維護混亂。

  3. 環境變量處理
    ? 在 Kubernetes 或 Docker 中,環境變量需轉換為全大寫+下劃線格式:

    # 例如:app.maxRetryCount -> APP_MAXRETRYCOUNT
    
  4. IDE 提示支持
    src/main/resources/META-INF 下添加 spring-configuration-metadata.json,為自定義屬性提供 IDE 自動提示。

六、調試技巧
  1. 查看最終綁定的屬性值
    訪問 /actuator/configprops 端點,查看所有 @ConfigurationProperties 類的屬性綁定結果。

  2. 啟用調試日志
    application.yml 中啟用日志,追蹤屬性綁定過程:

    logging:level:org.springframework.boot.context.properties: DEBUG
    

通過 Relaxed Binding,Spring Boot 實現了配置屬性的高度靈活性,使得開發者無需關注格式細節,專注于業務邏輯。

??PropertySource 抽象機制詳解?

PropertySource 抽象機制詳解

PropertySource 是 Spring 框架中用于抽象配置源的接口,它將不同來源的配置(如環境變量、配置文件、JVM 參數等)統一為鍵值對形式,使得應用可以透明地訪問這些配置。Spring Boot 基于此機制實現了 多配置源的自動加載與優先級管理

一、PropertySource 核心概念
1. 接口定義

PropertySource 接口的核心方法:

public abstract class PropertySource<T> {public abstract String getName();      // 配置源名稱(如 "systemProperties")public abstract Object getProperty(String name); // 根據 Key 獲取 Value
}
2. 內置實現類

Spring 提供多種 PropertySource 實現類:

實現類說明
MapPropertySource基于 Map 的配置源(如從 .properties 文件加載的配置)。
SystemEnvironmentPropertySource操作系統環境變量(支持 Relaxed Binding,如 spring.datasource.url 對應 SPRING_DATASOURCE_URL)。
CommandLinePropertySource命令行參數(如 --server.port=8080)。
CompositePropertySource組合多個配置源,統一對外提供訪問接口。
3. 配置源的存儲結構

Spring 的 Environment 接口通過 MutablePropertySources 管理多個 PropertySource,形成 優先級鏈

public interface Environment extends PropertyResolver {MutablePropertySources getPropertySources();
}
二、PropertySource 在 Spring Boot 中的應用
1. 默認加載的 PropertySource

Spring Boot 啟動時自動加載以下配置源(按優先級從低到高排序):

配置源示例
應用默認屬性(SpringApplication.setDefaultPropertiesnew HashMap<>().put("key", "default")
@PropertySource 注解指定的文件@PropertySource("classpath:custom.properties")
配置文件(application.yml/application.propertiesapplication-dev.yml
隨機值屬性(RandomValuePropertySourcerandom.int, random.uuid
操作系統環境變量PATH, JAVA_HOME
JVM 系統屬性-Dserver.port=8080
命令行參數--server.port=8081
2. 查看所有生效的 PropertySource

訪問 /actuator/env 端點,可查看所有已加載的配置源及其屬性:

{"propertySources": [{"name": "commandLineArgs","properties": { "server.port": "8081" }},{"name": "systemProperties","properties": { "java.version": "17.0.1" }}]
}
三、自定義 PropertySource
1. 實現自定義配置源

例如:從數據庫加載配置。

public class DatabasePropertySource extends PropertySource<Map<String, String>> {private Map<String, String> properties = new HashMap<>();public DatabasePropertySource() {super("databaseProperties");// 從數據庫加載配置到 MaploadFromDatabase();}private void loadFromDatabase() {// 模擬數據庫查詢properties.put("app.database.url", "jdbc:mysql://localhost:3306/mydb");properties.put("app.database.username", "admin");}@Overridepublic Object getProperty(String name) {return properties.get(name);}
}
2. 注冊自定義配置源

通過 EnvironmentPostProcessor 接口動態添加:

public class CustomEnvironmentPostProcessor implements EnvironmentPostProcessor {@Overridepublic void postProcessEnvironment(ConfigurableEnvironment env, SpringApplication app) {// 創建自定義配置源DatabasePropertySource dbSource = new DatabasePropertySource();// 添加到配置源列表的最前面(最高優先級)env.getPropertySources().addFirst(dbSource);}
}

注冊到 META-INF/spring.factories

org.springframework.boot.env.EnvironmentPostProcessor=com.example.CustomEnvironmentPostProcessor
3. 使用自定義配置

在代碼或配置文件中直接引用:

@Value("${app.database.url}")
private String dbUrl;
四、PropertySource 的高級用法
1. 動態刷新配置

結合 Spring Cloud Config 或 Nacos 實現配置熱更新:

@RefreshScope
@RestController
public class ConfigController {@Value("${dynamic.config}")private String dynamicConfig;
}
2. 配置源優先級調整

通過代碼調整配置源順序:

env.getPropertySources().addAfter("systemProperties", myPropertySource);
3. 多文件配置合并

使用 @PropertySource 加載多個文件:

@Configuration
@PropertySource({"classpath:default.properties", "file:/opt/config/override.properties"})
public class AppConfig {}
五、PropertySource 與 Relaxed Binding

Relaxed Binding 允許在不同配置源中使用不同命名風格,例如:
? 環境變量 APP_DATASOURCE_URL
? 配置文件 app.datasource.url
? 命令行參數 --app.datasource.url=...

Spring Boot 會自動統一處理這些格式,綁定到同一個屬性。

六、總結

? 核心價值
PropertySource 抽象實現了配置源的統一管理,屏蔽了底層差異,使開發者無需關心配置來源。
? 靈活擴展
支持自定義配置源(如數據庫、遠程 API),滿足企業級需求。
? 優先級控制
通過調整配置源順序,實現不同環境(開發、測試、生產)的配置覆蓋。
? 最佳實踐
? 優先使用標準配置文件(application.yml)。
? 敏感配置通過外部化機制(如 Vault)管理。
? 避免硬編碼配置,使用 @Value@ConfigurationProperties 綁定屬性。

自定義配置加載工廠類及注解使用指南

以下通過一個完整示例演示如何創建自定義配置加載工廠類,并通過 @PropertySource 注解實現加密 YAML 配置的加載。

一、創建自定義配置工廠類

1. 實現 PropertySourceFactory
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.EncodedResource;
import org.springframework.core.io.support.PropertySourceFactory;
import java.io.IOException;
import java.util.Map;public class EncryptedYamlPropertySourceFactory implements PropertySourceFactory {// 密鑰(實際應從安全位置讀取)private static final String SECRET_KEY = "my-secret-key-123";@Overridepublic PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {// 1. 讀取加密文件內容String encryptedContent = readEncryptedContent(resource);// 2. 解密內容(示例使用 AES)String decryptedContent = decryptAES(encryptedContent, SECRET_KEY);// 3. 解析 YAMLMap<String, Object> properties = parseYaml(decryptedContent);// 4. 創建 PropertySourcereturn new MapPropertySource("encryptedYaml", properties);}private String readEncryptedContent(EncodedResource resource) throws IOException {try (InputStream is = resource.getInputStream()) {return new String(is.readAllBytes(), StandardCharsets.UTF_8);}}private String decryptAES(String encryptedContent, String key) {// 實現 AES 解密邏輯(此處為偽代碼)return "app:\n  security:\n    api-key: \"decrypted-key\"";}private Map<String, Object> parseYaml(String content) {Yaml yaml = new Yaml();return yaml.load(content);}
}

二、通過注解加載配置

1. 使用 @PropertySource 指定工廠類
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;@Configuration
@PropertySource(value = "classpath:config/secure-config.yml.enc",  // 加密配置文件路徑factory = EncryptedYamlPropertySourceFactory.class // 指定自定義工廠類
)
public class SecurityConfig {
}
2. 加密配置文件示例

加密前的明文內容 (secure-config.yml):

app:security:api-key: "a1b2c3d4e5"jwt-secret: "jwt-s3cr3t"

加密后保存為 secure-config.yml.enc(假設使用 AES 加密)。

三、在代碼中使用配置

1. 注入配置值
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;@Service
public class ApiService {@Value("${app.security.api-key}")private String apiKey;@Value("${app.security.jwt-secret}")private String jwtSecret;public void printConfig() {System.out.println("API Key: " + apiKey);System.out.println("JWT Secret: " + jwtSecret);}
}
2. 啟動類測試
@SpringBootApplication
public class MyApp implements CommandLineRunner {@Autowiredprivate ApiService apiService;public static void main(String[] args) {SpringApplication.run(MyApp.class, args);}@Overridepublic void run(String... args) {apiService.printConfig(); // 輸出解密后的配置值}
}

四、高級功能擴展

1. 動態密鑰管理

通過環境變量獲取密鑰(避免硬編碼):

public class EncryptedYamlPropertySourceFactory implements PropertySourceFactory {@Overridepublic PropertySource<?> createPropertySource(String name, EncodedResource resource) {String secretKey = System.getenv("CONFIG_SECRET_KEY"); // 從環境變量獲取密鑰// 使用密鑰解密...}
}
2. 多配置文件支持

加載多個加密文件:

@Configuration
@PropertySources({@PropertySource(value = "classpath:config/db.yml.enc", factory = EncryptedYamlPropertySourceFactory.class),@PropertySource(value = "file:/etc/app/secure.yml.enc", factory = EncryptedYamlPropertySourceFactory.class)
})
public class MultiConfig {
}
3. 配置優先級控制

手動調整配置源順序:

@Configuration
public class PriorityConfig implements EnvironmentAware {@Overridepublic void setEnvironment(Environment env) {ConfigurableEnvironment cEnv = (ConfigurableEnvironment) env;// 將自定義配置源提到最高優先級cEnv.getPropertySources().addFirst(new ResourcePropertySource("classpath:config/secure-config.yml.enc"));}
}

五、驗證與調試

1. 查看所有配置源

訪問 /actuator/env 端點,確認加密配置已加載:

{"propertySources": [{"name": "encryptedYaml","properties": {"app.security.api-key": {"value": "decrypted-key"}}}]
}
2. 日志調試

啟用詳細日志追蹤配置加載過程:

logging:level:org.springframework.core.env: DEBUGcom.example.EncryptedYamlPropertySourceFactory: TRACE

六、注意事項

  1. 工廠類的無狀態性
    Spring 要求 PropertySourceFactory 實現類必須為 無狀態,避免使用非靜態成員變量。

  2. 異常處理
    createPropertySource 方法中妥善處理 IOException 和解密失敗異常。

  3. 性能優化
    對大文件或高頻訪問的配置,可添加緩存機制(首次加載后緩存解密結果)。

  4. IDE 元數據支持
    src/main/resources/META-INF 下添加 additional-spring-configuration-metadata.json,提供配置提示:

    {"properties": [{"name": "app.security.api-key","type": "java.lang.String","description": "API 訪問密鑰"}]
    }
    

通過本方案,您可以實現 安全、靈活、可維護 的配置加載機制,適用于金融、醫療等對數據安全要求高的場景。

廣子

CONGA適用榮耀magic7pro手機殼凱夫拉芳綸纖維榮耀Magic7rsr保時捷設計保護套碳纖維全包超薄硬殼磁吸 磁吸款| 晨曦藍 |金屬鏡頭圈 榮耀 Magic7 Pro
【在售價】198.00元
【到手價】188.00元

下單鏈接:https://u.jd.com/1Dtukx8

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76572.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76572.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76572.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI圖像生成

要通過代碼實現AI圖像生成&#xff0c;可以使用深度學習框架如TensorFlow、PyTorch或GANs等技術。下面是一個簡單的示例代碼&#xff0c;演示如何使用GANs生成手寫數字圖像&#xff1a; import torch import torchvision import torchvision.transforms as transforms import …

基于springboot的個人博客系統

一、系統架構 前端&#xff1a;html | bootstrap | jquery | css | ajax 后端&#xff1a;springboot | mybatis 環境&#xff1a;jdk1.8 | mysql | maven 二、代碼及數據 三、功能介紹 01. 注冊 02. 登錄 03. 管理后臺-首頁 04. 管理后臺-文章-所有文…

BOTA六維力矩傳感器如何打通機器人AI力控操作的三層架構?感知-決策-執行全鏈路揭秘

想象一下&#xff0c;你對著一個機器人說&#xff1a;“請幫我泡杯茶。”然后&#xff0c;它就真的開始行動了&#xff1a;找茶壺、燒水、取茶葉、泡茶……這一切看似簡單&#xff0c;但背后卻隱藏著復雜的AI技術。今天&#xff0c;我們就來揭秘BOTA六維力矩傳感器在機器人操控…

ffmpeg播放音視頻流程

文章目錄 &#x1f3ac; FFmpeg 解碼播放流程概覽&#xff08;以音視頻文件為例&#xff09;1?? 創建結構體2?? 打開音視頻文件3?? 查找解碼器并打開解碼器4?? 循環讀取數據包&#xff08;Packet&#xff09;5?? 解碼成幀&#xff08;Frame&#xff09;6?? 播放 / …

在 Wireshark 中如何篩選數據包

1. 顯示過濾器&#xff08;Display Filters&#xff09; 顯示過濾器用于 在已捕獲的數據包中篩選&#xff0c;語法類似于編程語言中的條件表達式。 &#xff08;1&#xff09;基本過濾 表達式說明ip.addr 192.168.1.1顯示所有涉及 192.168.1.1 的 IP 包ip.src 192.168.1.1…

ES6 新增特性 箭頭函數

簡述&#xff1a; ECMAScript 6&#xff08;簡稱ES6&#xff09;是于2015年6月正式發布的JavaScript語言的標準&#xff0c;正式名為ECMAScript 2015&#xff08;ES2015&#xff09;。它的目標是使得JavaScript語言可以用來編寫復雜的大型應用程序&#xff0c;成為企業級開發語…

Python數據可視化-第7章-繪制3D圖表和統計地圖

環境 開發工具 VSCode庫的版本 numpy1.26.4 matplotlib3.10.1 ipympl0.9.7教材 本書為《Python數據可視化》一書的配套內容&#xff0c;本章為第7章 繪制3D圖表和統計地圖 本章首先介紹了使用mplot3d工具包繪制3D圖表&#xff0c;然后介紹了使用animation模塊制作動畫&#…

【從零開始學習JVM | 第二篇】HotSpot虛擬機對象探秘

對象的創建 1.類加載檢查 虛擬機遇到一條new的指令&#xff0c;首先去檢查這個指令的參數能否在常量池中定位到這個類的符號引用&#xff0c;并且檢查這個符號引用代表的類是否已被加載過、解析和初始化過。如果沒有&#xff0c;那必須先執行類的加載過程。 2.分配內存 在類…

Oracle 表空間高水位收縮全攻略

1. 概述 本文檔是針對某個特定用戶表空間收縮的文檔&#xff0c;實際操作要結合生產庫具體情況。主要包括以下幾個流程&#xff1a; 收集當前數據庫相關信息降低數據庫表高水位線Resize 收縮數據文件 具體細節詳見以下章節。 2. 時間規劃 操作類型預估時間實際時間數據庫信…

Pytest多環境切換實戰:測試框架配置的最佳實踐!

你是否也遇到過這種情況&#xff1a;本地測試通過&#xff0c;一到測試環境就翻車&#xff1f;環境變量錯亂、接口地址混亂、數據源配置丟失……這些「環境切換」問題簡直像定時炸彈&#xff0c;隨時引爆你的測試流程&#xff01; 測試人員每天都跟不同的環境打交道&#xff0…

藍橋杯賽前題

開始每個人能量為3 答題了&#xff0c;答題者1 扣分最后算 #include<bits/stdc.h> using namespace std;const int N1e510; int a[N]; int main(){int n,k,q;cin>>n>>k>>q;for(int i1;i<n;i){a[i]k; }for(int i1;i<q;i){int x;cin>>x;a[…

VSCode優雅的使用debug

原始用法&#xff1a;(這里不使用) 配置launch.json&#xff0c;里面傳入參數然后debug&#xff0c;這里我們通常需要傳入的參數比較多&#xff0c;而且經常修改參數&#xff0c;直接去修改launch.json會比較麻煩&#xff0c;所以使用sh腳本比較方便。 {// Use IntelliSense to…

oracle常見問題處理集錦

oracle常見問題處理集錦 oracle常見問題處理集錦ORA-03001:未實施的功能ORA:28000 the count is locked oracle常見問題處理集錦 ORA-03001:未實施的功能 問題 ORA-03001:未實施的功能 在datagrip中修改表名稱&#xff0c;使用的語法是&#xff1a; rename old_name to new_n…

項目日志配置模板示例

1.新增application.properties配置 logging.configclasspath:logback-spring.xml spring.profiles.activedev 將項目部署到服務器時需要將dev修改為test后再進行打包部署 2.新增logback-spring.xml <?xml version"1.0" encoding"UTF-8"?> <…

2025年第十八屆“認證杯”數學中國數學建模網絡挑戰賽【BC題】完整版+代碼+結果

# 問題一&#xff1a;隨機森林回歸from sklearn.ensemble import RandomForestRegressormodel_rf RandomForestRegressor()model_rf.fit(X_train, y_train)# 問題二&#xff1a;LSTM時間序列預測from tensorflow.keras.models import Sequentialmodel_lstm Sequential()model…

C語言實現TcpDump

一、 在 C 語言中實現 TCP 抓包功能&#xff0c;通常可以使用 libpcap 庫。libpcap 是一個廣泛使用的網絡抓包庫&#xff0c;它提供了捕獲網絡數據包的接口。 libpcap 是一個廣泛使用的 C 語言庫&#xff0c;用于捕獲和過濾網絡數據包。它提供了一個通用接口&#xff0c;用于訪…

Spark-Core編程

sortByKey算子&#xff1a;對(K, V)型RDD按key排序&#xff0c;K需實現Ordered接口&#xff0c;可指定升序或降序及分區數。 join算子&#xff1a;連接兩個(K, V)和(K, W)型RDD&#xff0c;返回(K, (V, W))型RDD 。 leftOuterJoin算子&#xff1a;類似SQL左外連接&#xff0c;返…

閱讀MySQL實戰45講第9天

目錄 一、你的 SQL 語句為什么變“慢” 二、什么情況會引發數據庫的 flush 過程&#xff1f; 三、分析上面四種場景對性能的影響 四、InnoDB 刷臟頁的控制策略 五、原作者小結&#xff1a; 引言&#xff1a; 一條 SQL 語句&#xff0c;正常執行的時候特別快&#xff0c;但是有時…

cin,cin.get(),getchar(),getline(),cin.get line()異同點

文章目錄 1.cin2.cin.get()3.getchar()4.cin.getline()5.getline() 1.cin &#xff08;1&#xff09;cin>>等價于cin.operator>>()&#xff0c;即調用成員函數operator>>()進行讀取數據。 &#xff08;2&#xff09;當cin>>從緩沖區中讀取數據時&…

VMware虛擬機Ubuntu磁盤擴容

VMware中操作&#xff1a; 選擇要擴容的虛擬機&#xff0c;點擊編輯虛擬機設置 打開后點擊磁盤——>點擊擴展&#xff08;注意&#xff1a;如果想要擴容的話需要刪除快照&#xff09; 調整到你想要的容量 點擊上圖的擴展——>確定 然后我們進到虛擬機里面 首先&#…