¿Cómo puedo configurar y usar dos fuentes de datos?
Por ejemplo, esto es lo que tengo para la primera fuente de datos:
application.properties
#first db
spring.datasource.url = [url]
spring.datasource.username = [username]
spring.datasource.password = [password]
spring.datasource.driverClassName = oracle.jdbc.OracleDriver
#second db ...
Clase de aplicación
@SpringBootApplication
public class SampleApplication
{
public static void main(String[] args) {
SpringApplication.run(SampleApplication.class, args);
}
}
¿Cómo modifico application.properties
para agregar otra fuente de datos? ¿Cómo lo instalo automáticamente para que lo use un repositorio diferente?
java
spring
spring-boot
spring-mvc
datasource
juventus
fuente
fuente
Actualice 2018-01-07 con Spring Boot 1.5.8.
La mayoría de las respuestas no proporcionan cómo usarlas (como fuente de datos en sí y como transacción), solo cómo configurarlas.
Puede ver el ejemplo ejecutable y alguna explicación en https://www.surasint.com/spring-boot-with-multiple-databases-example/
Copié un código aquí.
Primero debe configurar application.properties como este
Luego defínalos como proveedores (@Bean) así:
Tenga en cuenta que tengo @Bean (name = "datasource1") y @Bean (name = "datasource2"), luego puede usarlo cuando necesitemos datasource como @Qualifier ("datasource1") y @Qualifier ("datasource2"), por ejemplo
Si le importan las transacciones, debe definir DataSourceTransactionManager para ambos, de esta manera:
Entonces puedes usarlo como
o
Esto debería ser suficiente. Ver ejemplo y detalles en el enlace de arriba.
fuente
Consulte la documentación oficial
Crear más de un origen de datos funciona igual que crear el primero. Es posible que desee marcar uno de ellos como @Primary si está utilizando la configuración automática predeterminada para JDBC o JPA (entonces esa será seleccionada por cualquier inyección de @Autowired).
fuente
También tuve que configurar la conexión a 2 fuentes de datos desde la aplicación Spring Boot, y no fue fácil: la solución mencionada en la documentación de Spring Boot no funcionó. Después de una larga búsqueda en Internet, lo hice funcionar y la idea principal fue tomada de este artículo y de muchos otros lugares.
La siguiente solución está escrita en Kotlin y funciona con Spring Boot 2.1.3 e Hibernate Core 5.3.7 . El problema principal era que no bastaba con configurar diferentes configuraciones de DataSource , sino que también era necesario configurar EntityManagerFactory y TransactionManager para ambas bases de datos.
Aquí está la configuración para la primera base de datos (Primaria):
Y esta es la configuración para la segunda base de datos:
Las propiedades de las fuentes de datos son así:
El problema con las propiedades era que tenía que definir jdbc-url en lugar de url porque de lo contrario tenía una excepción.
ps También puede tener diferentes esquemas de nombres en sus bases de datos, que fue el caso para mí. Como Hibernate 5 no es compatible con todos los esquemas de nombres anteriores, tuve que usar la solución de esta respuesta , tal vez también ayude a alguien también.
fuente
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" )
Aquí está la solución completa
Dado que vamos a obtener acceso a dos bases de datos diferentes (db1, db2), necesitamos configurar cada configuración de fuente de datos por separado como:
Segunda fuente de datos:
Aquí puede encontrar el ejemplo completo en mi blog: Spring Boot con configuración de múltiples fuentes de datos
fuente
fuente
Utilicé mybatis - springboot 2.0 tech stack, solución:
Nota: 1) @Primary -> @primary
2) ---. "Jdbc-url" en propiedades -> Después de la migración de Spring Boot 2.0: se requiere jdbcUrl con driverClassName
fuente
@La anotación primaria cuando se usa contra un método como el siguiente funciona bien si las dos fuentes de datos están en la misma ubicación / servidor de base de datos.
Si las fuentes de datos están en servidores diferentes, es mejor usar @Component junto con la anotación @Primary . El siguiente fragmento de código funciona bien en dos fuentes de datos diferentes en diferentes ubicaciones
fuente
Mi requerimiento fue ligeramente diferente pero usé dos fuentes de datos.
He usado dos fuentes de datos para las mismas entidades JPA del mismo paquete. Uno para ejecutar DDL en el inicio del servidor para crear / actualizar tablas y otro para DML en tiempo de ejecución.
La conexión DDL debe cerrarse después de que se ejecutan las instrucciones DDL, para evitar un mayor uso de superprevios de superusuario en cualquier parte del código.
Propiedades
Clases de configuración de origen de datos
// Primera clase de configuración para la fuente de datos DDL
// Segunda clase de configuración para la fuente de datos DML
// Uso de fuentes de datos DDL en código.
// Uso de la fuente de datos DML en el código.
fuente