溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

springboot怎么解決多個(gè)deploy執(zhí)行schedule定時(shí)器導(dǎo)致并發(fā)問(wèn)題

發(fā)布時(shí)間:2021-06-29 11:43:58 來(lái)源:億速云 閱讀:634 作者:chen 欄目:大數(shù)據(jù)

這篇文章主要講解了“springboot怎么解決多個(gè)deploy執(zhí)行schedule定時(shí)器導(dǎo)致并發(fā)問(wèn)題”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“springboot怎么解決多個(gè)deploy執(zhí)行schedule定時(shí)器導(dǎo)致并發(fā)問(wèn)題”吧!

springboot部署多個(gè)相同服務(wù)deploy,當(dāng)服務(wù)中有定時(shí)器時(shí),一旦定時(shí)器觸發(fā)時(shí)服務(wù)會(huì)同時(shí)執(zhí)行,從而產(chǎn)生并發(fā)問(wèn)題。解決方案:

1.在定時(shí)器類添加@Profile 注解 指定實(shí)例執(zhí)行定時(shí)器。

@Component
@Configuration
@EnableScheduling   // 1.開(kāi)啟定時(shí)任務(wù)
@Profile("deploy01")
public class ScheduleTaskService {

....
}

它操作簡(jiǎn)單,靈活。只需要添加@Profile注解,但它的局限性也很明顯,只有指定服務(wù)為deploy01時(shí)才會(huì)加載定時(shí)器處理類,一旦deploy01 掛掉或者未啟動(dòng)就無(wú)法執(zhí)行。所以并不能達(dá)到高可用。

2.利用redis 緩存機(jī)制

   @Scheduled(cron = "0 0 0/1 * * ? ")  //每1小時(shí)執(zhí)行一次
    public void insertPriRecoverCall() throws InterruptedException {
        String deployKey="deployName";
        redisService.set(deployKey,deployId,1,TimeUnit.HOURS);
        Object o = redisService.get(deployKey);
        if (o!=null){
            String deployName = o.toString();
            if (deployId.equals(deployName)){
                logger.info(deployName+" is running .....");
                ////業(yè)務(wù)代碼  
          }
        }
    }

先獲取服務(wù)實(shí)例Id,緩存到redis中。redis 是key-value 鍵值對(duì)的緩存機(jī)制。在相同key下只會(huì)保留一個(gè)deployId ,再取出緩存中deployId和服務(wù)實(shí)例id 比較。相同就繼續(xù)執(zhí)行業(yè)務(wù)代碼,不同則直接過(guò)濾。這樣既可以防止并發(fā)問(wèn)題,又可以實(shí)現(xiàn)高可用。

感謝各位的閱讀,以上就是“springboot怎么解決多個(gè)deploy執(zhí)行schedule定時(shí)器導(dǎo)致并發(fā)問(wèn)題”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)springboot怎么解決多個(gè)deploy執(zhí)行schedule定時(shí)器導(dǎo)致并發(fā)問(wèn)題這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI