2

How do I support multiple database pools to different databases in actix-web? I am currently using this:

// database pool for postgres db1
cfg.add_data(web::Data::new(pool.clone));

and I am able to connect to database db1. How do I add another database pool to a different database (db2 - postgres)?

I am using actix-web 4.x and deadpool-postgres.

ferd tomale
  • 845
  • 7
  • 20

1 Answers1

0

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();
}
Pamungkas Jayuda
  • 1,194
  • 2
  • 13
  • 31