解决方法:使用逆向工程脚本时,生成的映射实体类在下面的注解会多table:删除即可@TableName("table:ts_app_oracle_apply")
详细信息:java后台使用content-disposition属性返回中文文件名时,出现编码问题urlencode编码,需要前端解码
access-control-allow-credentials:trueaccess-control-allow-headers:Origin,X-Requested-With,accept,content-typeaccess-control-allow-methods:OPTIONS,GET,POST,DELETE,PUTaccess-control-allow-origin:*content-disposition:attachment;fileName=%E5%A4%A9%E5%B1%B1%E5%B9%B3%E5%8F%B0%E7%94%A8%E6%88%B7%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E8%B5%84%E6%BA%90%E7%94%B3%E8%AF%B7%E5%AE%89%E5%85%A8%E8%B4%A3%E4%BB%BB%E6%89%BF%E8%AF%BA%E4%B9%A6.docxcontent-type:application/force-downloaddate:Mon,10Feb202003:11:46GMTtransfer-encoding:chunked20200210指定配置文件启动指定配置文件启动命令失效,与启动脚本与jar包同级目录下,建立config文件夹,存放配置文件在其中,即可指定外部配置文件启动
原因:没有关闭对应输入流
经检查,发现是两张表excel中,某个字段名不一致导致
原因:在后台的逻逻辑判断时,只考虑了应用申请记录不为空的前提,当应用为空的时候控制按钮的值就无法赋值,导致了前端控制按钮的值为null解决:修改判断逻辑
原因:在nginx代理时,需要用到静态资源,静态资源的目录是从根目录也是就是“/”开始的n那么,在配置代理时,location后就不能带有前缀或者后缀,只能以“/”开始的当然也不是绝对,要考虑实际的静态资源的状态,去配置代理
原因:文件上传直接报错,其实文件是上传成功的,但是由于数据库的某个字段不能为空,导致程序异常返回错误码,直接显示文件上传失败
要注意部署数据库的环境与服务环境是否相同
测试环境接口可以正常请求,但是正式环境无法请求,原因是正式环境无法直接请求正式环境对应接口,加了
查看代码时,突然发现ftp连接后没有关闭,虽然ftp会自动关闭,但是连接过多时不关闭会对资源产生影响
没有关闭压缩包文件对应的流
没有对接口地址
忘记配置端口
linux中的文件符为/,windows中的文件符为\,要注意区分
在使用轻量数据库h2时,发现插入数据正常,但是查询数据会报错,会将插入的string字符串,强制转换为int类型检查后发现,h2数据表的字段顺序与实体类中的字段顺序必选保持一致,否则会出错
使用postwoman时,接口无法正常请求测试,但通过swagger可以正常测试使用定位后发现postwoman是使用XMLRequest发送请求,需要在后台代码中设置跨越处理
用户上传文件后无法导出下载的问题,检查后发现代码没有判断非空选项值,且ftp目录权限存在异常,已经修复
redis数据库中有对应的值,但是在代码中无法获取,调试后发现是序列化原因,代码发送取值请求时,key的序列化与redis的序列化不一致,所以获取值失败
pom依赖存在冲突
在项目中没有使用到mongoDB的任何依赖,但是运行时抛出了没有配置mongoDB的异常原因是在项目中使用了jmeter的依赖包,而jimter依赖包会使用MongoDB的依赖maven在解决依赖时,会自动解决传递依赖,所以会自动引入mongodb的依赖,导致运行异常只需要在启动类中添加排除注释即可也可以在.iml文件中,搜索MongoDB的依赖,删除即可
在mybatisplus的映射构造类中,使用了lamlok时,会自动建立无参构造但是如果在构造类中手动建立了构造函数,那么mybatis在执行自带查询时,结果返回会自动使用建好的构造函数会导致返回值无法返回的异常
解决办法就是,只转一次。转两次就会出现这个情况,你可以把之前转的json转成map
再使用java代码调用jmeter的接口去发送post请求时,发现json字符串会被转义即双引号,大括号之类的特殊符号会被转义涉及到的类为HTTPSamplerProxy类与SampleResult类HTTPSamplerProxy类设置请求参数,接口地址端口请求头等信息SampleResult类用来发送请求,并接收返回结果但是在HTTPSamplerProxy参数传递的过程中并为发现字符转义在SampleResult发送请求时,json字符串被转义,涉及方法为queryString方法
经调试发现,参数转义步骤,检查为什么会执行转义可能性猜测为.HTTPSamplerProxy添加请求参数时,使用的形式为key:value形式,当请求参数也为键值对形式时不论是post还是get,参数都会被拼接到url接口地址的后面,所以再使用SampleResult发送请求时url中的特殊符号会全部被转义所以当参数为json字符串类型,且位于body时,不用添加参数的key,直接将值添加到HTTPSamplerProxy实体中即可
1:参数位于query时,且参数为json字符串时,如何避免转义?此时必须转义,否则报错,目前只发现可以手动转义
代码无异常,配置文件无异常。接口请求就异常swagger-ui无法访问
本地启动服务无异常
经检查:发现启动项目的用户权限异常设计启动用户为adcloud实际启动用户为root使用自动化发布工具部署发布时,使用的是adcloud用户导致权限不够,无法读取依赖包,抛出类加载异常
解决办法一:
可能是安装了某些程序修改了Winsock,使用netshwinsockreset命令修复Winsock重启计算机即可!
解决办法二:
解决办法三:
1、网上邻居-;本地连接-;属性-;internet协议(TCP/IP)-;属性-;高级-;wins标签-;去掉启用LMhosts查询前的勾.2、控制面版-;windows防火墙-;高级标签-;本地连接设置-;服务的标签里勾选安全Web服务器(HTTPS)。3、然后重启Apache
springcloud更新换代比较快,可能1.5可以使用,到了2.0就不用了。所以做项目或者练习时要看清自己使用的版本。1.5版本使用spring-cloud-starter-eureka-server还是没问题的。2.0以上建议使用spring-cloud-starter-netflix-eureka-server。
添加springbootweb依赖后解决
:@Autowired只按照byType注入;@Resource默认按byName自动注入,也提供按照byType注入;
警告!Eureka可能存在维护了错误的实例列表(当它们没有启动的时候,Eureka却把它当成启动的了);Renews值小于Threshold值,因此剩下未过期的都是安全的。
这个是Eureka的自我保护机制。EurekaServer在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况(在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导致),EurekaServer会将当前的实例注册信息保护起来,同时提示这个警告。
1、在生产上可以开自注册,部署两个server2、在本机器上测试的时候,可以把比值调低,比如0.493、或者简单粗暴把自我保护模式关闭
再生成六位验证码时,此处的验证码类型为long类型,不是String类型发现会有小概率产生的验证码位数不对,由六位变为五位,且数值也与六位的数值不一样
类举排查后发现:long类型的数据,以0开头时,会出现位数变化,即下边的情况LongerrNum=012345L;此时errNum的值为10024原因是在Java语言中数值类型的数据:0开头表示八进制0x开头为十六进制
表中字段为int,自增实体类设置为了uuid导致异常且数据表中字段对应差一个分隔符
再使用方法时,.class.getClassLoader().getResource("jmeter.properties").getPath();获取到的配置文件路径为全路径,即绝对路径不是相对路径打包为jar包时,获取的路径为jar包路径,上述方法获取到的路径,无法直接获取到配置文件导致程序异常。
线程池里用传递的方法,不会导致新建对象,占用内存
用new的方式才会有很多线程里面传进去的应该是同一个实例
当三者配合使用时,及时try中进行了return,finally中的语句还是会执行
字段不能使用mysql中的保留字段,如function,delete等关键字
实体类若自定义构造后,没有生成空参构造,查询字段会出现异常,导致无法将值赋予对应字段
使用IPage方法进行分页查询时,必须要将IPage参数放到自定义方法的第一个参数位置否则会报异常,selectonebutfoundmany;
在mybatismapper接口类中,方法不能重载
/尚未解决/
使用自定义json字符串,可以成功建表使用hashMap转成的json字符串,无法建表,原因不明:1:猜测hashmap无序,导致字段顺序异常?
字段为空时,使用mybatisplus自带的.eq()方法查询时,会变成查询全部
1、springboot切面aop使用多个websocket会二次发送2:linux中特殊字符^M,是应用windows下的回车
在springboot中,使用h2本地数据库+mysql数据库配置俩个数据源时遇到了h2数据表初始化异常,无法建立h2数据表且建表语句无异常,配置文件无异常经排查发现:配置yml文件中,自定义多个数据源,h2无法识别只能在.properties文件中,优先使用spring.datasource.driver-class-name的方式配置h2然后再去yml文件中配置数据源,这样h2数据源就会先初始化,不会导致建表语句无法执行
使用mybatis中自带分页,并配置了分页拦截
现象:在开发过程中,突然方法中的String类型参数会被提示没有String的bean,无法注入后续发现是方法上误加了@Autowired注解导致
greenplumsql语句与mysql在使用limit语句有些许不通mysql:selectfromtablelimitbegin,sizegreenplum:selectfromtablelimitsizeoffsetbegin
在调用别人开发post接口时发现,传递的参数放到body中,始终无法成功调用会提示必选参数没有传递,经沟通发现该接口虽为post类型,但参数接收并没有采用body接收参数,且在接口定义中使用@RequestParam接收参数,即只能将参数拼接到api接口地址后才可成功调用api。
org.apache.ibatis.builder.BuilderException:CouldnotfindvaluemethodonSQLannotation.Cause:org.apache.ibatis.builder.BuilderException:Parsingerrorwasfoundinmapping#{}.Checksyntax#{property|(expression),var1=value1,var2=value2,...}
其实就是#{}里面没有写参数。。。
使用springboot集成swagger-ui进行接口测试时,发现新定义的接口无法在swagger-ui中进行测试网页控制台js输出找不到Content-Type,其他接口均使用正常经过调试后发现,接口有一参数名为nodeType,该参数名在swagger-ui中被认为是保留字段,会被解析导致接口无法正常调用,本次场景出现使用的swagger-ui的版本为2.6.1,在2.9.1中未遇到该问题
搭建好新的ftp服务器,使用java进行ftp文件操作时,发现文件可以正常上传,但是无法正常下载每次下载
在springboot框架中使用JDBCTemplate连接数据库时,两个DAO层存在了循环依赖,导致项目无法启动
由于对lua脚本语言不是很熟悉,在nginx中使用lua脚本语言时,先使用了ngx.say的方法然后进行业务逻辑处理,导致后续业务逻辑无法执行,并且抛出异常,注释ngx.say后,该问题消失,原因可能是lua脚本的执行顺序可能有比较严格的规定。
在使用omindb连接数据库时,发现无法连接mysql8.0以上的数据库后续调整了mysql8.0的服务认证方式之后,可以连接是因为新5.7与8.0的密码加密方式不通
配置后无法正常发送,抛异常如下JavaMailException:javax.net.ssl.SSLException:UnrecognizedSSLmessage,plaintextconnection经搜索排查后,修改配置文件如下:Propertiesprops=newProperties();props.setProperty("mail.smtp.auth","true");props.setProperty("mail.debug","true");//启用调试props.setProperty("mail.smtp.starttls.enable","true");//添加这个props.setProperty("mail.smtp.ssl.enable","true");props.setProperty("mail.imap.socketFactory.fallback","false");//不需要这个//props.setProperty("mail.imap.socketFactory.class","javax.net.ssl.SSLSocketFactory");
原因尚不明确,需继续排查,可能是如下原因配置JavaMail的Properties时,不要指定“mail.smtp.socketFactory.class”,因为TLS使用的是普通的Socket。然后指定属性“mail.smtp.starttls.enable”为“true”。
再使用nginx二级目录方式代理多个不同项目时,出现了静态资源404的问题经排查后发现是不通项目中文件资源路径的问题只能使用单端口代理单服务,不会出现该问题
在使用jpa自定义sql查询,映射实体类时,当使用的语句是*时,要注意数据库中的表字段与实体类中的字段顺序是否一致不一致会出现类型映射异常
场景:更换maven配置文件后,使用maven打包项目,抛出异常,无法识别字段但是项目中所有依赖均无报错,清除缓存后也可本地正常启动,只是打包无法打包会提示一系列异常排查:在处理该问题时,百度了很多方法,均未生效,将原有maven本地仓库删除,重新导入依赖,也没有任何作用,还原配置文件,也没有作用,发现idea中配置好后maven,使用右侧工具栏的maven插件,可以编译打包,但是命令行打包依旧失败在配置IDEA中maven路径时,发现有IDEA自带maven配置,问题可能出现在这里尝试解决:打开IDEA默认maven配置路径,发现在C盘用户名下的.m2文件夹内,依旧有一个maven配置文件,该配置文件中的配置为默认配置,可添加公网依赖,但是无法添加内网依赖,修改该配置文件后,打包正常可能原因:命令行使用maven打包命令时,读取配置文件的顺序可能是这样的:maven安装目录配置-》系统自带maven配置即C盘下的配置文件,优先度可能高于安装目录的配置文件这样就导致在IDEA中配置好后maven,使用右侧maven工具插件可以打包,因为IDEA会去读项目配置好的,而不去读系统默认的但在命令行中,会使用系统变量中的maven,读取配置文件的顺序也如上所述,所以导致无法打包
场景:在srpingboot中使用swagger2.9.2时,接口参数定义类型为Double在启动时会报异常databinderror解决:排查后发现是swagger2.9.2中自带的swagger-models存在bug,需要单独导入导入方式如下,即可避免数值类型的参数绑定异常
在IDEA中配置好maven后,依赖添加正常,项目运行正常,使用IDEA自带打包插件也可以打包但是在命令行中打包异常,无法打包,会提示很多error信息经排查后发现,maven在命令行执行打包时,默认读取的配置文件是settings.xml,而不是IDEA选择的配置文件修改settings.xml配置文件后,打包正常。
springboot打包的jar包启动时,可以指定配置文件启动,但是直接使用java-jar的方式使用外部配置文件时指定的配置文件仅有application.properties和xx.yml
在使用python调用ansible接口时,抛出了psutil依赖找不到的异常排查发现,我安装的ansible版本为2.9.16,默认支持的python2环境里安装的python是python3,pip3安装时将依赖安装到了python3使用pip安装后正常
SimpleDateFormatinSdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");Collections.sort(list,(o1,o2)->{try{if(inSdf.parse(o2.getAllocateTime()).getTime()>=inSdf.parse(o1.getAllocateTime()).getTime()){return1;}}catch(ParseExceptione){e.printStackTrace();return-1;}return-1;});20210618上述bug又出现了,排序异常,还是相同的问题,没有考虑到相等的情况,每次修改数据库的行为并不可取,开始排查,原因就是没有考虑到俩个元素相同的问题,导致出现了异常,后来采用.compareTo()方法后,异常解决看源码后发现,源码是多了一个等于情况的判断,所以就没有了异常
在使用java代码去查询es时,若es的索引无数据,会报404异常
场景:在使用java代码去查询es时,对日期类型的字段进行排序,发发生了排序异常,无法排序异常排查:1、测试环境所使用es版本为7.2,修改该字段类型为keyword,可以排序2、生产环境使用es版本为7.4,修改字段类型为keyword,无法排序,修改为类型为date,还是无法排序解决方案:1、在java查询代码中给字段加了.keyword,后缀后,可以进行排序查询,但还不是真正的无法排序的原因
builder.sort("pushTime.keyword",SortOrder.DESC);2:查es中的mapping配置后发现,定义的数据类型与模板不一致,经排查后发现,建立索引时使用了索引模板
3、索引模板中的index_patterns字段必须要和索引名称一致,这样建立的索引,才会使用该索引模板即数据类型会使用模板里的数据类型
一直在使用的mybatis多数据源配置,迁移到新项目中,突然无法生效了,只会去查询第二个数据源的数据库,导致很多业务逻辑无法跑了,配置多数据源的方法比较简单,直接两个配置类进行配置,一个类配置一个数据源,指定一个数据源为主数据源
在使用AOP去对某些方法的返回值做处理时,发现一个问题,使用this的方式去调用方法时,该方法的返回值不会被aop处理,使用注解,代理生成自身对象后,再调用该方法,返回值被AOP处理;至此,问题结束,但是没有考虑为什么this调用的方式不会被AOP处理。
若dockerfile中没有CMD去执行运行命令打出的镜像包是直接运行不起来的需用dockerrun镜像启动命令这种方式进行容器启动若带CMD,且CMD中的命令是一直与终端有交互的打出的镜像包可以直接启动运行
dockerrun-d-p9400:8100镜像名bash-c'whiletrue;doechoweek;sleep60;done'
最近业务有涉及到python项目的启停问题,总结如下
****此命令需要在django项目所在文件夹执行
nohuppython3manage.pyrunserver0.0.0.0:8100flask项目启动方式,此处使用了gunicorn****此命令需要在flask项目所在文件夹执行
gunicornapp:app-cgunicorn.conf.pygunicorn.conf.py配置文件配置启动进程数,端口
workers=5#定义同时开启的处理请求的进程数量worker_class="gevent"#采用gevent库,支持异步处理请求bind="0.0.0.0:8888"#端口绑定项目停止脚本此命令基本适用于单服务停止
悲观锁查询出要更新的数据,然后加forupdate,这样不提交,其他也无法修改select....forupdate
情况如下:源主机Aip地址为:10.0.0.1:30001
代理B主机地址为:120.0.0.1:30002现在在B主机上使用nginx代理A主机的30001端口直接访问B主机的30002端口,可访问到被代理的主机A的30001端口但刷新浏览器之后,代理端口丢失了,就会跳向B主机的30001端口导致访问异常,代理配置均无问题,其他几十台代理端口均正常唯有代理出来的A不正常,怀疑是代理端口丢失只能保证源端口和代理端口一致具体原因未明。
今天遇到一个问题,需要看日志文件才能定位到具体原因但是一看日志,有七八个G。。。。使用常用的tail-n或-f无法定位到但是整个文件又太大,操作起来很不方便,无法快速定位到异常可以使用下面的组合命令,导出自己想要的大概日志范围查看日志文件有多少行:wc-l文件名将目标文件指定行数导入到新文件(p为参数,必选):sed-n"开始行,结束行p"目标文件>输出文件
傻叉错误,好久没遇到了,自己把自己坑死了mapper中有如下俩方法findAllByDate(Pagepage,Integerstatus)findAllByDate(Pagepage,Integerstatus,Stringcontent)调用的时候,没有问题,点击的时候也是会跳到相应的方法但是,有且只有一个查询方法生效,另一个改的天花乱坠都不会生效目前发现最终执行的方法为第二个,即顺序执行最后一个
现象:swagger-ui.html无法访问抛静态资源异常v2/api可以返回json,但是json格式不正确,经过了转义处理:springboot2.0后fastJson不生效,需增加以下代码但是之前并未遇到该现象,为什么产生该现象,暂时不明
1、pom中不同,可运行jar包会有build标签,依赖jar包则没有
打包好的jarbao,linux服务器上运行正常,日志没有中文乱码打包为镜像,部署至k8s时,日志输出异常,中文显示为问号解决办法:打包镜像时添加如下语句即可解决ENVLANGC.UTF-8
启动的时候,调度器得名字必须的和之前一样如果名字不一样,那么之前建好的调度任务将无法执行
换了个电脑,重新装了IDEA,运行mvn命令的时候发现,以前的命令都不能用了
找了很多方法,发现了这种方式以前的命令mvnpackage-Dmaven.test.skip=true新的命令mvnpackage'-Dmaven.test.skip=true'虽然一时解决了,但后续其他的maven命令又不行了
今天突然发现:IDEA命令行的最前面有PS前缀,原来是IDEA用了PowerShell作为命令行执行,整了个大无语
可用以下方式改为cmd
setting->Tools->Treminal->shellpath选择cmd就行了
老版本的fastjson出现反序列化bug,涉及项目需要升级版本
但是,升级完之后,调别人接口返回的json数据,不能解析了,会抛出json格式异常
回退老版本就又可以了
感觉像是将返回的json字符串自动转义了一次,toString了一下,再转就ok了
在使用ffmpeg对视频进行多个水印添加和移除操作时,出现了以下情况
##命令如下
添加水印
ffmpeg-iinput.mp4-iimg.png-iimg2.png-filter_complex"overlay=20:80,overlay=200:80,overlay=150:150"out.mp4
移除水印
ffmpeg-iinput.mp4-vf"delogo=x=1:y=2:w=3:h=4:show=0,delogo=x=1:y=2:w=3:h=4:show=0"out.mp4
Windows下命令行可以执行,没有异常linux下命令行执行,也没有异常
但是使用以下Java代码执行命令时,ffmpeg出现了filter发现不了的异常Runtimert=Runtime.getRuntime();Processproc=rt.exec(cmd);
1、怀疑是代码中符合编码问题,代码中输出执行的命令,复制到命令行中,也可以正常执行2、把双引号换成单引号,也不行,命令行中直接无法执行3、直接去掉双引号和单引号,命令可以执行了。。。
其他ffmpeg命令均未出现类似的问题,Windows和linux编码均正常,jar包服务编码也正常
且改情况只有服务执行时才会出现,目前服务无法远程调试,待后续排查具体原因
维护已有业务时,接口返回参数与定义参数名称不一样
定义为isSuccess,最后结果输出时返回success
使用fastjson后,定义变量不能以is开头,否则会序列化异常
会主动去掉is
可为对应is开头的参数添加get、set方法,可以解决上面出现的问题
后续规范,尽量避免使用is开头定义变量
netstat-ano|findstr"port"
ffmpeg-i2.mp4-s1280x1024-vffps=fps=1/1%09d.jpg
首先启动项目的时候,命令如下
java-Xdebug-Xrunjdwp:server=y,transport=dt_socket,address=9005,suspend=n-jar/usr/local/big-screen.jar
核心在这里,使用端口为9005-Xdebug-Xrunjdwp:server=y,transport=dt_socket,address=9005
这样配置好之后IDEA中添加remote配置,然后运行,调用部署在服务器上的接口就可以远程调试了
使用阉割版的jdk容器环境,会抛出类找不到的异常原因是有些jdk环境会缺少jre,导致序列化的时候抛出类找不到的异常
1、为别人提供公共模块的依赖的jar包中,pom中没有packaging这个属性2、父工程中使用dependencyManagement,子工程中若不引入dependencyManagement的依赖则不会对项目包大小产生影响
可以监控java项目的内存使用情况,GC情况每一个方法的消耗时长等情况
@async默认线程数为8,且线程拒绝策略为等待
场景服务A服务B为同一个服务,使用同一个数据库
服务A先运行,更新a表,服务B再运行更新a表
此时服务B会抛出异常,表a被锁,服务B的业务无法正常进行,服务A正常
其他使用了事务的方法全部回滚,相应方法不能继续执行
根本原因是mysql在Update带有子查询的时候,子查询的表会锁住,导致该表无法使用
若某一个类上使用了@Transactional事务注解,那么该类下的所有方法默认全部使用事务spring的事务传播级别默认为require,即若使用了事务注解,那么子方法均会使用事务若该类的某个方法不想使用事务,修改事务传播级别为Propagation.NOT_SUPPORTED(不支持事务)即可是有七种传播级别
场景,先new俩个ArrayList(),a,b然后循环a,把a中的实例类添加到b中,再使用fastjson把b转为json异常就会出现
因为fastjson默认开启引用检测将相同的对象写成引用的形式,引用是通过"$ref"来表示的
上面的场景就是重复引用了,循环引用也会产生这种情况
1.单个关闭JSON.toJSONString(object,SerializerFeature.DisableCircularReferenceDetect);
2.全局配置关闭JSON.DEFAULT_GENERATE_FEATURE|=SerializerFeature.DisableCircularReferenceDetect.getMask();
1.如果你前端用不到这个属性在该属性的get方法上加上注解@JSONField(serialize=false),
2.这样该属性就不会被序列化出来,这个也可以解决重复引用
3.修改表结构,出现循环引用了就是一个很失败的结构了,不然准备迎接StackOverflowError异常
在一次常规的docker服务部署时,之前突然可以调用的接口无法调用了本地调用也没有任何异常,服务器上却提示网络不可搭,找不到该路由
1、先与运维沟通,是否有动过网络,沟通后沟通后后发现该服务器网络与目标口服务器网络没有做任何改动即不可能是服务器之间的网络问题
2、然后开始排查docker容器的网络分配,突然发现有一个容器的ip是192.168.0.1然而服务需要调用的接口地址为192.168.0.32而在调用接口的时候,先去查了docker的服务路由,然后走服务器的路由这就导致容器里的服务先找到了docker的路由,没有去走服务器的路由然后就无法调用接口了。。。
dockerinspect--format='{{.Name}}-{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'$(dockerps-aq)查看某一个容器的具体分配信息dockerinspect容器id关闭对应docker容器相应docker的yml文件中加入如下内容,重启即可解决
version:'2'services:java-server:image:java-serverports:-'10000:10000'restart:alwaysvolumes:-./config:/usr/local/configcontainer_name:java-serverprivileged:truenetworks:-java-servernetworks:java-server:driver:bridge20220801spring事务传播导致业务逻辑无法执行方法A中使用了事务,去做数据库删除操作方法B需要查询方法A删除的数据,然后做后续操作方法A执行完删除后调用方法B,事务未提交,方法B也在事务中查询不到删除的数据,导致了方法B的业务逻辑出现问题此处需要修改事务传播级别,方法B中不使用事务
1、propagation-requierd:如果当前没有事务,就新建一个事务,如果已存在一个事务中,则加入到这个事务中,这个是默认选项。2、propagation-supports:如果当前有事务,则支持当前事务,如果当前没有事务,就以非事务方法执行。3、propagation-mandatory:如果当前有事务,则使用当前的事务,如果没有当前事务,就抛出异常。4、propagation-required_new:无论当前有没有事务,都要新建事务,如果当前存在事务,把当前事务挂起。5、propagation-not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。6、propagation-never:以非事务方式执行操作,如果当前事务存在则抛出异常。7、propagation-nested:如果当前存在事务,则作为子事务在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作
如下代码-0.5f向上取整是-0.0,不是0向下取整,为-1.0
publicstaticvoidmain(String[]args){floatd=-0.5f;System.out.println(Math.ceil(d));System.out.println(Math.floor(d));}20220802使用Java代码在windows10中调用exe可执行文件异常场景如下cmd命令行执行exe文件时,exe文件可正常执行将相同语句使用Java代码执行时,会抛出exe需要文件无法找到的异常
是因为使用java执行cmd命令时,执行命令的目录会默认为当前java程序执行目录而不是exe文件所在目录可以理解为在当前程序目录下面,执行了exe,导致exe找不到需要的文件这就需要执行cmd命令的时候,指定cmd命令在哪里执行
/***@paramexePathexe文件路径 *@paramsampleFilePathexe文件所在目录*/privatevoidexcuteExe(StringexePath,StringsampleFilePath){try{//调用exeRuntimeruntime=Runtime.getRuntime();Processprocess=runtime.exec("cmd/c"+exePath+"",null,newFile(sampleFilePath));BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(process.getInputStream(),"UTF-8"));//读取执行结果 Stringline;while((line=bufferedReader.readLine())!=null){log.info("----开始执行exe;line={}",line);}}catch(Exceptione){}}20220803字符串操作技巧String,StringBuffer,StringBuilder进行大量字符串修改时StringBuffer,StringBuilder要优于String50w的字符串拼接操作,String需要1分30sStringBuffer,StringBuilder只需要几十毫秒
原因就是每次对String字符串就行修改时,都是新建一个字符串,50w拼接相当于new了50w次(不是很准确,大概就是这个意思,因为不一定new50w次,字符串也有缓存)
bucketName为test文件目录为tmp/20220804/test.zip下载文件时,抛出异常NoSuchBucket,tmp但在请求oss时,设置的bucketName为test,也就是说在发生请求时阿里云oss提供的sdk把tmp当做了bucketName目前使用的是sdk版本是2.2.3更新版本为3.15.0后问题修复
项目提供了统一的logback日志配置模块,其他项目输出日志时都需要依赖该模块但目前有这样一个现象,有多个子项目归属同一个父项目,父项目依赖了改日志配置模块但是子项目在运行时,有些子项目输出的日志符合依赖的日志模块,有些子项目输出的日志模块不符合
3:尝试网上提供的解决方法,均无法解决,重新整理思路,观察日志问题此时发现一个现象,在IDEA中,项目启动的前半程时,日志中的INFO,ERROR在控制台是没有颜色的在后半程时,输出的日志突然开始有了颜色,并开始有颜色的上一行日志中,抛出了如下异常Nocontextgivenforc.q.l.core.rolling.SizeAndTimeBasedRollingPolicy但是在独立的日志模块中,该配置是配置了的,就不应该抛出该异常抛出了,即说明没有去走项目中的配置,走了其他地方的配置且其他地方的配置级别,要远远高于自定义的配置给人的感觉像是项目启动后,才去加载的日志配置
1、问题描述在开发Feign接口时,结果返回的最后一步时,rpc接口的提供方突然抛出一个异常无法将定义好的包装类转化,即序列化异常,其他feing接口均正常
2、问题排查1:先排除rpc接口的实现业务逻辑,检查是包装类型依赖是否引入错误检查后没有2:再排除业务逻辑,检查是否有数据返回,检查后数据均正常3:检查包装类型中的变量,此时看到了LocalDateTime类型但此时没有发现是该原因
3、尝试解决1:此时自定义的包装类型不行,那么之间返回Object是否可以?之间返回了Object,异常消失了,可以正常调用但是接收起来需要在调用方进行json对象解析,还是比较麻烦2:那为什么自定义包装类型可以,自定义的类型不行返回结果的时候一步步的debug,发现当自定义变量类型LocalDateTime时会抛出该异常,也就是当前无法序列化LocalDateTime,导致了异常发生有俩种方法,都需要引入下面的依赖
2、问题排查与解决:代码无异常抛出,只是获取不到对应请求头的值,那么在服务B中进行日志打印,打印请求头发现没有该值,服务A中是有该值的,那么请求头默认是不会传递的吗?后经查询后发现,默认配置下,请求头的确不会传递,若在Feign调用过程中进行请求头的传递有俩种方法:1:增加feign配置,可以传递请求头;2:在最外层捕捉到需要用的请求头,将其添加为feign接口参数推荐使用第二种,避免请求头传递带来的安全风险
1、问题场景:在开发excel模板下载功能时,需要将指定模板返回给前端,不能动态生成,便将其放入resource目录下,在本地测试时没有问题,但部署在容器中后,便无法正常获取文件,提示获取文件异常
2、问题排查:第一次遇到该问题,在本地环境中、Linux服务器中部署服务均未遇到该问题,但是在容器化部署时,遇到了该问题经查询后发现是资源文件获取的方式有问题刚开始使用的获取方式如下ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX+filename).toString();修改为如下方式即可正常获取InputStreaminputStream=this.getClass().getClassLoader().getResourceAsStream("template/filename");
3、问题原因:没打包之前,文件是真实存在与文件系统中的,一旦打成jar包后,使用File是访问不到资源的内容的,推荐使用getInputStream()的方法
1、问题场景业务正常的feign接口调用,突然抛出400异常,且对应服务上下游业务都没有抛出异常且只对某条数据出现400,其他数据均正常
2、问题排查1、怀疑参数没有判空导致,于是加了判空逻辑和日志,打印请求参数发现请求参数并不为空,只是很多,那么就是定义的内部接口有问题2、看到定义的feign接口请求类型为GET,复制出请求参数后,发现请求参数过长接口请求改为post,参数接收使用请求体接收后,该问题消失
用户分为两部分,A,B俩用户分表存,一个唯一主键为Long类型一个唯一主键为字符串类型,且长度很长,在业务逻辑中,俩种主键对应的业务含义一样,均为用户唯一标志在一张业务主表中,用户标志字段会存在A、B俩种id值这就导致查询去A模块查询A用户信息时,出现Long解析异常,因为B的长度太长了
此处应根据业务主表的类型,去分类用户id查询,避免出现该异常
通过网关调用某模块接口时,接口偶现500异常,connectiontimeout,2、问题排查1、网关与服务模块为容器化部署,怀疑可能容器内网络有问题,排查后网络正常;2、查看调用服务模块日志,服务正常,且没有异常日志输出;3、查看网关模块,网关输出日志如下:显示服务网络不可达;排查网关后发现网关nacos配置可能有问题,修改部署后,问题依然存在;4、nacos排查,查看相应模块服务有没有注册到nacos,注册状态也正常;于是在发生异常时,查看nacos服务状态,nacos服务健康状态为false,即服务不健康但是查看相应服务模块,服务模块运行正常,且在几分钟后,nacos健康状态自动恢复;将nacos中对应服务下线后,发现又有服务注册上来,但是这个服务只启动了一个,删除该服务,重新注册后,问题修复。
原因就是nacos中注册的服务与实际服务不符,具体原因不明,猜测可能为nacos缓存问题,下线的服务没有全部删除,导致新注册的服务ip被覆盖,忽隐忽现可能为nacos服务发现机制与缓存相互覆盖导致。
业务代码中,通过restTemplate.getForEntity(url,Map.class)调用接口时,出现了以下情况;返回的json对象的list中,全部只有一条数据,但是服务提供方响应数据的时候确认了每个list中都有多条数据。
1、刚开始怀疑服务提供方数据返回异常,于是查看服务提供方的接口响应日志,发现并没有问题;每个list中数据量均正常;2、在服务调用方打印响应结果,发现打印出的结果中,list数据已经减少,那么问题即出现在服务调用方;定位到问题出现位置,开始排查为什么缺少,debug时发现解析响应数据时,出现了数据丢失的问题;