Linux搭建disconf(二)

链接:disconf搭建教程(以下的文件路径都是基于我自己的,为了不必要的错误,请你的文件目录务必与我的保持一致,详情见链接)

关于disconf的具体搭建过程请见我上篇文章,里面我详细介绍了搭建disconf的步骤。假如你跟着我的教程一步步走到了最后,当你尝试新建配置文件时,可能会出现以下画面

1:当你启动项目后输入账号密码,成功登录。看起来我们的disconf已经搭建成功了。

Linux搭建disconf(二)

2:但当你新建一个配置文件时,报服务器内部错误

Linux搭建disconf(二)

3:返回配置文件列表,发现我们刚才新建的配置文件已经存在了,但当我们尝试删除它时,却怎么也删不掉

Linux搭建disconf(二)

 

4:打开日志,查看错误信息,报如下错误

Caused by: java.sql.SQLException: Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate(), Statement.executeLargeUpdate() or Connection.prepareStatement().
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.18.jar:8.0.18]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.18.jar:8.0.18]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89) ~[mysql-connector-java-8.0.18.jar:8.0.18]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63) ~[mysql-connector-java-8.0.18.jar:8.0.18]
at com.mysql.cj.jdbc.StatementImpl.getGeneratedKeys(StatementImpl.java:1376) ~[mysql-connector-java-8.0.18.jar:8.0.18]

5:该错误的言下之意是,我们在执行更新(添加)操作后,要想返回数据的主键,我们需要在代码中使用Statement.RETURN_GENERATED_KEYS显示指明

根本原因在于该disconf项目依赖于旧版本的mysql,由于长时间没人维护,已经不兼容新版mysql了。

为了解决这个问题我想到了三种方案

  • 将Linux中的mysql降级为官方推荐的5.0.45版本,然后修改你的连接驱动,删除掉war目录下的所有文件,重新部署
  • 在Linux中安装2台mysql服务,第一台为5.0.45版本,专门作为disconf的专有数据库,第二台作为自己的常用数据库
  • 修改源码,修改持久层中关于更新/插入的操作,使其可以返回主键

本来我选择了方案二,但实践过程中感觉有点复杂,我就放弃了,方案一我直接就pass掉了,新版的mysql比旧版的性能更,功能更强大,没理由为了搭一个disconf,放弃使用现有的8.0mysql。

方案三感觉有点难,以我现有的水平很难能缕清源码的思路。所以我本来打算就此放弃,但是在公司闲着也是闲着,我就把disconf的源码clone下来,用idea尝试运行调试,并结合错误信息,开启我的火眼金睛

最终发现并解决了问题。现在来看,真的好简单。下面我说一下解决问题的步骤

简单来说就是修改disconf-web模块中GenericDao.java中的两行代码,具体操作步骤如下

1:在XFTP的地址栏中输入/usr/local/mysoft/disconf/src/disconf/disconf-web/src/main/java/com/baidu/unbiz/common/genericdao/dao  

      进入dao目录(前提是你的源码路径和我的一样),双击GenericDao.java,将其下载到桌面

Linux搭建disconf(二)

2:用editplus或者notepad++打开我们刚才从XFTP中下载的GenericDao.java文件,这样才能看到行号

Linux搭建disconf(二)

 

3:将808和841行的代码注释掉,替换成PreparedStatement ps = connection.prepareStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);

Linux搭建disconf(二)

 

 

Linux搭建disconf(二)

 

 

4:删除掉dao中原有的GenericDao.java文件,替换成我们刚刚编辑过的GenericDao.java

Linux搭建disconf(二)

 

5:cd /usr/local/mysoft/disconf 进入该目录,删除掉war文件后,新建一个war目录

[root@myLinux bin]# cd /usr/local/mysoft/disconf
[root@myLinux disconf]# ls
resource  src  war
[root@myLinux disconf]# rm -rf war
[root@myLinux disconf]# mkdir war
[root@myLinux disconf]# ls
resource  src  war

6:cd cd /usr/local/mysoft/disconf/src/disconf/disconf-web  进入disconf-web目录,执行sh deploy/deploy.sh,重新部署项目

[root@myLinux disconf]# cd /usr/local/mysoft/disconf/src/disconf/disconf-web
[root@myLinux disconf-web]# sh deploy/deploy.sh

7:重新启动你的nginx和tomcat,登录disconf后,新建一个配置文件。显示创建成功,说明我们的disconf完全搭建成功

Linux搭建disconf(二)

 

Linux搭建disconf(二)

上一篇:Ubuntu用户首次设置root用户的密码


下一篇:Linux就该这么学丨必备Linux命令(一)