1

J'essaie de configurer deux bases de données à l'aide de PlaySlick tel que documenté here. Le problème dans le code ci-dessous est que même si j'ai configuré une deuxième base de données db2 toute tentative de l'utiliser redirige l'action vers db1 (essaie de trouver la table dans db1 et lève une exception SQL disant que la table est introuvable).Configuration de deux bases de données dans PlaySlick en utilisant l'injection

Comment configurer deux bases de données dans PlaySlick en utilisant l'injection?

C'est ma tentative:

class ManageUsersDAO @Inject()(
    @NamedDatabase("db1") protected val dbConfigProvider: DatabaseConfigProvider, 
    @NamedDatabase("db2") protected val dbConfigProvider2: DatabaseConfigProvider) 
           extends HasDatabaseConfigProvider[JdbcProfile] { 
    import driver.api._ 

    val db1 = dbConfigProvider.get[JdbcProfile].db 
    val db2 = dbConfigProvider2.get[JdbcProfile].db 

Et les entrées de application.conf:

slick.dbs.db1.driver = "slick.driver.MySQLDriver$" 
slick.dbs.db1.db.driver = "com.mysql.jdbc.Driver" 
slick.dbs.db1.db.url = "jdbc:mysql://localhost:3306/db1" 
slick.dbs.db1.db.user = "root" 
slick.dbs.db1.db.password = "db1" 

slick.dbs.db2.driver = "slick.driver.MySQLDriver$" 
slick.dbs.db2.db.driver = "com.mysql.jdbc.Driver" 
slick.dbs.db2.db.url = "jdbc:mysql://localhost:3306/db2" 
slick.dbs.db2.db.user = "root" 
slick.dbs.db2.db.password = "db2" 

Répondre

1

d'abord tout ce que je ne pense pas qu'il est logique d'étendre HasDatabaseConfigProvider (cela aide, mais seulement très peu, avec une seule configuration db, vous obtenez db manuellement de toute façon). En dehors de cela - il semble vraiment bon.

Je préfère poser une question stupide - pourquoi pensez-vous qu'il se connecte à la mauvaise base de données en premier lieu? Mon aveugle devinerait que cela pourrait être un problème avec vos évolutions (c'est pourquoi vous n'avez pas de tables dans vos bases de données).

Pourriez-vous vérifier si vous avez réellement ces tables en db (par exemple avec la ligne de commande db)?

+0

L'exemple d'application PlaySlick étend 'HasDatabaseConfigProvider', quelle est l'alternative? – ps0604

+0

Mais ce trait ne donne pratiquement rien. Jetez un oeil au code source. Ce qu'il fait, il vous fournit essentiellement: 'override final protégé val dbConfig: DatabaseConfig [P] = dbConfigProvider.get [P]' (que vous avez déjà fait dans cette ligne: 'val db1 = dbConfigProvider.get [JdbcProfile] .db'). Donc, la réponse est - il vous permet d'économiser 1 ou 2 lignes lorsque vous utilisez un db. Dans votre cas, vous avez déjà créé cette ligne, donc aucune alternative nécessaire (ne nécessite pas d'étendre quoi que ce soit). Mais nous divergeons du problème (je doute que ce soit lié). Êtes-vous sûr d'avoir les tables requises dans les bases de données? –

+0

Je viens de tester à nouveau, et cela a bien fonctionné, vous aviez raison – ps0604