定时任务所有的触发业务均放置到library中,server中只包含任务的业务逻辑
This commit is contained in:
parent
480139ed1e
commit
f62b892c80
@ -2,8 +2,8 @@ use tokio_cron_scheduler::{Job, JobScheduler, JobSchedulerError};
|
||||
|
||||
pub struct Task {
|
||||
pub name: String,
|
||||
pub job: Box<dyn Fn(String, String) -> Result<Job, JobSchedulerError> + Send + Sync>,
|
||||
pub interval: String
|
||||
pub job: Box<dyn Fn() + Send + Sync + 'static>,
|
||||
pub trigger: String
|
||||
}
|
||||
|
||||
/// 启动定时任务
|
||||
@ -20,7 +20,12 @@ async fn schedule(tasks: Vec<Task>) -> Result<(), JobSchedulerError> {
|
||||
|
||||
// 添加任务
|
||||
for task in tasks {
|
||||
let _task_uuid = scheduler.add((&task.job)(task.name, task.interval).unwrap()).await?;
|
||||
let task: &'static Task = Box::leak(Box::new(task));
|
||||
let _task_uuid = scheduler.add(Job::new_async(task.trigger.as_str(), move |_uuid, _l| {
|
||||
Box::pin(async move {
|
||||
(&task.job)();
|
||||
})
|
||||
})?).await?;
|
||||
}
|
||||
|
||||
// 添加关闭监听
|
||||
|
@ -10,16 +10,16 @@ mod tasks;
|
||||
/// 启动服务
|
||||
pub async fn serve() {
|
||||
let addr = format!("0.0.0.0:{}", config!().server.port);
|
||||
|
||||
let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
|
||||
|
||||
tracing::info!("服务监听地址: {}", addr);
|
||||
|
||||
// 启动任务
|
||||
task::start(get_tasks()).await;
|
||||
// 启动应用服务
|
||||
axum::serve(listener, init()).await.unwrap();
|
||||
}
|
||||
|
||||
// 初始化router,包括router中间件和数据
|
||||
/// 初始化router,包括router中间件和数据
|
||||
fn init() -> Router {
|
||||
let trace_layer = TraceLayer::new_for_http().make_span_with(|request: &Request<Body>| {
|
||||
let req_id = match request
|
||||
|
@ -1,10 +0,0 @@
|
||||
use tokio_cron_scheduler::{Job, JobSchedulerError};
|
||||
|
||||
pub fn get_task(name: String, cron: String) -> Result<Job, JobSchedulerError> {
|
||||
tracing::info!("添加定时任务: {}", name);
|
||||
Job::new_async(cron.as_str(), move |_uuid, _l| {
|
||||
Box::pin(async move {
|
||||
tracing::info!("定时任务执行中");
|
||||
})
|
||||
})
|
||||
}
|
7
server/src/tasks/google_tasks.rs
Normal file
7
server/src/tasks/google_tasks.rs
Normal file
@ -0,0 +1,7 @@
|
||||
use std::fmt::Result;
|
||||
|
||||
use tokio_cron_scheduler::{Job, JobSchedulerError};
|
||||
|
||||
pub fn xxx_task() {
|
||||
tracing::info!("定时任务执行中");
|
||||
}
|
@ -1,11 +1,12 @@
|
||||
use library::task::Task;
|
||||
|
||||
pub mod google_iap;
|
||||
pub mod google_tasks;
|
||||
|
||||
/// 定时任务维护器
|
||||
pub fn get_tasks() -> Vec<Task> {
|
||||
vec!(Task {
|
||||
name: "google_iap".to_string(),
|
||||
job: Box::new(google_iap::get_task),
|
||||
interval: "0 0 0/1 * * ?".to_string(),
|
||||
job: Box::new(google_tasks::xxx_task),
|
||||
trigger: "0 0/1 * * * ?".to_string(),
|
||||
})
|
||||
}
|
Loading…
Reference in New Issue
Block a user