利用Linux中的crontab實現分散式項目定時任務

来源:https://www.cnblogs.com/a347911/archive/2018/01/18/8310307.html
-Advertisement-
Play Games

@Controller @RequestMapping("/task/topic") public class TopicQuartzController { protected Logger logger = LoggerFactory.getLogger(TopicQuartzControlle... ...


@Controller
@RequestMapping("/task/topic")
public class TopicQuartzController {
	protected Logger logger = LoggerFactory.getLogger(TopicQuartzController.class);
	@Autowired
	private LiveTopicService liveTopicService;

	@RequestMapping("execute")
	@ResponseBody
	public CommonResult execute(HttpServletRequest request,HttpServletResponse response,String type){
		long t1 = System.currentTimeMillis();
		logger.error("topic定時器執行開始"+type);
		CommonResult result = new CommonResult();
		if(QlchatUtil.isEmpty(type)){
			result.setMsg("參數為空");
			result.setSuccess(false);
			return result;
		}
		try {
			switch (type) {
				case "autoEndTopic":
					this.autoEndTopic();
					break;
				case "oneWeek":
					this.endTopicOneWeek();
					break;
				default:
					break;
			}
			result.setSuccess(true);
			result.setMsg("執行完成" + type);
		} catch (Exception e) {
			logger.error("topic定時器執行異常" + type, e);
			result.setMsg("topic定時器執行異常" + type);
			result.setSuccess(false);
		}
		long t2 = System.currentTimeMillis();
		logger.error("topic定時器執行結束"+type+",耗時="+(t2 - t1) + "ms");
		return result;
	}

	private void autoEndTopic(){
		String sql = "SELECT id_ topicId FROM skg_live_topic lt WHERE lt.`status_` = 'beginning' AND lt.end_time_ IS NOT NULL AND lt.`end_time_` < NOW()";
		JdbcTemplate jdbcTemplate = SpringHelper.getBean(JdbcTemplate.class);
		List<Map<String, Object>> resultMap = jdbcTemplate.queryForList(sql);
		for (Map<String, Object> map : resultMap) {
			String topicId = String.valueOf(map.get("topicId"));
			try {
				LiveTopicPo liveTopicPo = liveTopicService.loadCache(topicId);
				liveTopicService.endTopic(liveTopicPo, liveTopicPo.getCreateBy());
			}catch (Exception e){
				logger.error("autoEndTopic異常" + topicId, e);
			}
		}
	}

	/**
	 * 結束之前的沒有結束時間的話題,只跑一周
	 */
	private void endTopicOneWeek(){
		String sql = "SELECT id_ topicId FROM skg_live_topic lt WHERE lt.`status_` = 'beginning' AND lt.end_time_ IS NULL AND lt.start_time_ <= (NOW() - interval 48 hour)";
		JdbcTemplate jdbcTemplate = SpringHelper.getBean(JdbcTemplate.class);
		List<Map<String, Object>> resultMap = jdbcTemplate.queryForList(sql);
		for (Map<String, Object> map : resultMap) {
			String topicId = String.valueOf(map.get("topicId"));
			try {
				LiveTopicPo liveTopicPo = liveTopicService.loadCache(topicId);
				liveTopicService.endTopic(liveTopicPo, liveTopicPo.getCreateBy());
			}catch (Exception e){
				logger.error("autoEndTopic異常" + topicId, e);
			}
		}
	}
}
像上面這樣寫好定時任務的邏輯類

創建一個contab.txt

 

*/30 * * * * curl 'http://10.47.161.40:8181/task/topic/execute.do?type=oneWeek'
*/30 * * * * curl 'http://10.47.161.40:8181/task/topic/execute.do?type=autoEndTopic'
裡面這樣調用方法去執行即可實現分散式項目的定時任務
 

上面即每30分鐘執行一次

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本篇開始正式做功能,我在開發拼團提醒之前,拼多多並沒有放出拼團人數不足就提醒賣家的功能。 有這個想法主要來源於朋友的抱怨,我想這應該是大部分賣家的心聲吧。 經過分析,拿到了幾個api,不要問我api怎麼拿到的,這不是本系列的內容。 介面1:http://apiv4.yangkeduo.com/mal ...
  • 本人開發socket通訊多年了,一直乾著“重覆發明輪子”工作,這種工作方式效率低下,容易出錯! 重覆的事情做多了,也會出現“靈光“!何不自己設計一套中間件,在此基礎上,再設計應用層協議。就可以避免“重覆發明輪子”。 ...
  • 在一個項目開始前,需求整理大概要占到整個項目周期15%甚至30%的比重,可以說需求理得越清楚,後續開發中返工幾率越小。在一個項目中,開發新功能的花費的精力要遠遠小於修改功能的精力,這基本是一個共識。老祖宗說,謀定而後動,不是沒有道理的。 一般項目開發中,前期會包含商務活動、需求調研,需求交底的過程。 ...
  • 在上一節,我們完成了一個項目搭建,我們看到的是一個項目的分層架子,那接下來每一層做什麼以及需要引用哪些內容呢?在本節內容我們還逐步拆分每一層的功能,順帶添加package包 Trump.Domain 在這一層,主要是定義領域模型,我們前面也說,Domain是不依賴任何層的,唯一可能存在的依賴也就是外 ...
  • 首先,下載文件navicat120_mysql_cs_x64.tar.gz,然後用命令 解壓。解壓以後,進入解壓目錄,運行start_navicat,就可以運行了。 運行以後,可能出現亂碼,這是因為預設的是英文,只識別UTF8的英文編碼。用gedit打開文件start_navicat,把 改成 然後 ...
  • 一.下載Linux版本的jdbc與tomcat 1.1 下載Linux版本的jdbc: 1.1.1 1.1.2 1.1.3 在進行1.1.3操作之前得先勾選我同意協議 1.1.4 下載完成 1.2下載Linux版本的tomcat 1.2.1 1.2.2 1.2.3 下載完成 二.將下載好的兩個壓縮包 ...
  • android 電池(一):鋰電池基本原理篇 android 電池(二):android關機充電流程、充電畫面顯示 android 電池(三):android電池系統 android電池(四):電池 電量計(MAX17040)驅動分析篇 android電池(五):電池 充電IC(PM2301)驅動分 ...
  • 網站加速方面 1. Nginx 配置 gzip 壓縮 開啟nginx gzip壓縮後,網頁、css、js等靜態資源的大小會大大的減少,從而可以節約大量的帶寬,提高傳輸效率,給用戶快的體驗。雖然會消耗cpu資源,但是為了給用戶更好的體驗是值得的。 將以上配置放到nginx.conf的http{ ... ...
一周排行
    -Advertisement-
    Play Games
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...