We can create new struct pool connection for each database, i create 2 connection to difference database.
struct PoolOne(mysql_async::Pool);
struct PoolTwo(mysql_async::Pool);
on main use it to pass with web::Data
#[actix_web::main]
async fn main() -> std::io::Result<()> {
env_logger::builder().filter_level(log::LevelFilter::Error).init();
dotenv().ok();
let db_one_user = "";
let db_one_pass = "";
let db_one_host = "";
let db_one_name = "";
let db_one_port = "";
let db_two_user = "";
let db_two_pass = "";
let db_two_host = "";
let db_two_name = "";
let db_two_port = "";
let url_one:Opts = Opts::from_url(&format!("mysql://{}:{}@{}:{}/{}",db_one_user,db_one_pass,db_one_host,db_one_port,db_one_name)).unwrap();
let url_two:Opts = Opts::from_url(&format!("mysql://{}:{}@{}:{}/{}",db_two_user,db_two_pass,db_two_host,db_two_port,db_two_name)).unwrap();
let pool_one = mysql_async::Pool::new(url_one);
let pool_two = mysql_async::Pool::new(url_two);
HttpServer::new(move || {
App::new()
.app_data(web::Data::new(PoolOne(pool_one.clone())))
.app_data(web::Data::new(PoolTwo(pool_two.clone())))
.service(exec)
.service(query)
})
.bind(("0.0.0.0", 8080))?
.run()
.await
}
use it with :
#[post("/fnWithPoolOne")]
async fn fnWithPoolOne(pool_one: web::Data<PoolOne>,s_sql: String) -> impl Responder {
let pool = &pool_one.0;
let mut conn = pool.get_conn().await.unwrap();
}
#[post("/fnWithPoolTwo")]
async fn fnWithPoolTwo(pool_two: web::Data<PoolTwo>,s_sql: String) -> impl Responder {
let pool = &pool_two.0;
let mut conn = pool.get_conn().await.unwrap();
}