Estoy creando una aplicación Springboot con OpenJPA.
Mi requisito es que necesito conectarme a múltiples fuentes de datos dinámicamente y las credenciales de la fuente de datos se obtienen en tiempo de ejecución llamando a algunos puntos finales de descanso.
Aquí está la clase de controlador:
@RestController public class StationController { @Autowired BasicDataSource dataSource;Tengo un servicio que me devuelve el jdbc_url dependiendo del nombre del cliente:
public String getDSInfo(String customername){ // code to get the datasource info (JDBC URL) }Mis preguntas son:
¿Hay alguna manera en la que pueda crear fuentes de datos en tiempo de ejecución obteniendo las credenciales de la fuente de datos llamando a algún otro servicio (que toma la identificación del cliente y devuelve la fuente de datos específica del cliente)?
Dado que mi aplicación es una aplicación basada en la web, muchos clientes accederán a ella al mismo tiempo, entonces, ¿cómo crear y manejar tantas fuentes de datos diferentes?
NOTA:
El código obtendrá información sobre la fuente de datos específica del cliente solo activando algún servicio en el tiempo de ejecución, por lo que no puedo codificar las credenciales de la fuente de datos en el archivo de configuración XML.
Encontré algunas implementaciones con Hibernate pero estoy usando Springboot con OpenJPA. Así que necesito ayuda específica de OpenJPA.
Parece que desea una solución multiusuario.
Las fuentes de datos son fáciles de crear mediante programación, solo use un DataSourceBuilder con los detalles de su conexión extraídos de una fuente central (por ejemplo, una base de datos de configuración central o un servidor Spring Config).
Luego, deberá buscar un marco de múltiples inquilinos para vincular las fuentes de datos a los clientes.
Mira aquí:
https://www.youtube.com/watch?v=nBSHiUTHjWA
y aquí
https://dzone.com/articles/multi-tenancy-using-jpa-spring-and-hibernate-part
El video es largo pero bueno. Básicamente, tiene un mapa de fuentes de datos de clientes (de la memoria) que permite que un administrador de entidades recoja una fuente de datos del mapa mediante el uso de un alcance de resorte personalizado con alcance de subproceso de "cliente" que se establece cuando un usuario para un cliente en particular de alguna manera inicia sesión en tu aplicación