Spring Boot 定時任務的多種實現方式

🌟 前言

歡迎來到我的技術小宇宙!🌌 這里不僅是我記錄技術點滴的后花園,也是我分享學習心得和項目經驗的樂園。📚 無論你是技術小白還是資深大牛,這里總有一些內容能觸動你的好奇心。🔍

  • 🤖 洛可可白:個人主頁

  • 🔥 個人專欄:?前端技術 ?后端技術

  • 🏠 個人博客:洛可可白博客

  • 🐱 代碼獲取:bestwishes0203

  • 📷 封面壁紙:洛可可白wallpaper

在這里插入圖片描述

這里寫自定義目錄標題

  • Spring Boot 定時任務的多種實現方式
    • 1. 使用 `@Scheduled` 注解
      • 示例代碼
      • 優點
      • 缺點
    • 2. 使用 `ScheduledExecutorService`
      • 示例代碼
      • 優點
      • 缺點
    • 3. 使用 Quartz 框架
      • 示例代碼
      • 優點
      • 缺點
    • 4. 使用 `SchedulingConfigurer` 接口
      • 示例代碼
      • 優點
      • 缺點
    • 5. 使用 `TaskScheduler` 接口
      • 示例代碼
      • 優點
      • 缺點
    • 6. 使用 Redis 實現分布式定時任務
      • 示例代碼
      • 優點
      • 缺點
    • 7. 使用 XXL-JOB 或 Elastic-Job
      • 示例代碼(XXL-JOB)
      • 優點
      • 缺點
    • 總結
    • 選擇合適的定時任務實現方式
    • 示例項目結構
    • 示例代碼完整版
      • `DemoApplication.java`
      • `SchedulingConfig.java`
      • `ScheduledTask.java`
      • `RedisConfig.java`
      • `RedisDistributedTask.java`
      • `application.properties`
    • 結語

Spring Boot 定時任務的多種實現方式

在現代的 Spring Boot 應用程序中,定時任務是一種常見的需求。無論是定期清理日志、同步數據,還是執行定時的業務邏輯,Spring Boot 提供了多種靈活的方式來實現定時任務。本文將詳細介紹幾種常見的定時任務實現方式,并通過示例代碼幫助你快速上手。

1. 使用 @Scheduled 注解

@Scheduled 是 Spring Boot 提供的一種簡單且強大的定時任務實現方式,適用于大多數簡單的定時任務場景。

示例代碼

配置類

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;@Configuration
@EnableScheduling
public class SchedulingConfig {// 啟用定時任務支持
}

任務類

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;@Component
public class ScheduledTask {// 固定頻率:每5秒執行一次任務@Scheduled(fixedRate = 5000)public void executeTask() {System.out.println("【@Scheduled 任務】執行時間:" + LocalDateTime.now());}// Cron 表達式:每天中午12點執行一次任務@Scheduled(cron = "0 0 12 * * ?")public void executeCronTask() {System.out.println("【Cron 任務】執行時間:" + LocalDateTime.now());}
}

優點

  • 簡單易用:只需添加注解即可實現定時任務。
  • 集成度高:與 Spring 容器無縫集成,支持依賴注入。

缺點

  • 單節點運行:默認情況下,@Scheduled 任務僅在單個節點上運行,不支持分布式場景。

2. 使用 ScheduledExecutorService

ScheduledExecutorService 是 Java 提供的原生定時任務工具,適合需要更細粒度控制的任務調度場景。

示例代碼

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;public class ScheduledExecutorServiceExample {public static void main(String[] args) {ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);executor.scheduleAtFixedRate(() -> {System.out.println("任務執行:" + System.currentTimeMillis());}, 0, 5, TimeUnit.SECONDS);}
}

優點

  • 靈活性高:可以自定義線程池大小和任務執行策略。
  • 獨立性強:不依賴于 Spring 框架,適合非 Spring 環境。

缺點

  • 功能有限:不支持復雜的時間調度策略,如 Cron 表達式。

3. 使用 Quartz 框架

Quartz 是一個功能強大的任務調度框架,支持復雜的調度任務,例如動態任務配置和分布式任務調度。

示例代碼

依賴

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

任務類

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;public class MyJob implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {System.out.println("Quartz 任務執行:" + System.currentTimeMillis());}
}

配置類

import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class QuartzConfig {@Beanpublic JobDetail jobDetail() {return JobBuilder.newJob(MyJob.class).withIdentity("myJob").storeDurably().build();}@Beanpublic Trigger jobTrigger(JobDetail jobDetail) {return TriggerBuilder.newTrigger().forJob(jobDetail).withIdentity("myTrigger").withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever()).build();}
}

