成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

高效初始化!Spring Boot 3.3借助DAG加速Spring Beans加載!

開發 前端
本文詳細介紹了如何在 Spring Boot 3.3 中實現異步執行任務的最佳實踐。我們通過配置 YAML 文件、創建配置屬性類、實現異步任務服務類和控制器,最后使用前端 jQuery 調用異步接口,展示了異步任務的完整實現流程。

在現代軟件開發中,異步編程已成為提升系統性能和用戶體驗的重要手段。特別是在高并發場景下,異步任務的處理能夠有效降低響應時間,提高系統的可伸縮性。Spring Boot 3.3 提供了便捷的異步編程支持,使得開發者可以輕松實現高效的任務調度。本篇文章將詳細探討如何在 Spring Boot 項目中優雅地實現異步任務,包括配置、實現和調用的最佳實踐。

運行效果:

圖片圖片

若想獲取項目完整代碼以及其他文章的項目源碼,且在代碼編寫時遇到問題需要咨詢交流,歡迎加入下方的知識星球。

在本文中,我們將通過具體的代碼示例,講解如何配置 YAML 文件、創建配置屬性類、實現異步任務的服務類,以及如何通過前端頁面調用異步接口。通過這些步驟,你將能夠構建一個響應快速且高效的 Spring Boot 應用。

項目結構

首先,確保你的項目結構如下:

src
├── main
│   ├── java
│   │   └── com
│   │       └── icoderoad
│   │           └── async
│   │               ├── AsyncApplication.java
│   │               ├── config
│   │               │   ├── AsyncConfig.java
│   │               │   └── TaskProperties.java
│   │               ├── controller
│   │               │   └── TaskController.java
│   │               └── service
│   │                   └── TaskService.java
│   └── resources
│       ├── application.yml
│       └── templates
│           └── index.html
└── pom.xml

項目 pom.xml 配置

確保在 pom.xml 中引入必要的依賴:

<?xml versinotallow="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.3.4</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.icoderoad</groupId>
	<artifactId>async-spring-boot</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>async-spring-boot</name>
	<description>Demo project for Spring Boot</description>
	
	<properties>
		<java.version>17</java.version>
	</properties>
	<dependencies>
		<dependency>
	        <groupId>org.springframework.boot</groupId>
	        <artifactId>spring-boot-starter-web</artifactId>
	    </dependency>
	    <dependency>
	        <groupId>org.springframework.boot</groupId>
	        <artifactId>spring-boot-starter-thymeleaf</artifactId>
	    </dependency>
	    <dependency>
	        <groupId>org.projectlombok</groupId>
	        <artifactId>lombok</artifactId>
	        <optional>true</optional>
	    </dependency>
	    <dependency>
	        <groupId>org.springframework.boot</groupId>
	        <artifactId>spring-boot-starter-validation</artifactId>
	    </dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

YAML 屬性文件配置

在 src/main/resources/application.yml 中添加以下配置:

server:
  port: 8080
  
task:
  pool:
    core-size: 5  # 線程池核心大小
    max-size: 10   # 線程池最大大小
    queue-capacity: 25  # 隊列容量
    timeout: 5000  # 任務超時時間,單位毫秒

創建配置屬性類

創建 TaskProperties.java 來讀取 YAML 配置:

package com.icoderoad.async.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import lombok.Data;

@Data
@Component
@ConfigurationProperties(prefix = "task.pool")  // 讀取 task 下的配置
public class TaskProperties {
	
    private int coreSize;
    
    private int maxSize;
    
    private int queueCapacity;
    
    private int timeout;
    
}

創建異步配置類

在 AsyncConfig.java 中使用配置屬性類進行任務初始化:

package com.icoderoad.async.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

@Configuration
@EnableAsync  // 啟用異步功能
@EnableScheduling  // 啟用定時任務
public class AsyncConfig {

    @Autowired
    private TaskProperties taskProperties;

    @Bean
    public ThreadPoolTaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(taskProperties.getCoreSize());
        executor.setMaxPoolSize(taskProperties.getMaxSize());
        executor.setQueueCapacity(taskProperties.getQueueCapacity());
        executor.setThreadNamePrefix("Async-");
        executor.initialize();
        return executor;
    }
}

創建服務類

在 TaskService.java 中創建更典型的異步任務配置:

package com.icoderoad.async.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import com.icoderoad.async.config.TaskProperties;

import java.util.concurrent.CompletableFuture;

@Service
public class TaskService {

    @Autowired
    private TaskProperties taskProperties;

    @Async  // 表示該方法是異步執行的
    public CompletableFuture<String> executeAsyncTask() {
        try {
            Thread.sleep(taskProperties.getTimeout());  // 模擬耗時操作
            return CompletableFuture.completedFuture("異步任務執行完成!");
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            return CompletableFuture.completedFuture("任務被中斷!");
        }
    }
}

創建控制器

在 TaskController.java 中創建一個控制器來調用異步服務并返回 JSON 格式的接口:

package com.icoderoad.async.controller;

