
开发奇遇记
bug抢修现场
小楼夜听雨dayrain
只要静下心来,世界上没有学不会的知识
展开
-
Mybatis相同sql两次查询的结果不一样?
客户端请求到达服务端后,两次执行相同的查询sql,得到了两个完全不一样的结果。(两次查询之间没有修改过相关的表)原创 2023-02-09 18:41:18 · 2616 阅读 · 1 评论 -
SpringBoot打包提示”程序包XXX不存在,找不到符号“
今天打包SpringBoot多模块项目的时候遇到了一个坑的问题。有时候打包成功,有时候打包不成功。打包不成功的话会报错 ”XXX程序包不存在,找不到符号“。即使打包成功后,也有如下报错: 奇怪的是IDEA里直接运行是可以的。最后发现是SpringBoot打包插件的问题:多模块项目打包的时候,需要把插件放在启动类所在的模块。假设目录结构如下:root.pom.xml--------A.pom.xml--------B.pom.xml--------C.pom.xml如果启动类在B.pom.xml,那么一定要原创 2022-07-12 17:03:32 · 2337 阅读 · 1 评论 -
Java自带的Http Server如何设置返回值的类型(content-type)
以返回Json格式的数据为例:首先我们要自己写一个请求的处理器,需要实现HttpHandler接口,并重写handle方法。handle方法会获得一个HttpExchange,通过exchange可以设置返回值内容与长度private void response(HttpExchange exchange, String jsonBody) { try { byte[] bytes = jsonBody.getBytes(StandardChars.原创 2021-11-17 13:57:05 · 3683 阅读 · 0 评论 -
SpringBoot获取当前环境
一个项目中出现多个环境的配置文件在代码里我们可以通过下面的方法获取当前的环境。首先,为了拓展性,我们需要定义一个枚举,用做环境的区分public enum EnvEnum { DEV,PROD,TEST}其次,定义一个Sping工具类,获取上下文中的环境,做一个匹配。@Componentpublic class SpringUtils implements ApplicationContextAware { private static Application原创 2021-09-03 09:21:03 · 2877 阅读 · 0 评论 -
Mybatis Provider注解实现批量插入
需求借助mybatis 的provider实现一个比较通用的,批量插入数据接口。Mapper接口第一参数为需要批量插入的数据,第二个参数为对应实体类的class public interface BaseDao<T> { @InsertProvider(type = BaseProvider.class, method = "batchInsert") int batchInsert(@Param("lists") List<T>原创 2021-08-23 15:36:32 · 2121 阅读 · 2 评论 -
@SuppressWarnings注解常见用法
使用场合@SuppressWarnings注解,主要用于抑制编译器报出的warning信息。比如在idea中,如果某个方法的返回值没有被使用,idea在语法检查时,会把这个方法标记为阴影状态,鼠标悬停后会显示对应的原因。如果此时我觉得这个返回值是必要的,只是暂时还没用到,就可以加一个@SuppressWarnings注解,抑制警告信息。当然,不是每时每刻都需要解决warning。一般会在提交代码前做一个检查,例如用idea的gui提交到git仓库时,默认会对我们的修改做一个检查,如.原创 2021-08-23 14:28:47 · 3313 阅读 · 0 评论 -
报错 WARNING: Illegal reflective access by org.apache.ibatis.reflection.Reflector
原因:mybatis使用部分反射api时,高版本的jdk报出了警告。在jdk1.8环境下运行应该是不会有这个警告的。但如果还是出现这个警告,则可以检查下项目运行时用的是不是自己安装的jdk。idea默认情况下用的是它自己的jdk,而非用户自己安装的jdk。如果需要切换自己安装的jdk,则按照下面的操作:右上角File ————> Project Structure修改下SDK路径顺便检查下Module模块的语法检查等级是不是也是jdk1.8右下...原创 2021-08-10 17:34:19 · 5928 阅读 · 0 评论 -
mysql分组查询如何返回比较详细的信息
标题比较拗口,举个例子说明一下:link_bin_material是库存表,下面是一个简单的分组查询sql,统计某个物资的库存数。select lbm.materialId, count(*)from link_bin_material lbmgroup by lbm.materialId现在有个需求,我在返回库存信息的同时,还需要返回物资的详细信息。物资信息存放在material表中。一开始尝试这么写(下面的sql是错误的!):select lbm.materialId,原创 2021-07-16 19:09:29 · 795 阅读 · 0 评论 -
Spring Security账号被禁用时自定义抛错信息
前端提的bug,说是账号被禁用时,提示的错误信息依然是”账号或者密码错误“。确实应该让用户知道登录不上的准确原因。找到登录失败处理的类,不出意外应该是继承UsernamePasswordAuthenticationFilter的自定义类。打几个断点,用被禁用的账号登录看看,最后发现进入下面的方法。抛出的异常为我们可以通过异常类型的检查,来区分不同的登陆失败原因、自定义提示信息。 @Override protected void unsuccessfulA.原创 2021-07-07 16:44:30 · 994 阅读 · 0 评论 -
mybatis使用分页插件时,出现总页数统计不正确的情况
场景描述今天前端突然告诉我,调用分页查询接口时,返回的总个数比实际的总个数小。而在这个项目中,我使用的是mybatis plus自带的分页插件,其他接口都没有问题,偏偏这个接口出现了问题。问题分析定位到代码所在的sql(用了mybatis自带的查询构造器)虽然关联了五张表,不是很优雅,但因为一个列表需要展示的东西太多,似乎也没有其他更好的办法。抛开sql本身的不规范,我们分析一下为什么出现总个数不正确的情况。控制台打印一下执行的sql:统计个数的时候,执行了如下语句原创 2021-07-01 09:18:11 · 2601 阅读 · 1 评论 -
关于RestTemplate反序列化嵌套对象的问题
假设某个接口返回的数据如下格式{ "msg" : "ok", "code" : 0, "data" : { "id" : 1, "tasks" : [ { "id" : 300, "nodeId" : 801, "status" : 3, "actionName" : "pick", "wcsProcessName" : "rgv" }, { "id" : 301, "nodeId"原创 2021-06-08 10:39:06 · 2076 阅读 · 0 评论 -
Spring Security用户登录时忽略大小写的问题
今天测试告诉我用户登录时,用户名不区分大小写也成功登录了。一开始以为是安全框架(Security)的问题,经过一番debug后发现security把认证的原创 2021-06-07 12:26:08 · 1246 阅读 · 2 评论