Init
This commit is contained in:
parent
84458b3d3e
commit
46dedb4306
|
@ -0,0 +1,3 @@
|
|||
/target
|
||||
.vscode
|
||||
.idea
|
|
@ -0,0 +1,8 @@
|
|||
# 默认忽略的文件
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# 基于编辑器的 HTTP 客户端请求
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="EMPTY_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
|
@ -0,0 +1,10 @@
|
|||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="DuplicatedCode" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||
<Languages>
|
||||
<language minSize="46" name="Rust" />
|
||||
</Languages>
|
||||
</inspection_tool>
|
||||
</profile>
|
||||
</component>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/axum-with-seaorm.iml" filepath="$PROJECT_DIR$/.idea/axum-with-seaorm.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="SqlDialectMappings">
|
||||
<file url="file://$PROJECT_DIR$/app.sql" dialect="GenericSQL" />
|
||||
<file url="PROJECT" dialect="MySQL" />
|
||||
</component>
|
||||
</project>
|
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,19 @@
|
|||
[package]
|
||||
name = "axum-with-seaorm"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
askama = "0.12.1"
|
||||
axum = "0.7.4"
|
||||
sea-orm = { version = "0.12.12", features = ["sqlx-mysql", "runtime-tokio-rustls"] }
|
||||
tokio = { version = "1.35.1", features = ["full"] }
|
||||
serde = { version = "1.0.196", features = ["derive"] }
|
||||
config = "0.13.4"
|
||||
dotenvy = "0.15.7"
|
||||
tracing = "0.1.40"
|
||||
tracing-subscriber = { version = "0.3.18", features = ["env-filter", "time", "local-time"] }
|
||||
serde_json = "1.0.113"
|
||||
chrono = "0.4.33"
|
|
@ -0,0 +1,73 @@
|
|||
use std::sync::Arc;
|
||||
|
||||
use sea_orm::{ConnectOptions, Database};
|
||||
use tokio::signal;
|
||||
use tracing_subscriber::{EnvFilter, fmt, layer::SubscriberExt, util::SubscriberInitExt};
|
||||
use tracing_subscriber::fmt::time::LocalTime;
|
||||
|
||||
use axum_with_seaorm::{config::AppConfig, router, state::AppState};
|
||||
|
||||
fn init_trace_logger() {
|
||||
// 设置日志级别 根据RUST_LOG
|
||||
let env_filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"));
|
||||
|
||||
let timer = LocalTime::rfc_3339();
|
||||
// 构建layer 控制台打印
|
||||
let console_layer = fmt::layer().with_timer(timer);
|
||||
|
||||
tracing_subscriber::registry()
|
||||
.with(env_filter)
|
||||
.with(console_layer)
|
||||
.init();
|
||||
}
|
||||
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
// 解析 .env 文件
|
||||
dotenvy::dotenv().expect("解析.env文件失败");
|
||||
|
||||
let _guard = init_trace_logger();
|
||||
|
||||
let cfg = AppConfig::new()
|
||||
.map_err(|e| tracing::error!("初始化配置失败:{}", e.to_string()))
|
||||
.unwrap();
|
||||
|
||||
let mut opt = ConnectOptions::new(&cfg.mysql.dsn);
|
||||
opt.max_connections(cfg.mysql.max_cons);
|
||||
|
||||
let app = router::init()
|
||||
.with_state(Arc::new(AppState {
|
||||
conn: Database::connect(opt).await.unwrap(),
|
||||
}));
|
||||
|
||||
let listener = tokio::net::TcpListener::bind(&cfg.web.addr).await.unwrap();
|
||||
|
||||
tracing::info!("服务器运行于: {}", listener.local_addr().unwrap());
|
||||
|
||||
axum::serve(listener, app).with_graceful_shutdown(shutdown_signal()).await.unwrap()
|
||||
}
|
||||
|
||||
|
||||
async fn shutdown_signal() {
|
||||
let ctrl_c = async {
|
||||
signal::ctrl_c()
|
||||
.await
|
||||
.expect("failed to install Ctrl+C handler");
|
||||
};
|
||||
|
||||
#[cfg(unix)]
|
||||
let terminate = async {
|
||||
signal::unix::signal(signal::unix::SignalKind::terminate())
|
||||
.expect("failed to install signal handler")
|
||||
.recv()
|
||||
.await;
|
||||
};
|
||||
#[cfg(not(unix))]
|
||||
let terminate = std::future::pending::<()>();
|
||||
tokio::select! {
|
||||
_ = ctrl_c => {},
|
||||
_ = terminate => {},
|
||||
}
|
||||
tracing::info!("signal received, starting graceful shutdown");
|
||||
}
|
Loading…
Reference in New Issue