项目要用到从两个不同url的数据库查值,基于mybatis,用法记录一下:
#######################1数据源#######################
outdata.driverClass=com.mysql.jdbc.Driver
outdata.url=jdbc:mysql://********/outdata?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
outdata.username=root
outdata.password=***********
#######################2数据源#######################
jst.driverClass=com.mysql.jdbc.Driver
jst.url=jdbc:mysql:/*****/jst_sys?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
jst.username=****
jst.password=*******************
bean配置:
<!-- 参数配置 -->
<!--<context:property-placeholder ignore-resource-not-found="true" location="classpath:*.properties" order="0"/>-->
<!--start 数据库数据源配置outdata -->
<tx:annotation-driven transaction-manager="masterTransactionManager"/>
<bean id="outdataDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${outdata.driverClass}"></property>
<property name="url" value="${outdata.url}"></property>
<property name="username" value="${outdata.username}"></property>
<property name="password" value="${outdata.password}"></property>
<property name="initialSize" value="${initialSize}"/>
<property name="maxActive" value="${maxActive}"></property>
<property name="maxIdle" value="${maxIdle}"></property>
<property name="minIdle" value="${minIdle}"></property>
<property name="maxWait" value="${maxWait}"></property>
<property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}"></property>
<property name="numTestsPerEvictionRun" value="${numTestsPerEvictionRun}"></property>
<property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}"></property>
<property name="removeAbandoned" value="${removeAbandoned}"></property>
<property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}"></property>
<property name="testOnBorrow" value="${testOnBorrow}"></property>
<property name="validationQuery">
<value>SELECT 1 FROM DUAL</value>
</property>
</bean>
<!--start 数据库数据源配置jst -->
<bean id="jstDataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jst.driverClass}"></property>
<property name="url" value="${jst.url}"></property>
<property name="username" value="${jst.username}"></property>
<property name="password" value="${jst.password}"></property>
<property name="initialSize" value="${initialSize}"/>
<property name="maxActive" value="${maxActive}"></property>
<property name="maxIdle" value="${maxIdle}"></property>
<property name="minIdle" value="${minIdle}"></property>
<property name="maxWait" value="${maxWait}"></property>
<property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}"></property>
<property name="numTestsPerEvictionRun" value="${numTestsPerEvictionRun}"></property>
<property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}"></property>
<property name="removeAbandoned" value="${removeAbandoned}"></property>
<property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}"></property>
<property name="testOnBorrow" value="${testOnBorrow}"></property>
<property name="validationQuery">
<value>SELECT 1 FROM DUAL</value>
</property>
</bean>
<bean id="dataSource" class="com.jd.data.util.DatabaseContextHolder">
<property name="defaultTargetDataSource" ref="outdataDataSource"/>
<property name="targetDataSources">
<map>
<entry key="outdataDataSource" value-ref="outdataDataSource"/>
<entry key="jstDataSource" value-ref="jstDataSource"/>
</map>
</property>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:spring/sqlmap-config.xml"></property>
<property name="configurationProperties">
<props>
<prop key="cacheEnabled">true</prop>
<prop key="lazyLoadingEnabled">true</prop>
<prop key="aggressiveLazyLoading">false</prop>
<prop key="multipleResultSetsEnabled">true</prop>
<prop key="useColumnLabel">true</prop>
<prop key="useGeneratedKeys">true</prop>
<prop key="autoMappingBehavior">FULL</prop>
<prop key="defaultExecutorType">BATCH</prop>
<prop key="defaultStatementTimeout">25000</prop>
</props>
</property>
</bean>
<bean id="masterTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<!--end 数据库数据源配置ad_advertisers -->
java的工具类:
package com.jd.data.util;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DatabaseContextHolder extends AbstractRoutingDataSource{
public static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static void setSelectedDatabase(String databaseName){
contextHolder.set(databaseName);
}
public static String getSelectedDatabase(){
String databaseName= (String)contextHolder.get();
return databaseName;
}
public void clearContext(){
contextHolder.remove();
}
@Override
protected Object determineCurrentLookupKey() {
return DatabaseContextHolder.getSelectedDatabase();
}
}
调用时候指明数据库:
public int insert(OutLogInfo outLogInfo) {
DatabaseContextHolder.setSelectedDatabase("outdataDataSource");
return outLogInfoManageDao.insert(outLogInfo);
}