優點

  • 功能強大:支持復雜的調度策略,如動態任務配置和分布式任務調度。
  • 高可靠性:支持任務持久化和恢復。

缺點

  • 配置復雜:需要額外的配置和依賴。
  • 學習曲線:相比 @Scheduled,Quartz 的學習成本較高。

4. 使用 SchedulingConfigurer 接口

SchedulingConfigurer 是 Spring 提供的一個接口,允許動態配置定時任務,例如從數據庫中讀取任務配置。

示例代碼

import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.Date;@Configuration
public class DynamicSchedulingConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(10);executor.initialize();taskRegistrar.setTaskExecutor(executor);taskRegistrar.addTriggerTask(() -> System.out.println("動態任務執行:" + new Date()),new Trigger() {@Overridepublic Date nextExecutionTime(TriggerContext triggerContext) {return new CronTrigger("0/5 * * * * ?").nextExecutionTime(triggerContext);}});}
}

優點

  • 動態配置:支持從外部動態加載任務配置。
  • 靈活性高:可以結合數據庫或其他存儲實現動態任務管理。

缺點

  • 復雜度高:實現動態任務配置需要額外的開發工作。

5. 使用 TaskScheduler 接口

TaskScheduler 是 Spring 提供的一個接口,支持動態任務調度,適合需要動態調整任務執行頻率的場景。

示例代碼

import org.springframework.scheduling.TaskScheduler;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.Date;@Configuration
@EnableScheduling
public class TaskSchedulerConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(10);executor.initialize();taskRegistrar.setTaskExecutor(executor);taskRegistrar.addFixedRateTask(() -> System.out.println("固定頻率任務執行:" + new Date()), 5000);}
}

優點

  • 動態調度:支持動態調整任務執行頻率。
  • 簡單易用:與 Spring 容器無縫集成。

缺點

  • 功能有限:不支持復雜的時間調度策略。

6. 使用 Redis 實現分布式定時任務

Redis 是一個高性能的鍵值存儲系統,可以利用其特性實現簡單的分布式定時任務。

示例代碼

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;@Component
public class RedisDistributedTask {private final RedisTemplate<String, String> redisTemplate;public RedisDistributedTask(RedisTemplate<String, String> redisTemplate) {this.redisTemplate = redisTemplate;}@Scheduled(fixedRate = 5000)public void executeTask() {String lockKey = "distributedTaskLock";String lockValue = String.valueOf(System.currentTimeMillis());Boolean lock = redisTemplate.opsForValue().setIfAbsent(lockKey, lockValue, 5, TimeUnit.SECONDS);if (lock != null && lock) {System.out.println("分布式任務執行:" + new Date());}}
}

優點

  • 分布式支持:可以實現簡單的分布式任務調度。
  • 簡單易用:基于 Redis 的特性,實現簡單。

缺點

  • 功能有限:不支持復雜的調度策略。

7. 使用 XXL-JOB 或 Elastic-Job

XXL-JOB 和 Elastic-Job 是輕量級的分布式任務調度平臺,支持動態任務管理和高可用性。

示例代碼(XXL-JOB)

依賴

<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>3.1.2</version>
</dependency>

任務類

import com.xxl.job.core.handler.annotation.XxlJob;
import org.springframework.stereotype.Component;@Component
public class XxlJobExample {@XxlJob("myJobHandler")public void myJobHandler() {System.out.println("XXL-JOB 任務執行:" + System.currentTimeMillis());}
}

配置類(XXL-JOB)

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class XxlJobConfig {@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses("http://127.0.0.1:8080/xxl-job-admin");xxlJobSpringExecutor.setAppname("xxl-job-executor-sample");xxlJobSpringExecutor.setIp("127.0.0.1");xxlJobSpringExecutor.setPort(9999);return xxlJobSpringExecutor;}
}

優點

  • 功能強大:支持動態任務管理、分布式任務調度、任務監控等功能。
  • 高可用性:支持任務的容錯和恢復機制。
  • 易于集成:與 Spring Boot 集成簡單,配置方便。

缺點

  • 學習成本:需要額外學習 XXL-JOB 或 Elastic-Job 的使用方式。
  • 依賴外部系統:需要部署額外的調度中心(如 XXL-JOB 的管理平臺)。

總結

在 Spring Boot 中,有多種方式可以實現定時任務,每種方式都有其適用場景和優缺點:

