实战bug解决

1.mybatisplus导致url无法访问

原因:因为在application配置了componentScan去扫描了mybatisplus的mapper,导致其他的未扫描到
解决方式:在自动生成的mapper上加上@mapper注解去进行组件扫描

2.druid多数据源切换不成功,报错找不到数据库

原因:boot自带的数据库配置会去扫描默认数据源,而druid的路径不一样
解决方式:编写一个默认的数据源

3.mybatisplus生成不了代码

原因:freemarker模板引擎不可用
解决方式:切换为velocity的模板引擎

4.JobThread Exception:java.lang.reflect.InvocationTargetException

原因:这个是xxljob定时注解导致的,和redis的缓存注解冲突了
解决方式:把redis的@cacheable注解去除掉就行了

5.驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。

原因:sqlserver在1.8之前的版本安全验证不一样
解决方法:把C:\Program Files\Java\jdk1.8.0_301\jre\lib\security下的java.security的3DES_EDE_CBC TLSv1, TLSv1.1注释掉,网上写的只注释3DES_EDE_CBC不完全
参考:https://blog.csdn.net/weixin_47180824/article/details/116236919

6.mybatisplus生成sqlserver文件失败,SQLServerException: 列名 ‘TABLE_NAME’ 无效。

原因:mybatisplus版本过高
解决方法:把mybatisplus从3.3.1降为3.2.0

7.Invalid bound statement (not found)

原因:mybatis-plus.mapper-locations= classpath*:mapper/**/*.xml在配置时多打了一个空格,应该要贴着打
注意:这种在xml经常会出现这种问题导致配置不生效

8.druid中不同数据源之间的交互

原因:DataSource打在controller层,如果都是在这个方法中执行,则全都会连接到一个数据源中,如果需要多数据交互,则需要给各自的server层打上该使用的数据源
解决方法:把DataSource的注解打在server层

9.mybatisplus分页不起作用,查询全数据

原因:mp在官方文档有说明,默认的分页最大限制是500条每页
解决办法:在mybatisplus配置文件把paginationInterceptor.setLimit(-1);设置-1,如果不设置默认是500上限

10.多线程在跑动时会先把线程加入线程池,然后执行,redis队列会有冲突

解决办法:使用阻塞队列arrayBlockQueue
后续解决方法:给线程池自定义优化如下,前面使用自带的三大方法都不好用

1
2
3
4
5
 ExecutorService threadPool= new ThreadPoolExecutor(4,4, 10L, 
TimeUnit.MILLISECONDS,
new LinkedBlockingDeque<>(100),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.CallerRunsPolicy());

11.mysql插入量每次只有5k左右,插入时间过长

原因:mysql限制插入4M
解决方案:提升每条sql内存为256M

1
2
select @@max_allowed_packet;
SET GLOBAL max_allowed_packet=268435456;

12.INSERT command denied

原因:1.数据库没有权限,2.你的sql指定错了库名,mybatisplus自动生成会带库名

13.Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x000001fd7819d000, 2195456, 0) failed; error=’ҳ ļ ̫С ޷ ɲ ‘ (DOS error/errno=1455)

解决思路:增加了idea的jvm内存

14.日期格式不正确导致每次会查询重复数据,没有后面的2702021-11-02 08:21:25.270

原因:后面的270是毫秒
解决方案:把原来的yyyy-MM-dd HH:mm:ss改为yyyy-MM-dd HH:mm:ss.SSS
切记:s一定要大写,大写查询的是微秒,小写查询的是毫秒

15.xxljob没有日志

原因:xxljob有自带的打印日志,使用原来的logger不管用
解决方案:使用xxljob自带的日志方法XxlJobHelper.log

16.Data truncation: Incorrect datetime value

原因:因为存入redis的数据为json格式,最后解析出来的数据为String类型,而数据库存储需要Date类型
解决方法:把存储的数据序列化,然后取出的时候反序列化,这样可以保证数据的格式

17.MISCONF Redis is configured to save RDB snapshots

原因:redis存满了,强制把redis快照关闭了导致不能持久化
解决方法:控制台输入config set stop-writes-on-bgsave-error no

18.sql injection violation, multi-statement not allow

原因:mysql的批量更新是要我们主动去设置的
解决方法:在mysql连接url后面加上&allowMultiQueries=true

19.insert into select from会导致锁表

解决方法:改为先删除再搜索插入,如果是小数据量插入可以忽略这个问题,但是如果涉及到金额类型,能不用就不用,很容易造成生产问题

20.No tests found matching Method test2(io.renren.DynamicDataSourceTest) from org.junit.internal.requests.ClassRequest@7e6ef134

解决方法:没加@Test注解

21.Elementui的el-pagination分页不更新问题

解决方法::current-page.sync=”pageIndex” 使用异步
吐槽:网上的方法使用if重新加载是不管用的,每次都会去默认刷新第一页,这个是大坑

22.mybatisplus时间查询当天日期问题

原因:因为数据有时分秒,然后mp里面查询的又是精确的
解决方法:
1.改为范围查询,查询今天到明天的时间

2.写xml文件使用formate格式化当天时间