定时任务所有的触发业务均放置到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 struct Task {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub job: Box<dyn Fn(String, String) -> Result<Job, JobSchedulerError> + Send + Sync>,
|
pub job: Box<dyn Fn() + Send + Sync + 'static>,
|
||||||
pub interval: String
|
pub trigger: String
|
||||||
}
|
}
|
||||||
|
|
||||||
/// 启动定时任务
|
/// 启动定时任务
|
||||||
@ -20,7 +20,12 @@ async fn schedule(tasks: Vec<Task>) -> Result<(), JobSchedulerError> {
|
|||||||
|
|
||||||
// 添加任务
|
// 添加任务
|
||||||
for task in tasks {
|
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() {
|
pub async fn serve() {
|
||||||
let addr = format!("0.0.0.0:{}", config!().server.port);
|
let addr = format!("0.0.0.0:{}", config!().server.port);
|
||||||
|
|
||||||
let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
|
let listener = tokio::net::TcpListener::bind(&addr).await.unwrap();
|
||||||
|
|
||||||
tracing::info!("服务监听地址: {}", addr);
|
tracing::info!("服务监听地址: {}", addr);
|
||||||
|
|
||||||
|
// 启动任务
|
||||||
task::start(get_tasks()).await;
|
task::start(get_tasks()).await;
|
||||||
|
// 启动应用服务
|
||||||
axum::serve(listener, init()).await.unwrap();
|
axum::serve(listener, init()).await.unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 初始化router,包括router中间件和数据
|
/// 初始化router,包括router中间件和数据
|
||||||
fn init() -> Router {
|
fn init() -> Router {
|
||||||
let trace_layer = TraceLayer::new_for_http().make_span_with(|request: &Request<Body>| {
|
let trace_layer = TraceLayer::new_for_http().make_span_with(|request: &Request<Body>| {
|
||||||
let req_id = match request
|
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;
|
use library::task::Task;
|
||||||
|
|
||||||
pub mod google_iap;
|
pub mod google_tasks;
|
||||||
|
|
||||||
|
/// 定时任务维护器
|
||||||
pub fn get_tasks() -> Vec<Task> {
|
pub fn get_tasks() -> Vec<Task> {
|
||||||
vec!(Task {
|
vec!(Task {
|
||||||
name: "google_iap".to_string(),
|
name: "google_iap".to_string(),
|
||||||
job: Box::new(google_iap::get_task),
|
job: Box::new(google_tasks::xxx_task),
|
||||||
interval: "0 0 0/1 * * ?".to_string(),
|
trigger: "0 0/1 * * * ?".to_string(),
|
||||||
})
|
})
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user