mephla 2021-05-08 09:39 采纳率: 0%
浏览 329

web项目中JDBC工具类无法初始化

我用的是intelij idea,准备做个网站。结果在测试一个从数据库拿数据的servlet时报错

java.lang.NoClassDefFoundError: Could not initialize class com.utils.JDBCutils

发现在Dao的实现类中添加main主程序可以运行,但是开启tomcat后无法初始化工具类com.utils.JDBCutils。

其中配置文件放在resource下,从上到下看了看代码也没有什么错的地方。

工具类代码:

package com.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;

public class JDBCutils {
    //静态jdbc参数
    private static DataSource ds;


    static{
        //读取资源文件,获取jdbc相关值
        try {
            Properties pro = new Properties();
            //加载配置文件
            pro.load(JDBCutils.class.getClassLoader().getResourceAsStream("druid.properties"));
            ds = DruidDataSourceFactory.createDataSource(pro);


        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //获取连接@return连接对象
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    //释放资源
    // @param stmt
    // @param conn

    public static void close(Statement stmt,Connection conn){
       close(null,stmt,conn);
    }

    //释放资源
    // @param rs
    // @param stmt
    // @param conn
    public static void close(ResultSet rs,Statement stmt,Connection conn){

        if(rs != null){
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        if(stmt != null){
            try {
                stmt.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

        if(conn != null){
            try {
                conn.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }

    //获取链接池方法
    public static DataSource getDataSoucrce(){
        return ds;
    }

}

现在就是不知道这个报错到底咋回事,明明工具类在实现类中可以初始化,为啥在启动web项目时报错了.....

  • 写回答

3条回答 默认 最新

  • mephla 2021-05-08 09:43
    关注

    配置文件:

    #驱动加载
    driverClassName=com.mysql.cj.jdbc.Driver
    #注册驱动
    url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8&serverTimezone=UTC
    #连接数据库的用户名
    username=root
    #连接数据库的密码
    password=12345678
    #属性类型的字符串,通过别名的方式配置扩展插件, 监控统计用的stat 日志用log4j 防御sql注入:wall
    filters=stat
    #初始化时池中建立的物理连接个数。
    initialSize=2
    #最大的可活跃的连接池数量
    maxActive=300
    #获取连接时最大等待时间,单位毫秒,超过连接就会失效。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降, 如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
    maxWait=60000
    #连接回收器的运行周期时间,时间到了清理池中空闲的连接,testWhileIdle根据这个判断
    timeBetweenEvictionRunsMillis=60000
    minEvictableIdleTimeMillis=300000
    #用来检测连接是否有效的sql,要求是一个查询语句。
    validationQuery=SELECT 1
    #建议配置为true,不影响性能,并且保证安全性。 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis, 执行validationQuery检测连接是否有效。
    testWhileIdle=true
    #申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。设置为false
    testOnBorrow=false
    #归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能,设置为flase
    testOnReturn=false
    #是否缓存preparedStatement,也就是PSCache。
    poolPreparedStatements=false
    #池中能够缓冲的preparedStatements语句数量
    maxPoolPreparedStatementPerConnectionSize=200
    评论

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试