最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

RabbitMQ TTL機(jī)制實(shí)踐建議

 更新時(shí)間:2025年10月27日 11:58:04   作者:兜兜風(fēng)d  
RabbitMQ提供的TTL(Time to Live,過(guò)期時(shí)間)特性恰好滿足這一需求,它支持對(duì)單個(gè)消息和整個(gè)隊(duì)列分別設(shè)置過(guò)期時(shí)間,靈活適配不同業(yè)務(wù)場(chǎng)景,本文給大家介紹RabbitMQ TTL機(jī)制實(shí)踐建議,感興趣的朋友跟隨小編一起看看吧

在消息中間件的應(yīng)用場(chǎng)景中,經(jīng)常需要對(duì)消息設(shè)置“過(guò)期時(shí)間”——若消息在指定時(shí)間內(nèi)未被消費(fèi),則自動(dòng)被清除或轉(zhuǎn)發(fā)至其他隊(duì)列。RabbitMQ提供的TTL(Time to Live,過(guò)期時(shí)間)特性恰好滿足這一需求,它支持對(duì)單個(gè)消息和整個(gè)隊(duì)列分別設(shè)置過(guò)期時(shí)間,靈活適配不同業(yè)務(wù)場(chǎng)景。

一、TTL機(jī)制核心概念

TTL即“消息存活時(shí)間”,指消息從進(jìn)入RabbitMQ到被自動(dòng)清除的最大時(shí)長(zhǎng)(單位:毫秒)。RabbitMQ支持兩種TTL配置方式:消息級(jí)TTL(單條消息獨(dú)立設(shè)置過(guò)期時(shí)間)和隊(duì)列級(jí)TTL(隊(duì)列中所有消息統(tǒng)一設(shè)置過(guò)期時(shí)間),兩種方式的生效邏輯和適用場(chǎng)景存在顯著差異。

1.1 TTL的核心作用

TTL的核心價(jià)值在于“自動(dòng)清理無(wú)效消息”,避免過(guò)期消息長(zhǎng)期積壓占用隊(duì)列資源,典型業(yè)務(wù)場(chǎng)景包括:

  • 電商訂單:下單后24小時(shí)未支付,訂單自動(dòng)取消,對(duì)應(yīng)的“待支付”消息需過(guò)期清除;
  • 退款申請(qǐng):發(fā)起退款后7天未被商家處理,自動(dòng)觸發(fā)退款流程,過(guò)期消息需觸發(fā)后續(xù)邏輯;
  • 臨時(shí)通知:驗(yàn)證碼、臨時(shí)授權(quán)憑證等短期有效消息,過(guò)期后無(wú)需保留。

1.2 兩種TTL配置的核心差異

消息級(jí)TTL與隊(duì)列級(jí)TTL在配置方式、生效時(shí)機(jī)和處理邏輯上完全不同,具體對(duì)比如下:

對(duì)比維度隊(duì)列級(jí)TTL消息級(jí)TTL
配置位置隊(duì)列聲明時(shí)通過(guò)參數(shù)指定,對(duì)隊(duì)列內(nèi)所有消息生效消息發(fā)送時(shí)通過(guò)屬性指定,僅對(duì)當(dāng)前消息生效
過(guò)期判定時(shí)機(jī)消息進(jìn)入隊(duì)列后,RabbitMQ定期掃描隊(duì)首消息是否過(guò)期消息即將投遞到消費(fèi)者時(shí),才判定是否過(guò)期
過(guò)期后處理過(guò)期消息立即從隊(duì)列中刪除過(guò)期消息不會(huì)立即刪除,需等待被“觸達(dá)”時(shí)判定
適用場(chǎng)景隊(duì)列內(nèi)所有消息過(guò)期時(shí)間一致(如統(tǒng)一24小時(shí)過(guò)期的訂單)單條消息需獨(dú)立設(shè)置過(guò)期時(shí)間(如不同用戶的臨時(shí)憑證)
優(yōu)先級(jí)兩者同時(shí)設(shè)置時(shí),以較小的TTL值為準(zhǔn)兩者同時(shí)設(shè)置時(shí),以較小的TTL值為準(zhǔn)

