Comment configurer et utiliser deux sources de données?
Par exemple, voici ce que j'ai pour la première source de données:
application.properties
#first db
spring.datasource.url = [url]
spring.datasource.username = [username]
spring.datasource.password = [password]
spring.datasource.driverClassName = oracle.jdbc.OracleDriver
#second db ...
Classe d'application
@SpringBootApplication
public class SampleApplication
{
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}
Comment modifier application.properties
pour ajouter une autre source de données? Comment puis-je le câbler pour qu'il soit utilisé par un autre référentiel?
java
spring
spring-boot
spring-mvc
datasource
juventus
la source
la source
Mise à jour 2018-01-07 avec Spring Boot 1.5.8.
La plupart des réponses ne fournissent pas comment les utiliser (comme source de données elle-même et comme transaction), mais seulement comment les configurer.
Vous pouvez voir l'exemple exécutable et quelques explications dans https://www.surasint.com/spring-boot-with-multiple-databases-example/
J'ai copié du code ici.
Vous devez d'abord définir application.properties comme ceci
Définissez-les ensuite en tant que fournisseurs (@Bean) comme ceci:
Notez que j'ai @Bean (name = "datasource1") et @Bean (name = "datasource2"), alors vous pouvez l'utiliser quand nous avons besoin de datasource comme @Qualifier ("datasource1") et @Qualifier ("datasource2"), par exemple
Si vous vous souciez de la transaction, vous devez définir DataSourceTransactionManager pour les deux, comme ceci:
Ensuite, vous pouvez l'utiliser comme
ou
Cela devrait suffire. Voir l'exemple et les détails dans le lien ci-dessus.
la source
Reportez - vous à la documentation officielle
La création de plusieurs sources de données fonctionne de la même manière que la création de la première. Vous voudrez peut-être marquer l'un d'eux comme @Primary si vous utilisez la configuration automatique par défaut pour JDBC ou JPA (alors celle-ci sera récupérée par toutes les injections @Autowired).
la source
J'ai également dû configurer la connexion à 2 sources de données à partir de l'application Spring Boot, et ce n'était pas facile - la solution mentionnée dans la documentation Spring Boot ne fonctionnait pas. Après une longue fouille sur Internet, je l'ai fait fonctionner et l'idée principale est venue de cet article et de nombreux autres endroits.
La solution suivante est écrite en Kotlin et fonctionne avec Spring Boot 2.1.3 et Hibernate Core 5.3.7 . Le problème principal était qu'il ne suffisait pas simplement de configurer différentes configurations DataSource , mais qu'il était également nécessaire de configurer EntityManagerFactory et TransactionManager pour les deux bases de données.
Voici la configuration de la première base de données (principale):
Et c'est la configuration pour la deuxième base de données:
Les propriétés des sources de données sont les suivantes:
Le problème avec les propriétés était que je devais définir jdbc-url au lieu d' url car sinon j'avais une exception.
ps Vous pouvez également avoir différents schémas de dénomination dans vos bases de données, ce qui était le cas pour moi. Étant donné que Hibernate 5 ne prend pas en charge tous les schémas de nommage précédents, j'ai dû utiliser la solution de cette réponse - peut-être que cela aidera également quelqu'un.
la source
mapOf("hibernate.physical_naming_strategy" to "org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy", "hibernate.implicit_naming_strategy" to "org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy" )
Voici la solution complète
Puisque nous allons avoir accès à deux bases de données différentes (db1, db2), nous devons configurer chaque configuration de source de données séparément comme:
Deuxième source de données:
Ici vous pouvez trouver l'exemple complet sur mon blog: Spring Boot avec plusieurs configurations DataSource
la source
la source
J'ai utilisé mybatis - Springboot 2.0 tech stack, solution:
Remarque: 1) @Primary -> @primary
2) ---. "Jdbc-url" dans les propriétés -> Après la migration de Spring Boot 2.0: jdbcUrl est requis avec driverClassName
la source
L'annotation @Primary lorsqu'elle est utilisée contre une méthode comme ci-dessous fonctionne bien si les deux sources de données sont sur le même emplacement / serveur db.
Si les sources de données se trouvent sur différents serveurs, il vaut mieux utiliser @Component avec l' annotation @Primary . L'extrait de code suivant fonctionne bien sur deux sources de données différentes à des emplacements différents
la source
Mon exigence était légèrement différente mais utilisait deux sources de données.
J'ai utilisé deux sources de données pour les mêmes entités JPA à partir du même package. Un pour exécuter DDL au démarrage du serveur pour créer / mettre à jour des tables et un autre pour DML au moment de l'exécution.
La connexion DDL doit être fermée après l'exécution des instructions DDL, pour empêcher toute utilisation ultérieure des privilèges de super-utilisateur n'importe où dans le code.
Propriétés
Classes de configuration de source de données
// 1ère classe de configuration pour la source de données DDL
// 2e classe de configuration pour la source de données DML
// Utilisation des sources de données DDL dans le code.
// Utilisation de la source de données DML dans le code.
la source