
有啊,不管是hibernate还是mybatis都支持动态切换数据库配置
这是个hibernate的例子:>
一下方法只能是同一种数据库, 因为数据库不同的话,数据库方言也就不同,这个暂时解决不了
applicationContextxml:
<bean id="parentDataSource" class="orgapachecommonsdbcpBasicDataSource" destroy-method="close">
<!-- 设置连接池初始值 -->
<property name="initialSize" value="5" />
<!-- 设置连接池最大值 -->
<property name="maxActive" value="5" />
<!-- 设置连接池最小空闲值 -->
<property name="minIdle" value="2" />
<!-- 设置连接池最大空闲值 -->
<property name="maxIdle" value="5" />
</bean>
<bean id="sessionFactory" class="orgspringframeworkormhibernate3annotationAnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="hibernateProperties">
<value>
<!-- 设置数据库方言 -->
hibernatedialect=orghibernatedialectOracle10gDialect
<!-- 输出SQL语句到控制台 -->
hibernateshow_sql=true
<!-- 格式化输出到控制台的SQL语句 -->
hibernateformat_sql=true
</value>
</property>
<property name="packagesToScan" value="comzxwlinkbusinessentity"></property>
</bean>
<bean id="dataSource" class="comzxwlinkcommonsdataDynamicDataSource">
<property name="targetDataSources">
<map key-type="javalangString">
<entry key="zxw" value-ref="zxw_DataSource"/>
<entry key="new_back" value-ref="new_back_DataSource"/>
<!--更多的数据源,根据下面的配置文件再写一个datasource 并且在这里配置entry -->
</map>
</property>
<property name="defaultTargetDataSource" ref="zxw_DataSource"/>
</bean>
<bean id="zxw_DataSource" parent="parentDataSource">
<!-- 设置JDBC驱动名称 -->
<property name="driverClassName" value="oraclejdbcdriverOracleDriver" />
<!-- 设置JDBC连接URL -->
<property name="url" value="jdbc:oracle:thin:@148202017:1521:oradb" />
<!-- 设置数据库用户名 -->
<property name="username" value="zhou" />
<!-- 设置数据库密码 -->
<property name="password" value="zhou" />
</bean>
<!-- #################### 新备份 ################ -->
<bean id="new_back_DataSource" parent="parentDataSource">
<!-- 设置JDBC驱动名称 -->
<property name="driverClassName" value="oraclejdbcdriverOracleDriver" />
<!-- 设置JDBC连接URL -->
<property name="url" value="jdbc:oracle:thin:@148202015:1521:ora10" />
<!-- 设置数据库用户名 -->
<property name="username" value="report" />
<!-- 设置数据库密码 -->
<property name="password" value="report" />
</bean>
<!-- #################### 新备份 ################ -->
DynamicDataSource java:
public class DynamicDataSource extends AbstractRoutingDataSource {
protected Object determineCurrentLookupKey() {
// TODO Auto-generated method stub
return CustomerContextHoldergetCustomerType();
}
}
CustomerContextHolder java:
public class CustomerContextHolder {
private static final ThreadLocal contextHolder =
new ThreadLocal();
public static void setCustomerType(String customerType) {
contextHolderset(customerType);
}
public static String getCustomerType() {
return (String) contextHolderget();
}
public static void clearCustomerType() {
contextHolderremove();
}
}
action中调用
public class ZzhAction {
@Resource
private ZzhService zzhService;
@RequestMapping("/zzh/testdo")
public void test(){
List<Zzh> zzhs=zzhServicegetAll();
Systemoutprintln(zzhssize());
//设置数据源, 参数为配置文件中的
//<entry key="new_back" value-ref="new_back_DataSource"/> 的key
CustomerContextHoldersetCustomerType("new_back");
}
}
首先web程序,每天访问量巨大!
页面本身已经有一个数据库查询,我打算在此次数据库查询里把我需要的另一种信息查出来,而不是多一次数据库查询,这样的代价就是循环遍历结果集的时候,循环次数多了(预计最多多了100以内)。
想问下,两种方案哪个从性能方面来说更 *** 蛋?
1,一次数据库查询查出所有,代价是多了几次循环。
2,分开两次数据库查询。
以上就是关于JAVA连接多个数据库有什么开源实现吗全部的内容,包括:JAVA连接多个数据库有什么开源实现吗、java如何实现多种数据库的同步、java web项目中hibernate +spring +tomcat如何实现多数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)