實現方式優點缺點適用場景
@Scheduled 注解簡單易用,與 Spring 集成度高不支持分布式任務單節點應用,簡單任務調度
ScheduledExecutorService靈活性高,適合復雜任務調度不支持復雜的時間調度策略需要自定義線程池的任務調度
Quartz 框架功能強大,支持復雜調度策略和分布式任務配置復雜,學習成本高需要復雜調度策略的應用
SchedulingConfigurer 接口支持動態任務配置實現復雜,需要額外開發工作動態任務配置需求
TaskScheduler 接口動態調度,與 Spring 集成度高功能有限,不支持復雜調度策略動態調整任務執行頻率的場景
Redis 分布式任務支持分布式任務調度,實現簡單功能有限,不支持復雜調度策略分布式任務調度,簡單場景
XXL-JOB / Elastic-Job功能強大,支持動態任務管理和高可用性需要額外部署調度中心,學習成本高分布式任務調度,復雜場景

選擇合適的定時任務實現方式

選擇哪種定時任務實現方式取決于你的具體需求:

  1. 簡單任務調度:如果任務邏輯簡單,且僅在單個節點上運行,推薦使用 @Scheduled 注解。
  2. 復雜任務調度:如果需要支持復雜的時間調度策略(如 Cron 表達式),或者需要分布式任務調度,可以考慮使用 Quartz 框架。
  3. 動態任務配置:如果任務配置需要動態加載(如從數據庫中讀取),可以使用 SchedulingConfigurer 接口。
  4. 分布式任務調度:如果需要在多個節點上運行任務,且任務調度需要高可用性,推薦使用 XXL-JOB 或 Elastic-Job。
  5. 輕量級任務調度:如果需要快速實現簡單的分布式任務調度,可以考慮使用 Redis。

示例項目結構

以下是一個簡單的 Spring Boot 項目結構,展示了如何集成 @Scheduled 和 Redis 分布式任務:

my-spring-boot-project/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   ├── com.example.demo/
│   │   │   │   ├── application/
│   │   │   │   │   ├── DemoApplication.java
│   │   │   │   ├── config/
│   │   │   │   │   ├── SchedulingConfig.java
│   │   │   │   │   ├── RedisConfig.java
│   │   │   │   ├── service/
│   │   │   │   │   ├── ScheduledTask.java
│   │   │   │   │   ├── RedisDistributedTask.java
│   │   │   │   ├── model/
│   │   │   │   ├── controller/
│   │   │   │   ├── repository/
│   │   │   │   ├── util/
│   │   │   ├── resources/
│   │   │   │   ├── application.properties
│   │   │   │   ├── static/
│   │   │   │   ├── templates/
│   │   ├── test/
│   │   │   ├── java/
│   │   │   │   ├── com.example.demo/
│   │   │   │   │   ├── DemoApplicationTests.java
│   │   │   ├── resources/
│   ├── pom.xml

示例代碼完整版

DemoApplication.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

SchedulingConfig.java

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;@Configuration
@EnableScheduling
public class SchedulingConfig {// 啟用定時任務支持
}

ScheduledTask.java

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;@Component
public class ScheduledTask {// 固定頻率:每5秒執行一次任務@Scheduled(fixedRate = 5000)public void executeTask() {System.out.println("【@Scheduled 任務】執行時間:" + LocalDateTime.now());}// Cron 表達式:每天中午12點執行一次任務@Scheduled(cron = "0 0 12 * * ?")public void executeCronTask() {System.out.println("【Cron 任務】執行時間:" + LocalDateTime.now());}
}

RedisConfig.java

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(redisConnectionFactory);// 設置 Key 的序列化器template.setKeySerializer(new StringRedisSerializer());template.setHashKeySerializer(new StringRedisSerializer());// 設置 Value 的序列化器template.setValueSerializer(new GenericJackson2JsonRedisSerializer());template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());template.afterPropertiesSet();return template;}
}

RedisDistributedTask.java

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;import java.util.Date;@Component
public class RedisDistributedTask {private final RedisTemplate<String, String> redisTemplate;@Autowiredpublic RedisDistributedTask(RedisTemplate<String, String> redisTemplate) {this.redisTemplate = redisTemplate;}@Scheduled(fixedRate = 5000)public void executeTask() {String lockKey = "distributedTaskLock";String lockValue = String.valueOf(System.currentTimeMillis());Boolean lock = redisTemplate.opsForValue().setIfAbsent(lockKey, lockValue, 5, TimeUnit.SECONDS);if (lock != null && lock) {System.out.println("分布式任務執行:" + new Date());}}
}

