zoukankan      html  css  js  c++  java
  • Linux搭建disconf(二)

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

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

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

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

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

    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,将其下载到桌面

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

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

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

    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完全搭建成功

  • 相关阅读:
    洛谷3004 [USACO10DEC]宝箱Treasure Chest
    洛谷3778 [APIO2017]商旅
    洛谷4141消失之物——每个体积的角度
    洛谷2943 [USACO09MAR]清理Cleaning Up——转变枚举内容的dp
    bzoj1858[Scoi2010]序列操作
    poj1325机器工作——二分图最小点覆盖
    洛谷P1144——最短路计数
    poj3254二进制放牛——状态压缩DP
    poj1191棋盘分割——区间DP
    洛谷P1474货币系统——背包方案计数
  • 原文地址:https://www.cnblogs.com/misterwu/p/12831751.html
Copyright © 2011-2022 走看看