專案中使用攜程apollo進行配置管理,需要實現動態配置job的執行間隔。
使用動態修改cron表示式的方式可以實現,但是cron表示式不支援毫秒,所以採用以下方式進行配置。
每次配置改動時,將舊的定時任務停掉,重新啟動乙個定時任務。
/**
* shang
* 2020-02-11 15:41
*/@slf4j
@component
public
class
orderjob")
private
long orderscheduleinterval;
private
static
final
string lock =
"lock"
;private
final
set<
string
>
orderidset =
sets
.newhashset()
;@resource
private
ordermanager ordermanager;
@resource
private
threadpooltaskscheduler threadpooltaskscheduler;
@apolloconfig
private
config config;
private
scheduledfuture
<
?>
future;
@apolloconfigchangelistener
private
void
configchangelistener
(configchangeevent changeevent)
periodictrigger periodictrigger =
newperiodictrigger
(long
.valueof
(interval)
,timeunit
.milliseconds)
; periodictrigger.
setfixedrate
(true);
periodictrigger.
setinitialdelay
(1000);
future = threadpooltaskscheduler.
schedule
(this
::readorderidset
, periodictrigger)
; log.
info
("start order task");
} log.
info
("{}:{}"
, key, config.
getproperty
(key,
null))
;}}/**
* 寫入緩衝set
** @param orderids
*/public
void
writeorderidset
(set
<
string
>
orderids)
synchronized
(lock)
}/**
* 定時任務從緩衝set裡取
*/// 這樣配置無法動態修改執行間隔
// @scheduled(fixedrate = 2000)
public
void
readorderidset()
synchronized
(lock)條",
collectionutils
.size
(orderidset));
// 緩衝區的orderid發kafka訊息
ordermanager.
sendmessage
(orderidset)
;// 清空緩衝區
orderidset.
clear()
;}}@postconstruct
public
void
postconstruct()
}
SpringBoot註解內容的動態配置
大家都知道,註解只能配置常量,在一些構架的開發中,有時候我們需要給註解動態配置一些值,或者想從配置檔案中讀取配置。直接在註解上配置是無法實現的,但是我們可以在拿到註解的值之後,再對這些值進行另外的操作。比如在註解上面配置佔位符,在使用的時候,再對這些佔位符進行替換。在rocketmq的監聽配置中,就...
springboot 動態多資料來源配置
1.鋪墊 儲存及獲取資料源 dynamicdatasourcecontextholder 這個類,起到承上啟下的作用,後邊aop切換時,會首先setdatasourcetype,在使用時進行getgetdatasourcetype,同時掃瞄環境時,下面的dynamicdatasourceregist...
SpringBoot靜態動態
在src main resources下面有兩個資料夾,static和templates springboot預設 static中放靜態頁面,而templates中放動態頁面 靜態頁面 這裡我們直接在static放乙個hello.html,然後直接輸入http localhost 8080 hell...