谁能帮看看这是个什么怪问题

时间:2021-02-05 21:23:06
1、spring连接两个数据库
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如有驱动有问题,第一个数据库也应该会不能用

#1


如果不加CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B);用默认的第一个ORACLE数据库则没有错误提示,一切正常

#2


你的oracle驱动有问题,没有加载成功

#3


你的oracle驱动有问题,没有加载成功 
当我用第一个数据库的时侯就没有这个问题,一切正常,两个数据库都是ORACLE如有驱动有问题,第一个数据库也应该会不能用