2、ApplicationContext.xml中的配置:
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:jdbc.properties</value>
</property>
</bean>
<!-- 主数据库连接参数 -->
<bean id="dataSourceA" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driverClassName}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</bean>
<!-- 体验收费数据库连接参数 -->
<bean id="dataSourceSf" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driverClassName2}" />
<property name="url" value="${url2}" />
<property name="username" value="${username2}" />
<property name="password" value="${password2}" />
</bean>
<bean id="dynamicDataSource" class="Lankey.unti.DynamicDataSource">
<!--通过key-value的形式来关联数据源 -->
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry value-ref="dataSourceA" key="dataSourceA"></entry>
<entry value-ref="dataSourceSf" key="dataSourceSf"></entry>
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSourceA" >
</property>
</bean>
<!-- 主数据库Template -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dynamicDataSource" />
</property>
</bean>
<bean id="dataSourceTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dynamicDataSource" />
</property>
</bean>
3、相应的类
package Lankey.unti;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import org.springframework.stereotype.Repository;
@Repository
public class DynamicDataSource extends AbstractRoutingDataSource {
@Override
protected Object determineCurrentLookupKey() {
return CustomerContextHolder.getCustomerType();
}
}
package Lankey.unti;
public class CustomerContextHolder {
public static final String DATA_SOURCE_A = "dataSourceA";
public static final String DATA_SOURCE_B = "dataSourceSf";
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static void setCustomerType(String customerType) {
contextHolder.set(customerType);
}
public static String getCustomerType() {
return contextHolder.get();
}
public static void clearCustomerType() {
contextHolder.remove();
}
}
4、实现类
package Lankey.dao.impl;
import java.util.Date;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import Lankey.dao.FareDao;
import Lankey.model.Fare;
import Lankey.unti.CustomerContextHolder;
@Repository
public class FareDaoImpl implements FareDao {
@Resource()
private JdbcTemplate jdbcTemplate;
public List<Fare> getFareByDate(Date rq) {
System.out.println(jdbcTemplate);
CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B);
String sql="select * from fare where skrq>=to_date('2016-5-26','yyyy-MM-dd')";
/*List<Fare> fare=jdbcTemplateSf.query(sql, new Date[]{rq}, new FareRowMapper());*/
jdbcTemplate.execute(sql);
/*System.out.println(fare);*/
return null;
}
}
当运行到jdbcTemplate.execute(sql);
时出现错误:HTTP Status 500 - Request processing failed; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver '
请 问如何解决
3 个解决方案
#1
如果不加CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B);用默认的第一个ORACLE数据库则没有错误提示,一切正常
#2
你的oracle驱动有问题,没有加载成功
#3
你的oracle驱动有问题,没有加载成功
当我用第一个数据库的时侯就没有这个问题,一切正常,两个数据库都是ORACLE如有驱动有问题,第一个数据库也应该会不能用
当我用第一个数据库的时侯就没有这个问题,一切正常,两个数据库都是ORACLE如有驱动有问题,第一个数据库也应该会不能用
#1
如果不加CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B);用默认的第一个ORACLE数据库则没有错误提示,一切正常
#2
你的oracle驱动有问题,没有加载成功
#3
你的oracle驱动有问题,没有加载成功
当我用第一个数据库的时侯就没有这个问题,一切正常,两个数据库都是ORACLE如有驱动有问题,第一个数据库也应该会不能用
当我用第一个数据库的时侯就没有这个问题,一切正常,两个数据库都是ORACLE如有驱动有问题,第一个数据库也应该会不能用