我有一个应用程序,在不同的地理位置使用四个数据库。所有数据库都包含相同的表,只是根据位置不同使用不同的数据库名称。 我需要在我的应用程序中创建一些报告,这些报告使用来自每个数据库的数据。从Java应用程序创建这些数据库连接的适当方法是什么?是否有适合此任务的设计模式可以使用?
我有一个应用程序,在不同的地理位置使用四个数据库。所有数据库都包含相同的表,只是根据位置不同使用不同的数据库名称。 我需要在我的应用程序中创建一些报告,这些报告使用来自每个数据库的数据。从Java应用程序创建这些数据库连接的适当方法是什么?是否有适合此任务的设计模式可以使用?
hibernate
,JPA
,ORM
,因此我假设您正在处理普通的JDBC。
话虽如此,我建议您拥有DAO层来处理底层数据库,并将连接详细信息留给特定实现。您可以在一些.properties
文件中配置连接字符串。
[补充]
您还可以使用DAO工厂,它是Abstract Factory或Factory Method模式的实现,视情况而定。
[链接]
您可以使用像Hibernate这样的ORM工具轻松处理多个连接。您可以在单独的配置文件中指定每个连接,并通过每次获取新的session factory来实例化所需的连接。
另一种方法是使用数据源和JNDI:Java连接多个数据库
我认为您可以将Factory模式和Singleton模式组合使用以达到目的。
非常简单 :)
1.创建一个数据源以尝试连接到数据库
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());
}
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();
}
}
祝你好运。
假设您正在使用Spring MVC与Hibernate和XML配置,请按照以下步骤操作:
在您的spring-servlet
文件中创建所有数据库的bean。
<bean id="dataSource1" Class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="url" value="jdbc:sqlserver://localhost:1433;databaseName=database1"/>
<property name="username" value="abc" />
<property name="password" value="abc@123" />
</bean>
在Spring-servlet文件中创建所有要使用的数据库的sessionFactory
bean。
<bean id="datasource1SessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource"
ref="database1"/>
<property name="packagesToScan"
value="com.id4.iprod.entity"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.hbm2ddl.auto">
</prop>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServer2012Dialect
</prop>
</props>
</property>
</bean>
现在,您只需要在DAO中打开要连接的数据库的会话,并从所需的数据库访问所需的结果。
Session datasource1= this.datasource1SessionFactory.openSession();