遇到的离谱JavaWeb项目bug(mysql-connector-j和mysql-connector-java)

一、对当时问题的分析

两个包都是用来连接数据库的,在用的时候我选择了mysql-connector-java,maven依赖如下:

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.28</version>
    </dependency>

在写项目的时候,每次DAO层实现类写完一个方法,我都会在text中进行测试,测试均没有问题。

但就在我将前后端进行联调的时候,离谱的事情出现了,就在我单独测试的没有问题的方法中,一直拿不到对象,控制台报的错也是反射相关的在反射中拿不到该类(我用了前端控制器,前端控制器代码如下)

public class StudentCentre extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String uri = req.getRequestURI();
        String methodName = uri.substring(uri.lastIndexOf("/") + 1);
        //获取反射类
        Class<? extends StudentCentre> aClass = this.getClass();
        try {
            //获取方法
            Method method = aClass.getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            //执行方法
            method.invoke(this,req,resp);
        } catch (NoSuchMethodException e) {
            throw new RuntimeException(e);
        } catch (InvocationTargetException e) {
            throw new RuntimeException(e);
        } catch (IllegalAccessException e) {
            throw new RuntimeException(e);
        }
    }
}

于是我在后端打了断点,一步一步进行分析(由于问题已经解决,当时没有记录,我就把当时情况介绍一下),最后错误出现在连接数据库工具类中,具体代码如下:

static DataSource dataSource = null;
    static {
        try {
            //读取配置文件
            InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties");
            Properties properties = new Properties();
            //将读取的内容加载到properties容器中
            properties.load(resourceAsStream);
            //druid连接池对象
            dataSource = DruidDataSourceFactory.createDataSource(properties);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

代码问题是出现在这一步:

//druid连接池对象
dataSource = DruidDataSourceFactory.createDataSource(properties);

dataSource这个数据源一直为空,后来又进入DruidDataSourceFactory类中进行查看,查看是否是我jdbc.properties配置文件的问题,进去后数据也都可以正常获取,但是dataSource一直是空,之后又找了好久,一直没有找到问题所在,最后把依赖换为如下,并更新maven仓库。

    <dependency>
      <groupId>com.mysql</groupId>
      <artifactId>mysql-connector-j</artifactId>
      <version>8.0.33</version>
    </dependency>

把原来打好的包删除,重新打包,运行后问题解决。删除包和重新打包如下图所示,命令分别为clean和install。

二、总结

如果你在使用mysql-connector-java包是遇到反射相关的问题分如下步骤进行修改。

1.将mysql-connector-java修改依赖为mysql-connector-j。

2.更新maven仓库。

3.把原来打好的包删除,重新打包。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值