关于德鲁伊连接池链接获取问题

年轻的猴 2020-08-14 11:31:13
今天写web项目的时候出了点问题,项目一直报空指针,但是我的测试类获取链接什么的都可以用,后面问了下一起写项目的朋友,发现他们链接获取用的都是 JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
我源码用的是ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");,但是测试类什么的都可以,不知道为什么web就会报空指针,这里请问下大佬们。
package cn.zsp.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;


public class JdbcUtils {
private static DataSource ds;
static{
try {
Properties pro=new Properties();
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc" +
".properties");
pro.load(is);
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (Exception e) {
e.printStackTrace();
}

}


public static Connection getConnection() {

Connection conn = null;
try {
conn = ds.getConnection();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return conn;

}
public static void close(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
...全文
8298 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
高家琛i 2022-07-23
  • 打赏
  • 举报
回复

兄弟解决了嘛?我也遇到了 = =,单元测试德鲁伊连接池可以连接上,但是在web中 就报空指针。。

请叫我刘小强 2021-12-13
  • 打赏
  • 举报
回复

一个是类加载器去加载 也就是你当前项目路径下面去获取这个jdbc.properties的属性 一个是通过jdbcUtil的静态类的类加载器加载 找jdbcUtil所在类的路径下去加载jdbc.properties的属性

KeepSayingNo 2020-09-02
  • 打赏
  • 举报
回复
断点跟进去看看看ClassLoader.getSystemClassLoader() 是什么东西
s478853630 2020-09-02
  • 打赏
  • 举报
回复
把绝对路径打印出来看看就知道了
tianfang 2020-08-19
  • 打赏
  • 举报
回复 1
应该使用容器连接池或者项目模块中连接池,而不是使用自己的连接工具类,开发环境和生产环境classloader不同,导致文件路径不同
public class Pagi { ResultSet CountTopicrs=null; //初始化总记录数Rs变量 ResultSet Pagirs=null; //初始化分页时Rs变量 public int intCountTopic=0; //主题总数 public int intPageSize;//每页显示主题数 public int intPageCount;//总页数 public int intPage=1; //当前页数 public String nowPage; // int i; public String HttpFile;//初始化当前页intPage变量,以准确便获取当前页。 //当前的地址栏的文件 DB db; //定义Linkdb类的一个对象。 public Pagi()//定义构造器,初始化每页显示的主题数和数据库的连接。 { intPageSize=4; //每页显示的记录数目 db = new DB(); } //Countsql:总记录的Query字符串。[形式为select count(*) from tablename] //Pagisql :要分页的Query字符串。[形式为select * from tablename where ...] //request :参数传递过程中的变量。[用来控制翻页时的pages变量] public ResultSet querySql(String Countsql,String Pagisql,HttpServletRequest request)throws Exception { HttpFile=request.getRequestURI(); //获取当前文件名。 nowPage=request.getParameter("pages"); //获取当前页,将数值赋予intPage变量。[分页栏中必须要有pages参数] if (nowPage==null) { intPage=1; } else { intPage=Integer.parseInt(nowPage); if (intPage<1) intPage=1; } CountTopicrs=db.executeQuery(Countsql); //@@@@@@@@@@@@获取总记录数的结果集。 if (CountTopicrs.next()) { intCountTopic=CountTopicrs.getInt(1); } intPageCount = (intCountTopic+intPageSize-1)/intPageSize; //获取总页数。 if (intPage>intPageCount)//如果当前页大于总页数,则当前页等于总页数。 { intPage=intPageCount; } CountTopicrs.close(); //关闭总主题数的数据集。 db.close_all(); Pagirs=db.executeQuery(Pagisql); //@@@@@@@@@@@@@@@获取执行分页的结果集。 return Pagirs; }//end querySql function. public int getCountTopic()//获取记录总数。 { return intCountTopic; } public int getPageCount() //获取总页数。 { return intPageCount; } public int getIntPage() //获取当前页数。 { return intPage; } public String PageFooter() { String str = ""; int next, prev; prev=intPage-1; next=intPage+1; str += "查询到"+getCountTopic()+"条记录"+ " 共"+getPageCount()+"页"; str +=" 第"+getIntPage()+"页 "; if(intPage>1) str += " 首页 "; else str += " 首页 "; if(intPage>1) str += " 上一页 "; else str += " 上一页 "; if(intPage下一页 "; else str += " 下一页 "; if(intPageCount>1&&intPage!=intPageCount) str += " 尾页"; else str += " 尾页 "; return str; } public void close_all() { db.close_all(); } }
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 JavaEE+JDBC+Servlet+EL表达式的员工信息管理系统源码+数据库+项目说明(高分课设).zip # :heart: JavaEE+JDBC+Servlet+EL表达式的员工信息管理系统 ## 介绍 简易的员工管理系统,包括信息的增删改查,新增员工图像 前端:`HTML`,`CSS`,`JavaScript`,`jQuery`,`EL表达式`,`jsp`
后端:`JavaEE`,`servlet`(创建servlet,使用get和post请求处理数据;使用Request,Response,session存储数据),`JDBC`(德鲁伊数据库连接池,使用QueryRunner处理数据)
和上一次系统[bootstrap+JavaEE+JDBC+JSP的信息管理系统](https://gitee.com/LovelyHzz/Info-management-system)相比 1. 使用了servlet把业务处理代码放在后台处理,删除了不必要的jsp页面 2. 使用El表达式展示数据,不用在前台获取一遍session数据 **2021/9/27 更新** 1. 新增分页功能,包括所有用户和部门用户分页;使用PageUtils分页工具类 **2021/10/8 更新** 1. dao层和service层部分采用单例模式(懒汉式-不支持多线程) 2. service层部门采用工厂模式 ## 源码 [v1.0 - servlet-v1.0](https://gitee.com/LovelyHzz/java-ee-jdbc-servlet/tree/master/servlet-v1.0)
[v2.0 - servlet-v2.0](https://gitee.com/LovelyHzz/java-ee-jdbc-servlet/tree/master/servlet-v2.0)
[v3.0 - servlet-v3.0](https://gitee.com/LovelyHzz/java-ee-jdbc-servlet/tree/master/servlet-v3.0)
[v4.0 - servlet-v4.0](https://gitee.com/LovelyHzz/java-ee-jdbc-servlet/tree/master/servlet-v4.0)
## 项目展示效果
### 主页 ![主页](https://images.gitee.com/uploads/images/2021/0925/104935_f4123936_8254421.png "主页.png") ### 注册 ![注册页面](https://images.gitee.com/uploads/images/2021/0925/104049_736a293e_8254421.png "注册.png") ### 员工列表 ![用户列表-第一次注册无须添加头像](https://images.gitee.com/uploads/images/2021/0925/104127_4d423d7c_8254421.png "用户列表-注册无须添加头像.png") ![用户列表-展示工资样式{大于8000:绿色;6000~8000之间:红色}](https://images.gitee.com/uploads/images/2021/0925/104208_ab42ad8c_8254421.png "用户列表-展示工资样式.png") ![员工列表-筛选部门](https://images.gitee.com/uploads/images/2021/0925/110316_d9957fdf_8254421.png "员工列表-筛选部门.png") ### 修改 ![修改页面](https://images.gitee.com/uploads/images/2021/0925/104408_5e4c5bc2_8254421.png "修改页面.png") ![修改一下工资](https://images.gitee.com/uploads/images/2021/0925/104433_895255a2_8254421.png "修改一下工资.png") ![修改完成](https://images.gitee.

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