3个版本

0.0.7 2024年8月21日
0.0.6 2024年8月17日
0.0.4 2024年8月7日

#756 in HTTP服务器

Download history 115/week @ 2024-08-05 147/week @ 2024-08-12

每月下载量 262次

MIT许可证

43KB
994 代码行

crates.io Documentation

依赖

spring-job = { version = "0.0.7" }

API接口

应用程序实现JobConfigurator功能,可用于配置定时任务

 #[tokio::main]
 async fn main() {
    App::new()
    .add_plugin(JobPlugin)
    .add_plugin(SqlxPlugin)
+   .add_jobs(jobs())
    .run()
    .await
}

+fn jobs() -> Jobs {
+   Jobs::new().typed_job(cron_job)
+}

+#[cron("1/10 * * * * *")]
+async fn cron_job() {
+    println!("cron scheduled: {:?}", SystemTime::now())
+}

您还可以使用auto_config宏来实现自动配置。此过程宏将自动将由过程宏标记的定时任务注册到应用程序中

+#[auto_config(JobConfigurator)]
 #[tokio::main]
 async fn main() {
    App::new()
    .add_plugin(JobPlugin)
    .add_plugin(SqlxPlugin)
-   .add_jobs(jobs())
    .run()
    .await
}

提取插件注册的组件

上面的SqlxPlugin插件自动为我们注册了一个Sqlx连接池组件。我们可以使用Component从应用程序中提取此连接池。需要注意的是,尽管spring-jobComponentspring-webComponent的实现原理类似,但这两个提取器属于不同的crate。

use spring::cron;
use spring_sqlx::{
    sqlx::{self, Row}, ConnectPool
};
use spring_job::extractor::Component;

#[cron("1/10 * * * * *")]
async fn cron_job(Component(db): Component<ConnectPool>) {
    let time: String = sqlx::query("select DATE_FORMAT(now(),'%Y-%m-%d %H:%i:%s') as time")
        .fetch_one(&db)
        .await
        .context("query failed")
        .unwrap()
        .get("time");
    println!("cron scheduled: {:?}", time)
}

依赖

~13–24MB
~329K SLoC