二、TTL機(jī)制實(shí)戰(zhàn):Spring Boot配置與代碼實(shí)現(xiàn)

下面基于Spring Boot框架,分別演示隊(duì)列級(jí)TTL和消息級(jí)TTL的配置、消息發(fā)送與消費(fèi)驗(yàn)證,幫助理解兩種TTL的實(shí)際生效效果。

2.1 環(huán)境準(zhǔn)備

  • 依賴引入:在pom.xml中添加Spring AMQP依賴(已集成RabbitMQ客戶端)
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId> <!-- 用于接口測(cè)試 -->
</dependency>
  • RabbitMQ連接配置:在application.yml中配置RabbitMQ地址(文檔中示例地址)
spring:
  rabbitmq:
    addresses: amqp://study:study@110.41.51.65:5672/bite 
    listener:
      simple:
        acknowledge-mode: manual # 手動(dòng)確認(rèn)模式,便于觀察消息狀態(tài)

2.2 隊(duì)列級(jí)TTL:統(tǒng)一設(shè)置隊(duì)列內(nèi)所有消息的過(guò)期時(shí)間

隊(duì)列級(jí)TTL通過(guò)在聲明隊(duì)列時(shí)添加x-message-ttl參數(shù)實(shí)現(xiàn),隊(duì)列創(chuàng)建后,所有進(jìn)入該隊(duì)列的消息都會(huì)繼承此過(guò)期時(shí)間。

2.2.1 聲明隊(duì)列、交換機(jī)與綁定關(guān)系

文檔中提到,隊(duì)列級(jí)TTL可通過(guò)QueueBuilder.ttl()withArguments()兩種方式配置,這里采用更簡(jiǎn)潔的ttl()方法:

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TtlQueueConfig {
    // 常量:交換機(jī)、隊(duì)列名稱(參考文檔命名)
    public static final String TTL_EXCHANGE_NAME = "ttl_exchange";
    public static final String TTL_QUEUE_WITH_TTL = "ttl_queue2"; // 帶TTL的隊(duì)列
    public static final String TTL_QUEUE_NO_TTL = "ttl_queue"; // 不帶TTL的隊(duì)列(用于對(duì)比)
    // 1. 聲明Fanout交換機(jī)(廣播模式,確保消息能被多個(gè)隊(duì)列接收)
    @Bean("ttlExchange")
    public FanoutExchange ttlExchange() {
        return FanoutExchangeBuilder.fanoutExchange(TTL_EXCHANGE_NAME)
                .durable(true) // 持久化:服務(wù)重啟后交換機(jī)不丟失
                .build();
    }
    // 2. 聲明帶TTL的隊(duì)列(設(shè)置20秒過(guò)期)
    @Bean("ttlQueueWithTtl")
    public Queue ttlQueueWithTtl() {
        // 方式1:使用QueueBuilder.ttl()(文檔推薦,簡(jiǎn)潔)
        return QueueBuilder.durable(TTL_QUEUE_WITH_TTL)
                .ttl(20 * 1000) // 20秒過(guò)期,單位:毫秒
                .build();
        // 方式2:使用withArguments() //底層方式
        // Map<String, Object> args = new HashMap<>();
        // args.put("x-message-ttl", 20000); // 20秒
        // return QueueBuilder.durable(TTL_QUEUE_WITH_TTL)
        //         .withArguments(args)
        //         .build();
    }
    // 3. 聲明不帶TTL的隊(duì)列(用于對(duì)比過(guò)期效果)
    @Bean("ttlQueueNoTtl")
    public Queue ttlQueueNoTtl() {
        return QueueBuilder.durable(TTL_QUEUE_NO_TTL)
                .build();
    }
    // 4. 綁定:交換機(jī)與帶TTL的隊(duì)列
    @Bean("bindingWithTtl")
    public Binding bindingWithTtl(
            @Qualifier("ttlExchange") FanoutExchange exchange,
            @Qualifier("ttlQueueWithTtl") Queue queue) {
        return BindingBuilder.bind(queue).to(exchange);
    }
    // 5. 綁定:交換機(jī)與不帶TTL的隊(duì)列
    @Bean("bindingNoTtl")
    public Binding bindingNoTtl(
            @Qualifier("ttlExchange") FanoutExchange exchange,
            @Qualifier("ttlQueueNoTtl") Queue queue) {
        return BindingBuilder.bind(queue).to(exchange);
    }
}

