java - 异常: java. lang.ClassNotFoundException : org. apache.commons.dbcp.BasicDataSource

标签 java spring jdbc spring-jdbc jdbctemplate

我正在尝试使用 apache derby connectio 将普通 JDBC 连接转换为 spring JDBC 连接,并且我已经添加了 jar。

我收到错误

Jan 15, 2020 10:29:52 AM org.springframework.context.support.AbstractApplicationContext refresh
WARNING: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'circleDAO': Unsatisfied dependency expressed through field 'dataSource'; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.commons.dbcp.BasicDataSource] for bean with name 'dataSource' defined in class path resource [spring.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource
Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'circleDAO': Unsatisfied dependency expressed through field 'dataSource'; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.commons.dbcp.BasicDataSource] for bean with name 'dataSource' defined in class path resource [spring.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:116)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:144)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:85)
    at org.backdoor.javaspring.JdbcDemo.main(JdbcDemo.java:13)
Caused by: org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.apache.commons.dbcp.BasicDataSource] for bean with name 'dataSource' defined in class path resource [spring.xml]; nested exception is java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1476)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:682)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:649)
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1604)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:520)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:499)
    at org.springframework.beans.factory.BeanFactoryUtils.beanNamesForTypeIncludingAncestors(BeanFactoryUtils.java:265)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1451)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1250)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1207)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
    ... 15 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:277)
    at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:456)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1541)
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1468)
    ... 25 more

我正在尝试使用数据源将 jdbc 转换为 spring jdbc 模板 我的 Spring.xml 是

<?xml version="1.0" encoding="UTF-8"?>


<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"
    xmlns:context="http://www.springframework.org/schema/context">

    <context:annotation-config/>

     <context:component-scan base-package="org.backdoor.dao"></context:component-scan>


     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="org.apache.derby.jdbc.ClientDriver"></property>
        <property name="url" value="jdbc:derby://localhost:1527/db;create=true"></property>
        <property name="initialSize" value="2"></property>
        <property name="maxActive" value="5"></property>
     </bean>
</beans>

和我的 DAO

package org.backdoor.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.sql.DataSource;

import org.backdoor.model.Circle;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class CircleDAO {
        @Autowired
        private DataSource dataSource;
    public Circle getCircle(int circleId) {
        Connection con=null;
        try {           
        con=dataSource.getConnection();
        PreparedStatement ps=con.prepareStatement("Select * from circle where id=?");
        ps.setInt(1, circleId);

        Circle c=null;
        ResultSet rs=ps.executeQuery();

        if(rs.next())
        {
            c=new Circle(circleId, rs.getString("name"));
        }
        rs.close();
        ps.close();
        return c;
        }catch (Exception e) {
                throw new RuntimeException(e);
        }finally {
            try {
                con.close();
            }catch (SQLException e) {
                // TODO: handle exception
            }

        }


    }

    public DataSource getDataSource() {
        return dataSource;
    }
    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }

}

主类是

package org.backdoor.javaspring;

import org.backdoor.dao.CircleDAO;
import org.backdoor.model.Circle;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class JdbcDemo {

    public static void main(String[] args) {


          ApplicationContext ctx=new ClassPathXmlApplicationContext("spring.xml");
          CircleDAO circleDAO=ctx.getBean("circleDAO",CircleDAO.class);
          Circle circle=circleDAO.getCircle(1); 
          System.out.println(circle.getName());



    }

}

如何解决上述错误?我没有得到上述问题的正确解决方案。

最佳答案

我的项目中缺少一个 jar。

https://commons.apache.org/proper/commons-pool/download_pool.cgi

我使用的是 dbcp 而不是 dbcp2

关于java - 异常: java. lang.ClassNotFoundException : org. apache.commons.dbcp.BasicDataSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59745436/

相关文章:

java - 错误的序数绑定(bind)和命名绑定(bind)无法组合异常

jdbc - 使用 jdbc mysql vs postgresql 将谷歌电子表格连接到亚马逊 Redshift

java - 字母的 Tersest 正则表达式

java - Spring Boot 拦截器无论如何都会调用排除模式

spring - <beans> 到 <beans :beans> - element beans must be declared

spring - 如何在 BeanFactoryPostProcessor 中获取命令行参数?

java - 在java中获取无效游标状态异常

java - 是否可以使用java将数据附加到hdfs

java - C 服务器到 Java 客户端套接字读取以短值传递

java - 从 JSON 对象获取数组