Tengo una aplicación que usa cuatro bases de datos en diferentes ubicaciones geográficas. Todas las bases de datos contienen las mismas tablas y solo el nombre de la base de datos es diferente según la ubicación. Tengo que crear algunos informes en mi aplicación que utiliza datos de cada base de datos. ¿Cuál sería la forma correcta de crear esa conexión de base de datos desde una aplicación java y hay un patrón de diseño adecuado para esta tarea que podría usar?Cómo crear varias conexiones de bases de datos para diferentes bases de datos en java
Respuesta
Como no se ha etiquetado su pregunta con todo esto, hibernate
, JPA
, ORM
, supongo que se trata de JDBC normal.
Habiendo dicho eso, sugiero que tenga una capa DAO para tratar con las bases de datos subyacentes, y deje los detalles de la conexión a las implementaciones específicas. Puede configurar sus cadenas de conexión en algunos archivos .properties
, digamos.
[Complemento]
También puede hacer uso de la fábrica de DAO, una implementación de Abstract Factory o patrón de fábrica Mathod, lo que se adapta aquí.
[Enlaces]
- A very fine implementation of DAO and DAO Factory, por BalusC
- Core J2EE Patterns - posiblemente anticuadas, pero podría proporcionar una idea.
La forma ideal de lograr esto es mediante el uso de un sistema multidimensional como OLAP. Pero mira si puedes crear una vista de esas bases de datos. Entonces solo necesita consultar la vista (es decir, solo una conexión de base de datos única). También puede usar múltiples conexiones de bases de datos si lo desea.
Puede manejar múltiples conexiones fácilmente usando una herramienta ORM como Hibernate. Puede especificar cada conexión en un archivo de configuración separado e instanciar la conexión requerida obteniendo una nueva fábrica de sesión cada vez.
Otra forma sería la de utilizar la fuente de datos y JNDI: Java connecting to multiple databases
Creo que se puede utilizar una combinación de patrón de la fábrica y el patrón Singleton para el propósito.
hay múltiples maneras que usted puede lograr esto:
- Si está utilizando cualquier contenedor Java EE que soporta transacciones distribuidas a continuación, puede utilizar allí funcionalidad.
- Si tiene JDBC normal, deberá mantener su propia conexión para cada base de datos. para JDBC:
- proporcionar todos los detalles de conexión
- Tener una fachada que le da objeto deseado llamando a un DAO genérico abstracto.
- tienen una fábrica que crea dao en función de la conexión.
- Utilice herramientas ORM como Hibernate, donde puede usar la configuración para múltiples bases de datos. Tutorial.
- Si está utilizando Spring, puede configurar un origen de datos por base de datos. Docs
Patrones de diseño:
- Fachada del modelo - para ocultar la complejidad y el uso de múltiples bases de datos.
- Fábrica: en caso de que usted mismo administre la conexión de la base de datos.
- Singleton - Para los orígenes de datos
es muy fácil :)
1.Create una fuente de datos para probar la conexión al DB
public DataSource getDataSource(String db) throws Exception {
DataSource dt = null;
InitialContext ic = null;
try {
if(db.trim().equals("you_database_name")) {
dt = (DataSource)ic.lookup("jdbc/connection_name");
} else if(db.trim().equals("you_database_name")) {
dt = (DataSource) ic.lookup("jdbc/connection_name");
}
return dt;
} catch(NamingException n) {
throw new Exception("Err getDataSource (ServiceLocator) NamingException - " + n.getMessage());
}
2.Crear una base de datos de clase, recuerde cerrar todas las conexiones en este punto.
public class DataBases {
public YouNameDataSourceClass dataSrc;
public DataBases() throws Exception {
super();
dataSrc = new YouNameDataSourceClass.getDataSource();
}
public Connection getConnectionAS400() throws Exception {
return locator.getDataSource("you_database_name").getConnection();
}
public Connection getConnectionOracle() throws Exception {
return locator.getDataSource("you_database_name").getConnection();
}
public Connection getConnectionSQLServer() throws Exception {
return locator.getDataSource("you_database_name").getConnection();
}
}
Buena apariencia.
- 1. DBCP - validationQuery para diferentes bases de datos
- 2. LINQ en varias bases de datos
- 3. Prueba de rendimiento Varias bases de datos
- 4. Seleccionar dos o varias tablas de bases de datos diferentes
- 5. Referencia cruzada en varias bases de datos
- 6. Seleccionar columnas en diferentes bases de datos
- 7. consulta de bases de datos diferentes
- 8. Cómo manejar las conexiones de bases de datos en Qt?
- 9. cómo administrar conexiones a bases de datos creadas dinámicamente
- 10. Grupo de conexiones de bases de datos concurrentes en Haskell
- 11. JDBC - Conectar varias bases de datos
- 12. Django: Obtener datos de diferentes bases de datos
- 13. Múltiples conexiones concurrentes de bases de datos en drupal 7
- 14. restauración MySQL a diferentes bases de datos
- 15. Cómo descartar varias bases de datos en SQL Server
- 16. Vista de SQL Server en varias bases de datos
- 17. Bases de datos translúcidas
- 18. Conexiones de bases de datos persistentes, ¿sí o no?
- 19. Seleccionar e insertar en varias bases de datos con MySQL
- 20. Patrón para conectar a diferentes bases de datos usando JDBC
- 21. Creación de visión a través de diferentes bases de datos
- 22. Varias bases de datos en el marco de juego
- 23. ¿Tablas de dos bases de datos diferentes en un DBML?
- 24. Cómo mover datos entre 2 tablas/con columnas diferentes en bases de datos diferentes
- 25. Varias bases de datos en una sola aplicación en Android
- 26. Múltiples bases de datos en Rails
- 27. Asociar tablas de diferentes bases de datos - Entity Framework
- 28. Disparadores de bases de datos
- 29. CodeIgniter - El uso de varias bases de datos
- 30. Hibernate/JPA: asignando entidades a bases de datos diferentes
, pero ¿cómo va a tener múltiples conexiones db? –
@munna: Cada implementación de DAO conocerá su Datasource. –