Récemment, de nombreuses personnes ont demandé comment configurer plusieurs sources de données au printemps, et il est difficile d'y répondre une par une. De plus, il y a également des problèmes de configuration dans les articles de blog précédents, je réédite donc un. démo pour tout le monde.
Il y a deux sources de données dans la démo, à savoir MySQL et Oracle. Des tests simples ont été effectués. Il n'y a aucun problème à changer dynamiquement de source de données. J'espère que cette démo pourra aider tout le monde.
De plus, je donnerai quelques instructions pour expliquer les points clés lors de la configuration de plusieurs sources de données :
1 Faites attention à la configuration de l'intercepteur de transactions
C'est avant tout. Tout d'abord, vous devez comprendre que la gestion des transactions de Spring est liée à la source de données. Une fois le programme exécuté sur la couche de gestion des transactions (comme le service), puisque la transaction a été ouverte via l'intercepteur avant d'entrer dans cette couche, donc dans. cette couche Il n'est pas possible de changer de source de données. Il est particulièrement important de comprendre les principes des transactions. Dans mon article précédent, il y avait un problème avec la configuration de l'intercepteur pour changer de source de données dans la couche Dao (car c'était un exemple, donc j'ai été négligent et je m'ai induit en erreur. Je m'excuse auprès de tout le monde), mais les idées proposées ne posent pas de problème.
Dans la démo, l'intercepteur de commutation de sources de données (dataSourceInterceptor) est configuré sur la couche supérieure de l'intercepteur de transaction (txadvice), qui est la couche contrôleur.
2. Faites attention à la création de tables de base de données
Certaines personnes aiment utiliser la fonction d'hibernate pour créer automatiquement des tables, mais il faut noter que dans plusieurs données sources, particulièrement différentes Il est impossible de créer automatiquement des tableaux pour toutes les sources de données multiples de la base de données. Étant donné que la création automatique de tables d'Hibernate est déclenchée au démarrage du projet, seules les tables de la source de données par défaut configurée dans le projet seront créées, et les tables d'autres sources de données ne seront pas automatiquement créées. Tout le monde devrait y prêter attention.
3. Le dialecte (dialecte) de la base de données d'Hibernate peut être ignoré
Lors de l'utilisation de plusieurs sources de données, le paramètre de dialecte peut être ignoré et Hibernate en reconnaîtra automatiquement différentes lorsque en l'utilisant. Base de données, vous n'avez donc pas à vous soucier de cette configuration, ni même à ne pas la configurer.
4. Signaler une erreur d'absence de session en cours
Cela est dû à l'utilisation de sessionFactory.getCurrentSession(). La session en cours est liée au fil de discussion uniquement. sera ouvert (aucune erreur ne sera signalée à moins que openSession() ne soit utilisé), donc la relation de liaison entre la session et le thread doit être définie.
Spring est utilisé pour gérer les sessions Hibernate dans la démo, donc OpenSessionInViewFilter est configuré dans web.xml et current_session_context_class est configuré dans hibernate.cfg.xml. [PS : lorsque vous utilisez Spring pour gérer Hibernate, vous pouvez supprimer hibernate.cfg.xml et toutes les configurations se trouvent dans le fichier de configuration Spring, c'est-à-dire hibernateProperties. Cela dépend des préférences personnelles】
Enfin, la démo intègre simplement quelques frameworks que tout le monde peut utiliser, ce qui est un avantage pour tout le monde. La configuration et la technologie de ces frameworks ne seront pas développées ici.
Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'apprentissage de chacun. J'espère également que tout le monde soutiendra le site Web PHP chinois.
Pour plus d'articles liés à la configuration dynamique de sources multi-données Spring, veuillez faire attention au site Web PHP chinois !