2.2.2 發(fā)送消息(無(wú)需額外設(shè)置TTL)

隊(duì)列級(jí)TTL的消息發(fā)送無(wú)需額外配置,只需發(fā)送到對(duì)應(yīng)的交換機(jī),消息會(huì)自動(dòng)繼承隊(duì)列的TTL:

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/producer")
public class TtlProducerController {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    // 發(fā)送消息到TTL交換機(jī)(同時(shí)投遞到帶TTL和不帶TTL的隊(duì)列)
    @RequestMapping("/ttl/queue")
    public String sendQueueTtlMessage() {
        String message = "Queue TTL test: " + System.currentTimeMillis();
        // Fanout交換機(jī)無(wú)需指定routingKey,設(shè)為空字符串
        rabbitTemplate.convertAndSend(TtlQueueConfig.TTL_EXCHANGE_NAME, "", message);
        return "消息發(fā)送成功(隊(duì)列級(jí)TTL):" + message;
    }
}

2.2.3 驗(yàn)證過(guò)期效果(參考文檔測(cè)試步驟)

  1. 發(fā)送消息前:先停止消費(fèi)者(避免消息被立即消費(fèi)),調(diào)用接口http://127.0.0.1:8080/producer/ttl/queue;
  2. 觀察RabbitMQ管理界面
    • 帶TTL的隊(duì)列(ttl_queue2):Ready數(shù)為1(消息已進(jìn)入隊(duì)列),Features列顯示TTL標(biāo)識(shí)(文檔中提到的隊(duì)列特性標(biāo)識(shí));
    • 不帶TTL的隊(duì)列(ttl_queue):Ready數(shù)也為1,但無(wú)TTL標(biāo)識(shí);
  3. 等待20秒后
    • 帶TTL的隊(duì)列(ttl_queue2):Ready數(shù)變?yōu)?(消息過(guò)期被自動(dòng)刪除);
    • 不帶TTL的隊(duì)列(ttl_queue):Ready數(shù)仍為1(消息未過(guò)期,需手動(dòng)消費(fèi)或刪除)。

2.3 消息級(jí)TTL:為單條消息獨(dú)立設(shè)置過(guò)期時(shí)間

消息級(jí)TTL通過(guò)在發(fā)送消息時(shí)設(shè)置expiration屬性實(shí)現(xiàn),每條消息可單獨(dú)指定過(guò)期時(shí)間,優(yōu)先級(jí)高于隊(duì)列級(jí)TTL(若兩者同時(shí)設(shè)置,取較小值)。

2.3.1 發(fā)送消息(設(shè)置單條消息TTL)

無(wú)需額外聲明新隊(duì)列,復(fù)用2.2中的ttl_queue(不帶TTL的隊(duì)列),發(fā)送時(shí)通過(guò)MessagePostProcessor設(shè)置expiration屬性:

import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/producer")
public class TtlProducerController {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    // 發(fā)送消息級(jí)TTL的消息(10秒過(guò)期)
    @RequestMapping("/ttl/message")
    public String sendMessageTtlMessage() {
        String message = "Message TTL test: " + System.currentTimeMillis();
        String ttlTime = "10000"; // 10秒過(guò)期,單位:毫秒(必須為字符串)
        // 通過(guò)MessagePostProcessor設(shè)置消息的expiration屬性
        rabbitTemplate.convertAndSend(
                TtlQueueConfig.TTL_EXCHANGE_NAME, 
                "", 
                message,
                messagePostProcessor -> {
                    // 設(shè)置消息過(guò)期時(shí)間
                    messagePostProcessor.getMessageProperties().setExpiration(ttlTime);
                    return messagePostProcessor;
                }
        );
        return "消息發(fā)送成功(消息級(jí)TTL):" + message;
    }
}

