文章目录
  1. 1. 1、SSL httpClient死锁问题
  2. 2. 2、spring自动注入@Autowired某个类报xxx two candidate
  3. 3. 3、httpclient执行post请求第一次响应过慢
  4. 4. 4、SpringBoot项目因临时目录被清理导致程序异常
  5. 5. 5、找回centos虚拟机文件
  6. 6. 6、MYSQL使用distinct报错
  7. 7. 7、MYSQL大小写敏感导致数据库出错
  8. 8. 8、数字过大被自动转换导致的签名异常
  9. 9. 9、长事务带来的锁表问题
  10. 10. 10、安装gitlab一直502错误
  11. 11. 11、Eureka注册consumer启动时报: Error creating bean with name ‘eurekaInstanceConfigBean’
  12. 12. 12、Springboot拦截器配置始终无效
  13. 13. 13、axios自定义请求头无效
  14. 14. 14、“孤”连接问题
  15. 15. 15、Mybatis查询中文无法查询出结果
  16. 16. 16、POSTMAN测试接口报404错误问题
  17. 17. 17、阿里云centos死活无法使用nohup npm start &方式后台运行nodejs程序问题

本文记录了工作中遇到的各种大大小小奇怪问题及解决思路与方法,供各位参考。

记录力求简洁有效,只提供问题描述和核心解决方案,各个方案不会展开描述,对于需要扩展的会提供相关链接。通过提供的线索如果无法解决问题的话也欢迎各位留言或发送邮件交流。

1、SSL httpClient死锁问题

httpclient类所引用的外部jar包的版本存在bug,在偶发情况下(网络波动较大等情况)会触发程序死锁,经过升级对应jar包版本后问题解决;

2、spring自动注入@Autowired某个类报xxx two candidate

spring自动注入是依靠配置文件中bean的id来进行注入的,如果只配置了一个这类的bean则不会有歧义。但是如果配置了多个bean且没有任意一个的id和注入的bean实例名称不一样则会导致上述错误,解决方法是使用特定的id作为注入的bean的实例名称。@autowired提供这样的规则,首先它会根据类型来找到对应的Bean,如果对应类型的Bean不是唯一的,那么它会根据其属性名称和Bean的名称进行匹配,如果匹配得到则使用该Bean,否则抛出异常。

3、httpclient执行post请求第一次响应过慢

原因在于使用的apache httpclient本身性能问题,第一次请求会进行三次握手,会比较耗时,推荐使用第三方jar包来进行替换(性能能够提升一倍!~)

https://github.com/kevinsawicki/http-request/

4、SpringBoot项目因临时目录被清理导致程序异常

使用Spring Boot的同学,部署应用到生产环境时,务必在application.yml中使用绝对路径指定容器临时目录(server.tomcat.basedir节点)

不指定的话Spring Boot会在/tmp(Linux) 或者 %TMP% (Windows)新建随机目录作为容器临时目录,部分服务器会不定时清理系统临时目录,造成应用工作不正常

5、找回centos虚拟机文件