application.properties

# Redis 配置
spring.data.redis.host=localhost
spring.data.redis.port=6379
spring.data.redis.password=

結語

通過本文的介紹,你應該對 Spring Boot 中的定時任務實現方式有了更全面的了解。無論是簡單的單節點任務,還是復雜的分布式任務,Spring Boot 都提供了靈活的解決方案。希望這些示例代碼能幫助你快速實現定時任務的需求。

如果你有任何問題或建議,歡迎在評論區留言。

如果對你有幫助,點贊👍、收藏💖、關注🔔是我更新的動力!👋🌟🚀

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

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

相關文章

Java基礎之反射的基本使用

簡介 在運行狀態中&#xff0c;對于任意一個類&#xff0c;都能夠知道這個類的所有屬性和方法&#xff1b;對于任意一個對象&#xff0c;都能夠調用它的任意屬性和方法&#xff1b;這種動態獲取信息以及動態調用對象方法的功能稱為Java語言的反射機制。反射讓Java成為了一門動…

AI產品的上層建筑:提示詞工程、RAG與Agent

上節課我們拆解了 AI 產品的基礎設施建設&#xff0c;這節課我們聊聊上層建筑。這部分是產品經理日常工作的重頭戲&#xff0c;包含提示詞、RAG 和 Agent 構建。 用 AI 客服產品舉例&#xff0c;這三者的作用是這樣的&#xff1a; 提示詞能讓客服很有禮貌。比如它會說&#x…

藍橋杯刷題記錄【并查集001】(2024)

主要內容&#xff1a;并查集 并查集 并查集的題目感覺大部分都是模板題&#xff0c;上板子&#xff01;&#xff01; class UnionFind:def __init__(self, n):self.pa list(range(n))self.size [1]*n self.cnt ndef find(self, x):if self.pa[x] ! x:self.pa[x] self.fi…

海外SD-WAN專線網絡部署成本分析

作為支撐企業國際業務的重要基石&#xff0c;海外SD-WAN專線以其獨特的成本優勢和技術特性&#xff0c;正成為企業構建高效穩定的全球網絡架構的首選方案。本文將從多維度解構海外SD-WAN專線部署的核心成本要素&#xff0c;為企業的全球化網絡布局提供戰略參考。 一、基礎資源投…

操作系統(二):實時系統介紹與實例分析

目錄 一.概念 1.1 分類 1.2 主要指標 二.實現原理 三.主流實時系統對比 一.概念 實時系統&#xff08;Real-Time System, RTS&#xff09;是一類以時間確定性為核心目標的計算機系統&#xff0c;其設計需確保在嚴格的時間約束內完成任務響應。 1.1 分類 根據時間約束的嚴…

Golang的消息中間件選型

# Golang的消息中間件選型 消息中間件的作用 消息中間件是一種用于分布式系統中應用程序之間進行通信的基礎架構工具&#xff0c;它能夠有效地解耦發送者和接收者&#xff0c;并提供高可用性和可靠性的消息傳遞機制。在Golang應用程序中&#xff0c;選擇適合的消息中間件對于構…

大模型中的參數規模與顯卡匹配

在大模型訓練和推理中&#xff0c;顯卡&#xff08;GPU/TPU&#xff09;的選擇與模型參數量緊密相關&#xff0c;需綜合考慮顯存、計算能力和成本。以下是不同規模模型與硬件的匹配關系及優化策略&#xff1a; 一、參數規模與顯卡匹配參考表 模型參數量訓練階段推薦顯卡推理階…

帶頭結點 的單鏈表插入方法(頭插法與尾插法)

帶頭結點的單鏈表插入方法&#xff08;頭插法與尾插法&#xff09; 在單鏈表的操作中&#xff0c;插入是最常見的操作之一&#xff0c;本文介紹 帶頭結點的單鏈表 如何實現 后插法 和 前插法&#xff08;包括 插入法 和 后插數據交換法&#xff09;&#xff0c;并提供完整的 C …

Prometheus的工作流程

Prometheus 是一個開源的監控和告警系統&#xff0c;專為監控分布式系統而設計。它的工作流程主要包括以下幾個關鍵步驟&#xff1a; 1. 數據采集 (Scraping) 目標發現 (Service Discovery)&#xff1a; Prometheus 自動或手動配置監控目標&#xff0c;通過 DNS、Kubernetes、…

軟件工程面試題(二十二)