2.3.2 驗(yàn)證過(guò)期效果(關(guān)鍵差異點(diǎn))

  1. 發(fā)送消息后:調(diào)用接口http://127.0.0.1:8080/producer/ttl/message,觀察ttl_queue(不帶TTL的隊(duì)列)的Ready數(shù)為1;
  2. 等待10秒內(nèi):若啟動(dòng)消費(fèi)者消費(fèi)該隊(duì)列消息,即使消息未到10秒,也會(huì)被正常消費(fèi)(“過(guò)期判定時(shí)機(jī):投遞前”);
  3. 等待10秒后
    • 若未啟動(dòng)消費(fèi)者:消息不會(huì)立即刪除,Ready數(shù)仍為1(與隊(duì)列級(jí)TTL的“立即刪除”不同);
    • 啟動(dòng)消費(fèi)者后:消息被投遞前判定為過(guò)期,直接被刪除,消費(fèi)者無(wú)法接收(“消息級(jí)TTL延遲刪除特性”)。

三、TTL機(jī)制的關(guān)鍵原理與常見問(wèn)題

3.1 為什么消息級(jí)TTL不會(huì)立即刪除過(guò)期消息?

兩種TTL的底層處理邏輯差異:

  • 隊(duì)列級(jí)TTL:隊(duì)列內(nèi)的消息按“先進(jìn)先出”(FIFO)排序,過(guò)期消息一定在隊(duì)列頭部(因?yàn)樗邢TL相同),RabbitMQ只需定期掃描隊(duì)首消息,若過(guò)期則直接刪除,效率高;
  • 消息級(jí)TTL:每條消息的TTL不同,過(guò)期消息可能分布在隊(duì)列任意位置,若要實(shí)時(shí)刪除所有過(guò)期消息,需掃描整個(gè)隊(duì)列,會(huì)嚴(yán)重影響RabbitMQ性能。因此,RabbitMQ采用“懶加載”策略——僅在消息即將投遞到消費(fèi)者時(shí),才判定是否過(guò)期,過(guò)期則刪除,未過(guò)期則正常投遞。

示例:若隊(duì)列中有3條消息,TTL分別為20秒、10秒、30秒,消息級(jí)TTL下,10秒過(guò)期的消息會(huì)在隊(duì)列中間,只有當(dāng)它被推到隊(duì)首并準(zhǔn)備投遞時(shí),才會(huì)被判定為過(guò)期并刪除。

3.2 TTL設(shè)置為0的特殊含義

若將TTL設(shè)置為0,表示“消息必須立即被投遞”——如果此時(shí)隊(duì)列有消費(fèi)者在線,消息會(huì)被正常投遞;如果沒有消費(fèi)者,消息會(huì)被立即丟棄(不會(huì)進(jìn)入隊(duì)列)。

代碼示例

// 發(fā)送TTL=0的消息
@RequestMapping("/ttl/zero")
public String sendTtlZeroMessage() {
    String message = "TTL=0 test: " + System.currentTimeMillis();
    rabbitTemplate.convertAndSend(
            TtlQueueConfig.TTL_EXCHANGE_NAME,
            "",
            message,
            msgPostProcessor -> {
                msgPostProcessor.getMessageProperties().setExpiration("0"); // TTL=0
                return msgPostProcessor;
            }
    );
    return "TTL=0消息發(fā)送完成(無(wú)消費(fèi)者則丟棄)";
}

3.3 TTL與死信隊(duì)列的結(jié)合(文檔延伸場(chǎng)景)

TTL的核心作用是“清除過(guò)期消息”,但實(shí)際業(yè)務(wù)中,過(guò)期消息往往需要進(jìn)一步處理(如訂單過(guò)期后觸發(fā)“取消訂單”邏輯),此時(shí)需結(jié)合死信隊(duì)列(DLQ)

  1. 為帶TTL的隊(duì)列綁定死信交換機(jī)(DLX);
  2. 消息過(guò)期后,不會(huì)被直接刪除,而是被轉(zhuǎn)發(fā)到死信隊(duì)列;
  3. 消費(fèi)者監(jiān)聽死信隊(duì)列,處理過(guò)期消息(如執(zhí)行取消訂單、恢復(fù)庫(kù)存等邏輯)。

