Récemment, il y a beaucoup de gens qui consultent comment configurer plusieurs sources de données pour le printemps, et leur répondre une par une est gênante, et la configuration des articles de blog précédents est également problématique, donc je publierai une démo pour tout le monde.
Il existe deux sources de données dans la démo, à savoir MySQL et Oracle, et des tests simples ont été effectués. Il n'y a aucun problème à changer dynamiquement les sources de données. J'espère que cette démo pourra aider tout le monde.
Adresse de téléchargement de démonstration:
Le printemps commute dynamiquement la démonstration de source multi-données: http://xiazai.vevb.com/201701/yuanma/dynamicdatasourcedemo_jb51.rar
Je vais également donner quelques explications pour expliquer les points clés lors de la configuration de la source multi-données:
1. Faites attention à la configuration de Interceptor de transaction
C'est la première priorité. Tout d'abord, vous devez comprendre que la gestion des transactions de Spring est liée à la source de données. Une fois que le programme s'exécute sur la couche de gestion des transactions (tel que le service), depuis que la transaction a été ouverte via l'intercepteur avant d'entrer dans cette couche, il n'est pas possible de changer la source de données de cette couche. Il est particulièrement important de comprendre le principe des transactions. Dans mon article précédent, il est problématique de configurer l'intercepteur pour changer la source de données dans la couche DAO (parce que c'est un exemple, je suis insouciant et je m'excuse d'avoir trompé tout le monde), mais les idées fournies ne sont pas problématiques.
Dans la démo, le DataSourceInterceptor qui change les sources de données est configuré sur la couche précédente de l'intercepteur de transaction (TxAdvice), c'est-à-dire la couche de contrôleur.
2. Faites attention à la création de tables de base de données
Certaines personnes aiment utiliser la fonction de création de table automatique d'Hibernate, mais il convient de noter que dans plusieurs sources de données, en particulier dans plusieurs sources de données de différentes bases de données, il n'est pas possible de créer automatiquement des tables. Étant donné que la création de table automatique Hibernate est déclenchée au démarrage du projet, seules les tables pour la source de données par défaut configurée par le projet sont créées, tandis que les tables pour d'autres sources de données ne sont pas automatiquement créées. Tout le monde devrait faire attention.
3. Le dialecte de la base de données d'Hibernate peut être ignoré
Lorsque plusieurs sources de données, les paramètres du dialecte peuvent être ignorés. Hibernate reconnaîtra automatiquement différentes bases de données lorsqu'elles sont utilisées, il n'est donc pas nécessaire de s'inquiéter de cette configuration, et il est même possible de ne pas le configurer.
4. Signaler aucune erreur de session en cours
Ceci est dû à l'utilisation de sessionfactory.getCurrentession (). La session en cours est liée au fil. Un thread ouvrira une seule session (il n'y aura pas d'erreur à moins d'utiliser OpenSession ()). Par conséquent, la relation de liaison entre la session et le thread doit être définie.
La démo utilise Spring pour gérer la session Hibernate, de sorte que 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 les fichiers de configuration de tous les printemps configurés sont HiberNateProperties. Dépendent des préférences personnelles]
Enfin, certains cadres sont simplement intégrés dans la démo, qui sont pratiques à utiliser. C'est un avantage pour tout le monde. Je n'expliquerai pas la configuration et la technologie de ces frameworks ici. Si vous voulez savoir, vous pouvez vérifier l'adresse:
Spring Multi-Data Source Configuration: //www.vevb.com/article/102282.htm
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.