一、对当时问题的分析
两个包都是用来连接数据库的,在用的时候我选择了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.把原来打好的包删除,重新打包。