配置示例

// 為帶TTL的隊(duì)列綁定死信交換機(jī)
@Bean("ttlQueueWithDlx")
public Queue ttlQueueWithDlx() {
    return QueueBuilder.durable("ttl_queue_with_dlx")
            .ttl(20000) // 20秒過(guò)期
            .deadLetterExchange("dlx_exchange") // 綁定死信交換機(jī)
            .deadLetterRoutingKey("dlx.routing.key") // 死信路由鍵
            .build();
}

四、TTL機(jī)制的業(yè)務(wù)實(shí)踐建議

4.1 選擇合適的TTL配置方式

  • 優(yōu)先用隊(duì)列級(jí)TTL:若業(yè)務(wù)中所有消息的過(guò)期時(shí)間一致(如“所有訂單24小時(shí)過(guò)期”),選擇隊(duì)列級(jí)TTL,性能更高(無(wú)需掃描整個(gè)隊(duì)列);
  • 必要時(shí)用消息級(jí)TTL:若單條消息需獨(dú)立設(shè)置過(guò)期時(shí)間(如“不同用戶的臨時(shí)憑證有效期不同”),再使用消息級(jí)TTL,需注意“延遲刪除”特性可能導(dǎo)致的隊(duì)列消息積壓。

4.2 避免過(guò)度使用TTL

  • TTL會(huì)增加RabbitMQ的處理開銷(尤其是隊(duì)列級(jí)TTL的定期掃描),非必要場(chǎng)景(如消息無(wú)需過(guò)期)不建議設(shè)置TTL;
  • 若僅需“臨時(shí)存儲(chǔ)消息”,可通過(guò)消費(fèi)者主動(dòng)過(guò)濾過(guò)期消息(如消息中攜帶“創(chuàng)建時(shí)間”,消費(fèi)時(shí)判斷是否過(guò)期),減少RabbitMQ的負(fù)擔(dān)。

4.3 監(jiān)控TTL隊(duì)列狀態(tài)

  • 通過(guò)RabbitMQ管理界面或監(jiān)控工具(如Prometheus+Grafana),關(guān)注帶TTL隊(duì)列的Ready數(shù)、Expired消息數(shù)(過(guò)期消息統(tǒng)計(jì));
  • 若發(fā)現(xiàn)Ready數(shù)持續(xù)增加且Expired數(shù)為0,需排查是否存在“消息級(jí)TTL未被觸發(fā)”的情況(如隊(duì)列無(wú)消費(fèi)者,消息無(wú)法被投遞判定過(guò)期)。