1、常用的設計模式有哪些&#xff1f;并寫出一段程序代碼 Factory(工廠模式)&#xff0c;Adapter(適配器模式)&#xff0c;Singleton(單例模式)&#xff0c;State(狀態模式)&#xff0c;Observer(觀察者模式) 等。 單例模式 public class Singleton{ private static Singleton …

【Pandas】pandas DataFrame select_dtypes

Pandas2.2 DataFrame Attributes and underlying data 方法描述DataFrame.index用于獲取 DataFrame 的行索引DataFrame.columns用于獲取 DataFrame 的列標簽DataFrame.dtypes用于獲取 DataFrame 中每一列的數據類型DataFrame.info([verbose, buf, max_cols, …])用于提供 Dat…

如何利用ATECLOUD測試平臺的芯片測試解決方案實現4644芯片的測試?

作為多通道 DC-DC 電源管理芯片的代表產品&#xff0c;4644 憑借 95% 以上的轉換效率、1% 的輸出精度及多重保護機制&#xff0c;廣泛應用于航天航空&#xff08;衛星電源系統&#xff09;、醫療設備&#xff08;MRI 梯度功放&#xff09;、工業控制&#xff08;伺服驅動單元&a…

Python 編程實戰:打造高效便捷的目錄結構生成器

Python 編程實戰&#xff1a;打造高效便捷的目錄結構生成器 相關資源文件已經打包成EXE文件&#xff0c;可雙擊直接運行程序&#xff0c;且文章末尾已附上相關源碼&#xff0c;以供大家學習交流&#xff0c;博主主頁還有更多Python相關程序案例&#xff0c;秉著開源精神的想法&…

移動端六大語言速記:第6部分 - 錯誤處理與調試

移動端六大語言速記:第6部分 - 錯誤處理與調試 本文將對比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift這六種移動端開發語言在錯誤處理與調試方面的特性,幫助開發者理解和掌握各語言的異常處理機制。 6. 錯誤處理與調試 6.1 異常處理 各語言異常處理的語法對比:…

PyTorch優化器

PyTorch 提供了多種優化算法用于神經網絡的參數優化。以下是對 PyTorch 中主要優化器的全面介紹&#xff0c;包括它們的原理、使用方法和適用場景。 一、基本優化器 1. SGD (隨機梯度下降) torch.optim.SGD(params, lr0.01, momentum0, dampening0, weight_decay0, nesterov…

C++的UDP連接解析域名地址錯誤

背景 使用c開發一個udp連接功能的腳本&#xff0c;可以接收發送數據&#xff0c;而且地址是經過內網穿透到外網的 經過 通常發送數據給目標地址&#xff0c;需要把目的地址結構化&#xff0c;要么使用inet_addr解析ip地址&#xff0c;要么使用inet_pton sockaddr_in target…

Spark,上傳文件

上傳文件 1.上傳 先使用命令打開HDFS的NameNode [roothadoop100 hadoop-3.1.3]$ sbin/start-dfs.sh [roothadoop100 hadoop-3.1.3]$ sbin/stop-dfs.sh 和YARN的Job [roothadoop101 hadoop-3.1.3]$ sbin/start-yarn.sh [roothadoop101 hadoop-3.1.3]$ sbin/stop-yarn.sh 在Nam…

如何為Linux/Android Kernel 5.4和5.15添加 fuse passthrough透傳功能 ?

背景 參考&#xff1a;Google文檔 FUSE 透傳 參考此文檔&#xff0c;目前kernel.org提供的fuse passthrough補丁在6.9版本之后&#xff0c;但想要在5.4和5.15版本內核做移植應該如何簡單點呢&#xff1f;文檔中提到 Android的內核為5.4 和 5.15版本內核做了fuse passthrough功…

Ubuntu 防火墻配置

Ubuntu 的防火墻配置可以參考文章&#xff1a;Firewall - Ubuntu Server documentation 22 端口 需要注意的是&#xff0c;在啟動防火墻之前&#xff0c;需要先開放 22 端口。 否則 SSH 將會拒絕你連接防火墻。 開放 22 端口的命令為&#xff1a;sudo ufw allow 22 添加端…

Jetson 設備卸載 OpenCV 4.5.4 并編譯安裝 OpenCV 4.2.0

?一、卸載 OpenCV 4.5.4? 清除已安裝的 OpenCV 庫? sudo apt-get purge libopencv* python3-opencv # 卸載所有APT安裝的OpenCV包?:ml-citation{ref"1,3" data"citationList"}sudo apt autoremove # 清理殘留依賴?:ml-citation{ref"1,4"…