jenkins中执行java代码连接数据库,找不到mysql驱动

不会修电脑的程序员 2019-08-30 11:13:01
目的:SVN提交代码通过hook触发jenkins,执行java代码将svn提交日志存入mysql数据库。
目前进度:hook可以触发jenkins构建,jenkins可以执行java代码并且把参数传入java类。但是执行java代码连接数据库时找不到驱动。

jenkins的构建就是执行批处理命令。intime等是拿到的参数。
D:
cd D:\code
javac JenkinsSVN.java
java JenkinsSVN %intime% %changePath% %author%

JenkinsSVN.java 部分代码如下:

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

public class JenkinsSVN {

private static final String DRIVER="com.mysql.jdbc.Driver"; //驱动类
private static final String URL=""; //数据库路径
private static final String USERNAME=""; //账号
private static final String PASSWORD=""; //密码

private static Connection conn = null;
private static Statement stmt = null;
private static ResultSet rs = null;
private static StringBuffer sql = new StringBuffer();

public static void main(String[] args) {
System.out.println("提交日期:"+args[0]);
System.out.println("提交路径:"+args[1]);
System.out.println("提交作者:"+args[2]);
System.out.println("SVN地址:"+args[3]);

getConnection();
doInsert(args[3], args[2], args[1], args[0], conn);
System.out.println("日志新增成功!");
}

public static void getConnection() {
try {
Class.forName(DRIVER);//加载mysql驱动程序类
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);//建立链接
System.out.println("数据库连接成功");
}catch(Exception e){
e.printStackTrace();
}
}


如果直接从我本地执行jenkins中的命令可以正常跑java代码,数据可以存入数据库。但是从jenkins跑就会报错java.lang.ClassNotFoundException: com.mysql.jdbc.Driver。JDK环境是正常的代码,jenkins中java编译成功。

望大佬指点,急!!!
...全文
1939 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复 1
驱动包复制到jenkins安装目录 Jenkins\war\WEB-INF\lib 路径下,重启jenkins服务。
TouGH丶Er 2019-09-03
  • 打赏
  • 举报
回复
学习js ing...
  • 打赏
  • 举报
回复
引用 26 楼 luj_1768 的回复:
请问:svn 是防火墙么?如果是的话,相关数据会自动保存,并且得到适当的安全措施保护。试试其他数据吧,其他部分可能都没有问题。
SVN的数据目前可以获取到,而且没有到将数据insert进数据库那一步,目前是jenkins中拿不到驱动jar,和数据库建立不起来连接。
luj_1768 2019-09-03
  • 打赏
  • 举报
回复
请问:svn 是防火墙么?如果是的话,相关数据会自动保存,并且得到适当的安全措施保护。试试其他数据吧,其他部分可能都没有问题。
  • 打赏
  • 举报
回复
引用 23 楼 TouGH^晓墨 的回复:
学习js ing...
半夜一点还在逛论坛啊,可以的,一起努力
  • 打赏
  • 举报
回复
引用 22 楼 yy499121268 的回复:
url怎么写的?
jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC&useSSL=false&characterEncoding=utf8&autoReconnect=true
  • 打赏
  • 举报
回复
set JAVA_HOME=D:\java\java\jdk.1.8
set classpath=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\mysql-connector-java-5.1.21.jar;
set path=D:\java\java\jdk.1.8\bin
cd C:\Users\Administrator\.jenkins\workspace
javac JenkinsSVN.java
java JenkinsSVN %intime% %changePath% %author% https://DESKTOP-4A16P1U:8443/svn/SVNRepository
通过set classpath将驱动加进去就可以了。很奇怪为什么在环境变量里面的classpath添加驱动包没有用。可能是jenkins的环境和本地环境不是一个东西。很开心问题解决了,谢谢所有出谋划策的人,一起努力。
yy499121268 2019-09-02
  • 打赏
  • 举报
回复
url怎么写的?
  • 打赏
  • 举报