触发这个问题的原因是:某位大佬(才不是我呢),手抖把rm -rf ./*少敲了一个点,变成了rm -rf /*,还好觉得不对劲及时ctrl c,传说中的删库跑路……

如何找回已经无法正常启动的虚拟机中的文件呢?

A、试试diskgenius:https://blog.csdn.net/king_cpp_py/article/details/22829795

B、试试挂载硬盘:https://blog.csdn.net/npy_lp/article/details/7686583

C、最终大招,尝试利用ubuntu的Try ubuntu启动一个临时系统查看已经损毁无法启动的硬盘,寻找需要的文件,再利用ubuntu的文件共享功能拿出来

6、MYSQL使用distinct报错

Mysql 5.7, General error: 3065 Expression #1 of ORDER BY clause is not in SELECT list

https://github.com/laravel-doctrine/orm/issues/264

7、MYSQL大小写敏感导致数据库出错

除了数据库表,也要注意本身数据库的大小写问题,看看是否被默认转为了小写

解决方法,先把大小写敏感置为true,然后复制数据库到同名的小写数据库,然后再打开大小写敏感开关

https://www.cnblogs.com/kevingrace/p/6150748.html

8、数字过大被自动转换导致的签名异常

输入金额过大,比如一个亿,导致参数被自动转换为1.0E+10这样的形式,而签名的时候是100000000,或导致签名与验签的参数不同,使得验签失败,这是前端的锅,让前端来背

9、长事务带来的锁表问题

在原高速移动支付系统中,整个交易是个长事务,因为事务过长带来了两个问题:

1)其中生成订单号有部分是需要从数据库函数获取的(函数功能是读取数据库中的序列数,然后增加一定值后返回并更新序列数),结果因为网络波动原因,导致事务无法提交,使得行级锁无法释放,结果模拟索引中的支付订单号无法被其他程序占用,发生数据库死锁。

解决方法:更新订单号的生成规则,不经过数据库,

新订单号生成示例:PRO20180806100430222111111110001(32位)

规则:前三位,PRO为统一账户生成环境前缀;第四位到二十位,20180806100430222为精确至毫秒的时间;二十一位到二十八位,11111111为8位随机数;二十九位到三十二位,00001为每秒重置的自增数。综述订单号规则为

PRO+毫秒时间(17位)+8位随机数+每秒重置自增数(4位)

2)最后一步批量修改账户余额时,在对商户余额进行操作时,会进行for update加锁,也是由于网络问题,导致事务无法提交,使得行级锁无法释放,结果导致其他批量修改账户余额无法操作,发生数据库死锁。

解决方法,批量修改账户余额动作不直接进行,改为先写操作动作到某个临时表,然后程序直接返回,由另外一个程序异步的读取该临时表并进行余额操作动作,每隔一段时间读取若干条数据进行操作,执行这若干条操作使用事务处理,要么全部执行完毕(标志位置为执行完毕),要么全部回滚。

10、安装gitlab一直502错误

很有可能是可用内存不足,一个是可以加内存解决,二个可以减少unicorn核心数,降为2试试。此外可以调整mysql修改的参数以减少mysql的内存占用。

11、Eureka注册consumer启动时报: Error creating bean with name ‘eurekaInstanceConfigBean’

这是因为client里不包含Tomcat的依赖,所以Spring容器无法创建一些实例,从而导致项目无法启动,只需在pom.xml文件中,加上web依赖即可:

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

12、Springboot拦截器配置始终无效

检查了一圈,发现拦截器写的和配置的都没有问题,最终发现项目中还存在另外一个继承了WebMvcConfigurationSupport的配置文件,因为该配置文件的问题导致了配置拦截器的配置文件失效,最终导致问题产生。

解决方法,删除其中一个配置文件,将另一个配置文件中的内容合并到一个配置文件中,保证在项目中只有一个继承了WebMvcConfigurationSupport的配置文件。

13、axios自定义请求头无效

登陆成功 后台在响应头中返回token,保存token,在axios请求拦截器中添加token并发送,发送的请求 ,是options请求,并且请求头里的并不是,token:value的形式。

原因:当发送自定义请求头时,浏览器会先发送一次options请求 来验证服务器是否支持自定义请求头,如果通过则再次发送正式请求

解决方法:

拦截器里这样写

1
2
3
4
5
6
7
if (request.getMethod().equalsIgnoreCase("OPTIONS")){
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "*");
response.setHeader("Access-Control-Allow-Headers", "Content-Type,Access-Token");
response.setHeader("Access-Control-Expose-Headers", "*");
return true;
}

过滤器类似

14、“孤”连接问题

在做TCP连接相关的编程时,客户端应主动维护连接状态,保证连接该关闭的时候要关闭。在客户端系统崩溃等异常出现之后,连接不会正常关闭,服务端会出现“孤”连接,因此服务端需要一定机制来检查“孤”连接,定期清理“孤”连接以释放系统资源。

Web服务开发不涉及TCP直接调用,但HTTP应用服务也应该有相关的配置,各位应熟知相关配置,保证不会出现“孤”连接长期霸占资源的情况出现。

15、Mybatis查询中文无法查询出结果

使用mybatis查询数据库是涉及到中文的时候查询不到结果,但是在数据库中能够查询到(用的是mysql)

要解决这个问题很简单,只需要在配置jdbc.properties时在jdbcURL后增加参数useUnicode=true&characterEncoding=UTF-8来指定编码格式即可

16、POSTMAN测试接口报404错误问题

这个问题诡异的很,我传参数,post、get方式都试过,postman全是404,但是把地址直接复制到浏览器就没问题,尝试多次后发现,和参数的传递方式有关,使用params方式传参有问题的话可以试试在body里传参哦

17、阿里云centos死活无法使用nohup npm start &方式后台运行nodejs程序问题

下载node项目托管工具

pm2或者其他的

下载pm2

npm install pm2 -g

启动:

pm2 start xxx.js –name youname


如果觉得文章很有趣或对你带来了帮助,欢迎请我喝杯咖啡哦~

文章目录
  1. 1. 1、SSL httpClient死锁问题
  2. 2. 2、spring自动注入@Autowired某个类报xxx two candidate
  3. 3. 3、httpclient执行post请求第一次响应过慢
  4. 4. 4、SpringBoot项目因临时目录被清理导致程序异常
  5. 5. 5、找回centos虚拟机文件
  6. 6. 6、MYSQL使用distinct报错
  7. 7. 7、MYSQL大小写敏感导致数据库出错
  8. 8. 8、数字过大被自动转换导致的签名异常
  9. 9. 9、长事务带来的锁表问题
  10. 10. 10、安装gitlab一直502错误
  11. 11. 11、Eureka注册consumer启动时报: Error creating bean with name ‘eurekaInstanceConfigBean’
  12. 12. 12、Springboot拦截器配置始终无效
  13. 13. 13、axios自定义请求头无效
  14. 14. 14、“孤”连接问题
  15. 15. 15、Mybatis查询中文无法查询出结果
  16. 16. 16、POSTMAN测试接口报404错误问题
  17. 17. 17、阿里云centos死活无法使用nohup npm start &方式后台运行nodejs程序问题