到此這篇關(guān)于RabbitMQ TTL機(jī)制實(shí)踐建議的文章就介紹到這了,更多相關(guān)RabbitMQ TTL機(jī)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot公共模塊配置方式

    SpringBoot公共模塊配置方式

    這篇文章主要介紹了SpringBoot公共模塊配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • springData使用QueryDsl的示例代碼

    springData使用QueryDsl的示例代碼

    這篇文章主要介紹了springData使用QueryDsl的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • MyBatis?在?Spring?Boot?中的實(shí)踐記錄

    MyBatis?在?Spring?Boot?中的實(shí)踐記錄

    MyBatis是持久層框架,簡(jiǎn)化JDBC開發(fā),通過(guò)接口+XML/注解實(shí)現(xiàn)數(shù)據(jù)訪問(wèn),動(dòng)態(tài)代理生成實(shí)現(xiàn)類,支持增刪改查及參數(shù)映射,配置數(shù)據(jù)庫(kù)連接與駝峰轉(zhuǎn)換,接下來(lái)通過(guò)本文給大家介紹破繭JDBC:MyBatis在Spring?Boot中的輕量實(shí)踐指南,感興趣的哦朋友一起看看吧
    2025-08-08
  • Java 梳理總結(jié)關(guān)于static關(guān)鍵字常見問(wèn)題

    Java 梳理總結(jié)關(guān)于static關(guān)鍵字常見問(wèn)題

    static關(guān)鍵字基本概念我們可以一句話來(lái)概括:方便在沒有創(chuàng)建對(duì)象的情況下來(lái)進(jìn)行調(diào)用。也就是說(shuō):被static關(guān)鍵字修飾的不需要?jiǎng)?chuàng)建對(duì)象去調(diào)用,直接根據(jù)類名就可以去訪問(wèn),讓我們來(lái)了解一下你可能還不知道情況
    2022-04-04
  • 詳解如何快速定位和解決JSON錯(cuò)誤(以Protobuf的JsonFormat.ParseException為例)

    詳解如何快速定位和解決JSON錯(cuò)誤(以Protobuf的JsonFormat.ParseException為例)

    在開發(fā)過(guò)程中,JSON數(shù)據(jù)的解析是一個(gè)常見的操作,尤其是在微服務(wù)架構(gòu)中,服務(wù)之間的通信通常依賴于JSON格式的數(shù)據(jù),然而,JSON數(shù)據(jù)的格式錯(cuò)誤往往會(huì)導(dǎo)致解析失敗,進(jìn)而引發(fā)系統(tǒng)異常,本文將以一個(gè)實(shí)際的錯(cuò)誤案例為例,詳細(xì)講解如何快速定位和解決JSON解析錯(cuò)誤
    2025-03-03
  • Java使用Spire.Doc for Java實(shí)現(xiàn)Word修訂的批量接受與拒絕

    Java使用Spire.Doc for Java實(shí)現(xiàn)Word修訂的批量接受與拒絕

    在Java后端環(huán)境下(如文檔管理系統(tǒng)、OA流程引擎),通常需要程序化處理包含修訂標(biāo)記的Word文檔,本文將以 Spire.Doc for Java 為例,介紹如何通過(guò)幾行代碼實(shí)現(xiàn)修訂的批量接受與拒絕,
    2026-05-05
  • Java虛擬機(jī)(JVM)的自帶工具使用詳解

    Java虛擬機(jī)(JVM)的自帶工具使用詳解

    文章介紹了Java開發(fā)中常用的幾個(gè)工具及其基本用法,包括jps、jstat、jinfo、jmap、jhat和jstack,這些工具幫助開發(fā)者監(jiān)控和分析Java應(yīng)用程序的性能和內(nèi)存使用情況,對(duì)于排查問(wèn)題和優(yōu)化性能非常有幫助
    2026-01-01
  • Java實(shí)現(xiàn)并發(fā)執(zhí)行定時(shí)任務(wù)并手動(dòng)控制開始結(jié)束

    Java實(shí)現(xiàn)并發(fā)執(zhí)行定時(shí)任務(wù)并手動(dòng)控制開始結(jié)束

    這篇文章主要介紹了Java實(shí)現(xiàn)并發(fā)執(zhí)行定時(shí)任務(wù)并手動(dòng)控制開始結(jié)束,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • mapstruct中的@Mapper注解的基本用法

    mapstruct中的@Mapper注解的基本用法

    在MapStruct中,@Mapper注解是核心注解之一,用于標(biāo)記一個(gè)接口或抽象類為MapStruct的映射器(Mapper),本文給大家介紹mapstruct中的@Mapper注解的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2025-06-06
  • @Autowired注入為null的原因與解決方法

    @Autowired注入為null的原因與解決方法

    我們經(jīng)常會(huì)通過(guò)@Autowired注解將某個(gè)類注到另一個(gè)類中,但是會(huì)發(fā)現(xiàn)注不進(jìn)去,報(bào)NULL,所以本文就給大家分析了@Autowired 注入為null 的原因與解決方法,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

隆化县| 定边县| 临沭县| 郴州市| 尼木县| 北安市| 专栏| 子长县| 德清县| 萨嘎县| 祁东县| 濮阳县| 江口县| 武强县| 满城县| 库伦旗| 星座| 阿尔山市| 济源市| 高要市| 普安县| 客服| 曲麻莱县| 峨山| 沙田区| 曲水县| 大同市| 武冈市| 凉城县| 精河县| 公主岭市| 施秉县| 台安县| 阿克苏市| 措勤县| 和平区| 洛宁县| 理塘县| 洛阳市| 镇江市| 成都市|