记一次使用dubbo过程中版本冲突导致的坑
前言:2019年09月23日临下班,产品的一个变更需求临近尾声阶段。本地测试OK,兴致冲冲的想着发布到测试环境,验证一下没有问题,五分钟结束战斗,明天就开始下个需求了。随在CE(公司的devOps系统)上切换到hotfix/xxx分支,部署上线。部署没有问题,跑了一通单测,呃呃呃呃呃。莫名的一堆错误。怎么可能,再deploy ,再重启,还是这个错误,难道是公司的CE有问题(以前会莫名其妙的出问题),释放掉重新申请服务器部署。忙了一通还是不行。绝望,后悔。公司的什么烂逼环境。本地明明没有问题,怎么部署一下就这样了(程序员通病,嘻嘻)。得,沙箱环境坏了,解决不了别想走了,明天ISV还要用。
查问题:入口肯定先根据日志确定问题呗,单测错误日志如下:
2019-09-24 19:19:57.899 ERROR --- [io-12345-exec-1] c.y.p.g.facade.ParkingBizOpenApiImpl : (ParkingBizOpenApiImpl.java:90) : 参数校验或转换出错javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.String'. Check configuration for 'auth_code',输入参数为:PrePayPTO(pay_type=ALIPAY, mch_id=2099190827010164, sub_mchid=20190827151134481925, auth_code=11111, total_amount=1, out_trade_no=ISV1569323953935, subject=测试订单, goods_detail=[{"goods_id":"goods_id123","goods_name":"停车缴费","quantity":1,"price":1}], goods_tag=, attach=, extend_params={"industry_reflux_info":{"parking_id":"PI1509464128728884840","car_number":"京XX1234","einlass":"2019-08-15 17:30:26","parking_hours":"1.5","parking_name":"测试停车场"}}, service_name=PKTEST01)
看日志大概意思就是说@NotBlank注解不能用在属性auth_code上,第一:我的代码这块没有改过,以前明明可以运行,第二:我的auth_code就是String类型的,并且@NotBlank就是使用在String类型上 ,然后网上找了一堆的blog,随发现有一个博客说springboot2.0 ,hibernate-validator版本冲突 也可能报这个错,删除本地所有引入的第三方包,然后重新import , 查看本地项目依赖,果然:

hibernate-validator 两个版本号,6.0.16.Final 是我自己的, 5.2.4.Final 是哪里来的,随查阅自己的show depencies , 查找hibernate-validator 的引入如图:

根据两个版本点进去,最后发现5.2.4.Final 是引入别人的dubbo依赖带进来了,以前他们没有,后加的(所以先前没有暴露过问题,上图中的密密麻麻的依赖图也是引入他们的一个依赖后变成这样不忍直视的样子),然后从他们的依赖中排除掉hibernate-validator ,问题解决。
后记:
1:通过躺过的这个坑,我认为这虽然是编码者导致的问题,也算是使用dubbo的一个弊端吧。
2:现在编码的时候基本上都是一个project ,多个moduel的架构,所以很多时候暴露的dubbo接口的服务只是project的一个moudel ,而父pom中一般都会引入一下常用的依赖。这样无形中被服务消费者强制依赖。所以建议dubbo 对外api,尽量不要继承父pom,且以最少依赖发布接口。
3:以一个正常的心态,平心静气的分析问题,别什么问题都推脱给环境。
花絮:上面说的解决过程虽然很简单,但是由于实际中操作中各种原因,折腾了三四个小时。
首先:始终坚信是环境问题,我写的代码肯定没有问题;我压根就没有改过这里的代码,而且已经稳定运行了很久。
其次:线上环境服务器不给开权限,下载不了jar包,本地刚开始没有删除本地所有第三方依赖,因为上面那个依赖图太大,电脑死机,确认不了是哪个第三方依赖引入的依赖,且本地打包没有问题,本地复现不了,线上的jar包看不到。
最后:因为别人的依赖坑了我,然后赶快看看我对外提供的dubbo接口pom:

还好,老子果然明智,没有继承父pom,独立出去的。然后看看依赖:

啊,咋回事。。。。哎,没办法,产品要个性化提示校验信息,要不就是好几十行的if/else ,算了,就这样吧,互坑互坑吧。。回家,睡觉。。。。。。。程序员不就是这样,被别人坑人再坑别人嘛。。。。
记一次使用dubbo过程中版本冲突导致的坑的更多相关文章
- centos7安装Python3的过程中会和Python2.7版本冲突导致yum版本比对应,致使yum不能使用的问题。
centos7安装Python3的过程中会和Python2.7版本冲突导致yum版本比对应,致使yum不能使用的问题. 原因:yum调用Python,启动程/usr/bin/yum就是一个python ...
- CASE:DB shutdown/open 过程中发生异常导致JOB不能自动执行
CASE:DB shutdown/open 过程中发生异常导致JOB不能自动执行 现象: 一个DB中的所有JOB在3月25日之后就不再自动运行,查询DBA_JOBS,发现LAST_DATE定格在3月2 ...
- VS·调试过程中某个操作导致调试突然退出之解决方案
阅文时长 | 0.11分钟 字数统计 | 232字符 主要内容 | 1.引言&背景 2.声明与参考资料 『VS·调试过程中某个操作导致调试突然退出之解决方案』 编写人 | SCscHero 编 ...
- jenkins配置过程中踩过的一些坑
1,编译通过之后,想要将编译好的war包放到远程服务器上,并解压 unzipBus.sh的脚本如下: #!/bin/bash jar -xvf bus.war 编译后报错:jar:Command no ...
- git rebase 过程中遇到冲突该怎么解决?
在执行git rebase 过程中经常遇到问题,此时有点慌,一般如何解决呢? 1.先将本地的冲突手动解决 2.执行下面命令 git add . git rebase --contine //继续re ...
- 记一次wordpress安装过程中遇到的问题及解决办法
Q:无法建立目录wp-content/uploads/2017/03.有没有上级目录的写权限?A:执行chmod 777 wp-content/ 提升目录权限 Q:安装主题或安装插件的时候,用到FTP ...
- 记一次DG搭建过程中备库ORA-00210,ORA-00202,ORA-27086错误
ORA-00210: cannot open the specified control file ORA-00202: control file: '/u01/app/oracle/oradata/ ...
- 记一次DG搭建过程中ORA-09925: Unable to createaudit trail file 错误
今天做Oracle DG 编写initorcl的时候,修改完以后,sqlplus就不能再登陆,一直报 ERROR: ORA-09925: Unable to createaudit trail fi ...
- RxJava 1升级到RxJava 2过程中踩过的一些“坑”
RxJava2介绍 RxJava2 发布已经有一段时间了,是对 RxJava 的一次重大的升级,由于我的一个库cv4j使用了 RxJava2 来尝鲜,但是 RxJava2 跟 RxJava1 是不能同 ...
随机推荐
- Python中的super()用法
Python中对象方法的定义很怪异,第一个参数一般都命名为self(相当于其它语言的this,比如:C#),用于传递对象本身,而在调用的时候则不 必显式传递,系统会自动传递. 今天我们介绍的主角是su ...
- nodejs之express中间件body-parser使用
1.安装express和body-parser npm install express npm install body-parser 2‘.案例如下 var express = require('e ...
- 关于 if __name__ == '__main__':的使用
当是用 if __name__ == '__main__': 时,下面调用函数只是在当前脚本调试, 而我们需要在别处导入这个脚本中的类或者函数时,这个if __name__ == '__main__ ...
- 第 10 章 python进程与多进程
一.背景知识 顾明思义,进程即正在执行的一个过程,进程是对正在云的程序的一个抽象. 进程的概念起源与操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一,操作系统的其他所 ...
- Golang基础(5):Go语言反射规则
Go语言反射规则 - The Laws of Reflection 转:http://my.oschina.net/qbit/blog/213720 原文地址:http://blog.golang.o ...
- P1596 【[USACO10OCT]湖计数Lake Counting】
可爱的题面君~~ 个人感觉这题还是很简单的,就是一个完全不加工的找联通块个数 个人解题思路是先读入,然后循环一遍,遇到水就dfs,并把这个w所在的联通块“删除”,并在答案上加一 最后输出答案 具体注释 ...
- python 正则sub的使用
self.content = re.sub(r'>|<',lambda x: '>' if x.group()[0] == '>' else '<' , s ...
- C语言作业09
问题 答案 这个作业属于那个课程 C语言程序设计 这个作业要求在哪里 https://i.cnblogs.com/EditPosts.aspx?opt=1 我在这个课程的目标是 在学好C语言编程的基础 ...
- 3、APK file does not exist on disk
参考:https://blog.csdn.net/ouyang_peng/article/details/51243441 亲测可以解决
- Android事件监听(一)——简介篇
Button.ImageButton事件 setOnClickListener 点击时触发 ListView事件 setOnItemSelectedListener 鼠标滚动时触发 set ...