回复
引用 20 楼 yy499121268 的回复:
检查一下版本号
目前版本mysql-connector-java-8.0.16.jar,驱动引用com.mysql.cj.jdbc.Driver 之前mysql-connector-java-5.1.21.jar,驱动引用com.mysql.jdbc.Driver 两个版本都不行。
yy499121268 2019-09-02
  • 打赏
  • 举报
回复
检查一下版本号
  • 打赏
  • 举报
回复
引用 18 楼 oh_Maxy 的回复:
https://blog.csdn.net/superdangbo/article/details/78732700 这两种驱动包不一样,可能是你驱动包下载错了?看下这个博客,下载对应的驱动包吧。
5.0不带cj的驱动我试过,现在用的是8.0版本的要带cj的,还是不行。
oh_Maxy 2019-08-30
  • 打赏
  • 举报
回复
https://blog.csdn.net/superdangbo/article/details/78732700
这两种驱动包不一样,可能是你驱动包下载错了?看下这个博客,下载对应的驱动包吧。
oh_Maxy 2019-08-30
  • 打赏
  • 举报
回复
com.mysql.cj.jdbc.Driver
你这驱动有问题吧?怎么是cj的?
oh_Maxy 2019-08-30
  • 打赏
  • 举报
回复
tomcat的lib下放驱动包了吗?
类似这样的:
mysql-connector-java-5.1.15.jar
  • 打赏
  • 举报
回复
引用 13 楼 oh_Maxy 的回复:
你用tomcat方式,别用免安装方式吧: 1.2.3 基于 Tomcat 安装 安装并启动 Tomcat; 从官网下载 jenkins.war 至 $CATALINA_BASE/webapps,Tomcat 会自动部署; https://blog.csdn.net/shuizhihun07/article/details/80168076
我把war包放到wabapps下面,然后启动tomcat自动部署jenkins服务,还是一样的错误。
  • 打赏
  • 举报
回复
引用 11 楼 tianfang 的回复:
1 java 还有--class-path 参数,把mysql jdbc 放在指定目录中, 使用--class-path 传递 2 把JenkinsSVN.java 和jdbc 打成jar包,java -jar 方式运行
很好的新的思路,我正在尝试。但是目前第一种方式还是报错。 D:\code>javac JenkinsSVN.java -classpath mysql-connector-java-8.0.16.jar D:\code>java JenkinsSVN 20190830 ;Ushopping/src/com/school/sp/controller/AreaController.java sunlf https://DESKTOP-4A16P1U:8443/svn/SVNRepository 提交日期:20190830 提交路径:;Ushopping/src/com/school/sp/controller/AreaController.java 提交作者:sunlf SVN地址:https://DESKTOP-4A16P1U:8443/svn/SVNRepository java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at JenkinsSVN.getConnection(JenkinsSVN.java:33) at JenkinsSVN.main(JenkinsSVN.java:26) java.lang.NullPointerException at JenkinsSVN.doInsert(JenkinsSVN.java:51) at JenkinsSVN.main(JenkinsSVN.java:27) 我用参数的方式不对么?
oh_Maxy 2019-08-30
  • 打赏
  • 举报
回复
你用tomcat方式,别用免安装方式吧:
1.2.3 基于 Tomcat 安装

安装并启动 Tomcat;
从官网下载 jenkins.war 至 $CATALINA_BASE/webapps,Tomcat 会自动部署;




https://blog.csdn.net/shuizhihun07/article/details/80168076
  • 打赏
  • 举报
回复
引用 10 楼 oh_Maxy 的回复:
JenkinsSVN.main 这个方法能反编译看下,它是怎么取驱动的吗?
感觉大概就是根据驱动类名,利用类加载器和反射拿到Driver.class加载出来。
tianfang 2019-08-30
  • 打赏
  • 举报
回复
1 java 还有--class-path 参数,把mysql jdbc 放在指定目录中, 使用--class-path 传递 2 把JenkinsSVN.java 和jdbc 打成jar包,java -jar 方式运行
oh_Maxy 2019-08-30
  • 打赏
  • 举报
回复
JenkinsSVN.main 这个方法能反编译看下,它是怎么取驱动的吗?
加载更多回复(9)

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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