import java.util.concurrent.CompletableFuture;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.icoderoad.async.service.TaskService;

@RestController
@RequestMapping("/tasks")
public class TaskController {

    private final TaskService taskService;

    public TaskController(TaskService taskService) {
        this.taskService = taskService;
    }

    @PostMapping("/async-task")
    public ResponseEntity<CompletableFuture<String>> asyncTask() {
        CompletableFuture<String> result = taskService.executeAsyncTask();  // 調用異步任務
        return ResponseEntity.ok(result);
    }
}

創建前端頁面

在 src/main/resources/templates/index.html 中添加以下代碼,并使用 jQuery 調用 JSON 接口:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>異步任務示例</title>
    <link rel="stylesheet" >
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <h1>異步任務示例</h1>
    <button id="startTask" class="btn btn-primary">開始異步任務</button>
    <p id="result"></p>
</div>

<script>
    $(document).ready(function() {
        $('#startTask').click(function() {
            $.ajax({
                url: '/tasks/async-task',
                type: 'POST',
                contentType: 'application/json',  // 設置請求內容類型為 JSON
                dataType: 'json',  // 期望的響應數據類型
                success: function(data) {
                    $('#result').text(data);  // 顯示返回結果
                },
                error: function() {
                    $('#result').text('任務執行失敗!');
                }
            });
        });
    });
</script>
</body>
</html>

啟動測試

  1. 啟動 Spring Boot 應用:運行 AsyncApplication.java,確保應用成功啟動。
  2. 訪問前端頁面:打開瀏覽器并訪問 http://localhost:8080/index.html。
  3. 點擊按鈕:點擊“開始異步任務”按鈕,觸發異步任務的執行。
  4. 觀察行為:

立即返回:在點擊按鈕后,接口會立即返回,而不是等任務執行完。這是因為任務是異步執行的。

注意

這種設計允許用戶在等待異步任務完成時,繼續與頁面進行其他交互,提升了用戶體驗。這意味著,即使后臺任務還在執行,用戶也可以繼續操作頁面,而不會被阻塞。這樣,可以在高并發場景下有效提升系統的響應能力。

結論

本文詳細介紹了如何在 Spring Boot 3.3 中實現異步執行任務的最佳實踐。我們通過配置 YAML 文件、創建配置屬性類、實現異步任務服務類和控制器,最后使用前端 jQuery 調用異步接口,展示了異步任務的完整實現流程。

異步任務不僅提高了系統的響應速度,還能夠有效管理后臺處理任務,降低用戶等待時間。通過合理的線程池配置和異步執行的設計,我們可以使應用程序在高并發情況下依然表現出色。希望本文能為大家在實際項目中實現異步處理提供有效的參考,提升開發效率和用戶體驗。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2024-10-29 11:27:27

2024-10-30 08:05:01

Spring參數電子簽章

2024-10-07 08:18:05

SpringBOM管理

2023-05-03 23:48:24

Spring容器初始化

2024-03-05 18:21:02

LFSpring初始化

2025-03-14 10:37:24

SpringSpring IOC容器

2025-05-21 10:09:09

Spring 5.xIOC編程

2024-09-26 09:28:06

內存Spring

2021-07-12 12:20:08

Spring初始化方案

2024-03-08 08:26:25

類的加載Class文件Java

2024-10-11 11:46:40

2024-11-29 07:42:47

2024-01-23 08:47:13

BeanSpring加載方式

2019-01-15 11:40:14

開發技能代碼

2024-09-05 09:35:58

CGLIBSpring動態代理

2025-04-28 08:39:48

Spring初始化開發

2023-11-12 23:08:17

C++初始化

2022-11-09 07:49:12

Records類聲明代碼

2025-04-25 11:25:00

SpringBean初始化

2025-02-05 12:28:44

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品无码久久久久久久动漫 | 国产激情视频 | 91婷婷韩国欧美一区二区 | 午夜一区二区三区 | 亚洲网址在线观看 | 久久国产精品免费一区二区三区 | 91久久视频 | 日本精品裸体写真集在线观看 | 亚洲综合首页 | 国产亚洲一区二区三区 | av一区在线 | 日日久| 亚洲网站在线播放 | 成人国产一区二区三区精品麻豆 | 在线第一页 | 欧美久久一级特黄毛片 | 久久久91| 黄色大片网 | 成人在线精品视频 | 日本成人中文字幕在线观看 | 国产精品视频久久 | 国产真实精品久久二三区 | 精品1区2区 | 国产精品久久久久一区二区三区 | www.玖玖玖 | 久久九精品 | 91免费观看国产 | 黄免费观看视频 | 红色av社区 | 精品欧美一区二区精品久久久 | 91精品国产91久久久久久三级 | 亚洲欧美日韩国产综合 | 欧美一区二区三区在线播放 | 一本大道久久a久久精二百 国产成人免费在线 | 亚洲精品国产电影 | 91精品国产乱码久久久久久久 | 久久久久久综合 | 在线观看国产视频 | 午夜免费视频 | 在线观看免费av网 | 一区精品视频在线观看 |