diff --git a/library/src/task.rs b/library/src/task.rs index a973b4f..fd51e18 100644 --- a/library/src/task.rs +++ b/library/src/task.rs @@ -2,8 +2,8 @@ use tokio_cron_scheduler::{Job, JobScheduler, JobSchedulerError}; pub struct Task { pub name: String, - pub job: Box Result + Send + Sync>, - pub interval: String + pub job: Box, + pub trigger: String } /// 启动定时任务 @@ -20,7 +20,12 @@ async fn schedule(tasks: Vec) -> 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?; } // 添加关闭监听 diff --git a/server/src/lib.rs b/server/src/lib.rs index c753417..21d1aeb 100644 --- a/server/src/lib.rs +++ b/server/src/lib.rs @@ -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| { let req_id = match request diff --git a/server/src/tasks/google_iap.rs b/server/src/tasks/google_iap.rs deleted file mode 100644 index bf13071..0000000 --- a/server/src/tasks/google_iap.rs +++ /dev/null @@ -1,10 +0,0 @@ -use tokio_cron_scheduler::{Job, JobSchedulerError}; - -pub fn get_task(name: String, cron: String) -> Result { - tracing::info!("添加定时任务: {}", name); - Job::new_async(cron.as_str(), move |_uuid, _l| { - Box::pin(async move { - tracing::info!("定时任务执行中"); - }) - }) -} diff --git a/server/src/tasks/google_tasks.rs b/server/src/tasks/google_tasks.rs new file mode 100644 index 0000000..871dd1f --- /dev/null +++ b/server/src/tasks/google_tasks.rs @@ -0,0 +1,7 @@ +use std::fmt::Result; + +use tokio_cron_scheduler::{Job, JobSchedulerError}; + +pub fn xxx_task() { + tracing::info!("定时任务执行中"); +} \ No newline at end of file diff --git a/server/src/tasks/mod.rs b/server/src/tasks/mod.rs index f3f8445..9eb4df9 100644 --- a/server/src/tasks/mod.rs +++ b/server/src/tasks/mod.rs @@ -1,11 +1,12 @@ use library::task::Task; -pub mod google_iap; +pub mod google_tasks; +/// 定时任务维护器 pub fn get_tasks() -> Vec { 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(), }) } \ No newline at end of file