开发技巧
穿条秋裤到处跑
Wu,Rosen Wanlong
展开
-
mulesoft开发支撑
总的来讲,mule并不是开发大型项目特别好的选择,dataweave也有很多局限,架构设计相对老套。优点在于学习成本相对较低,有一些开发基础就很好上手,开发小型应用确实有他的优势。作为定位集成框架的应用,其实够用了。另外值得一提的是,官方的文档教学还算全面,似乎国外的很多框架都比较注重文档输出。这个网站内容特别多,最重要的是支持搜索功能,可以根据你输入的关键字查询很多东西,如dw语法,mule配置等等,都可以找到很多你想要的答案。该平台可以在线测试大段dw的输出,也有语法提示,相对而言还是比较方便。原创 2023-10-30 18:00:49 · 237 阅读 · 0 评论 -
针对流只能消费一次的处理方案
遇到这个问题,第一反应是尝试深拷贝,使用hutool的深拷贝工具,返回的结果实际为null,应该是这个类没有实现Serializable的原因。具体思路为,将InputStream转换为byte数组,再根据byte数据反向生成相同的多个相同的流(对象肯定是不一样的)。Stream流只能被“消费”一次,一旦遍历过就会失效,就像容器的迭代器那样,想要再次遍历必须重新生成。最近在处理文件mimeType有关问题时,因为流只能消费一次的问题,引发了一些bug。在网上搜索了一下,以下方案是可行的,并且亲测可用。原创 2023-08-09 15:51:22 · 205 阅读 · 0 评论 -
git撤销加入暂存区(git add)的文件
这个命令可以理解为git add的反向操作,可以撤销单个文件,也可批量。直接使用git reset加对应的文件或.来撤销。原创 2023-07-27 20:40:39 · 314 阅读 · 0 评论 -
git pull时报错Filename too long
在git bash窗口执行以下命令,全局设置git支持长文件名。原创 2023-07-24 13:53:45 · 246 阅读 · 0 评论 -
git commit history导出
基本满足commit_id,作者,日期等要求。原创 2023-07-06 14:44:42 · 431 阅读 · 0 评论 -
关于 git 分支冲突处理
在开发中,多个子分支修改了同一个文件,再合并到目标分支时,后合并的分支可能会报冲突。处理冲突的方式很多,但坑也比较多,不能为了处理冲突,将分支没有逻辑的相互合并,可能导致dev分支的代码合并到uat甚至是prod上,造成生产事故。原创 2023-02-15 17:46:46 · 367 阅读 · 0 评论 -
git分支误删如何恢复
如果是本地分支和origin分支都删除掉了,或者是删除掉了版本更新的那一方,如何恢复。恢复的前提,是能找到最新提交的那一次版本的id,可使用。可以在本地根据最新提交的那次版本,创建名为hotfix-0001的分支,再push到远程即可。本地分支删掉后,重新checkOut,远程分支误删可以将本地分支重新推上去。如果只删了本地分支,或只删了origin分支,都比较好处理。,被误删的分支名为hotfix-0001。比如最新的那次提交的id是。原创 2023-01-18 15:43:14 · 4161 阅读 · 0 评论 -
excel读取出来的数字为科学计数法,该如何正确转换
正如我上面备注的,遇到1.389442444E7这种格式的数据,就会丢失精度,转换为13894424,丢失了小数点后两位。代码上更加简洁了,不过这里也有两个地方需要注意。调整后,使用定点数Bigdecimal来转换。最开始使用了下面这个方法。原创 2022-11-24 11:24:22 · 1176 阅读 · 0 评论 -
java最强日期(时间)工具类,打通Date、LocalDate与LocalDateTime
主要涵盖了Date,LocalDate,LocalDateTime三种常用的时间类型的相互转换以及toString,项目中多多少少都会用到,后面有遇到更多可通用的将持续更新在这里。原创 2022-09-13 18:00:14 · 673 阅读 · 0 评论 -
Idea中查看SpringSecurity各Filter信息
SpringSecurity的认证逻辑是通过Filter Chain实现的,一个项目中Filter是链式执行,其中一环校验不通过,则可终止后续Filter以及Api的调用。在平时debug时,如果list中的数据很多,凭肉眼去找肯定很难找,通过右键对象出来的filter很难用,可以通过Evaluate进行代码过滤,方便又快捷。在Filter的实现类中,doFilter方法里调用chain的doFilter方法,表示当前过滤器通过,继续FilterChain的下一个Filter。...原创 2022-08-17 15:26:11 · 1676 阅读 · 0 评论 -
云数据库没有公网ip如何访问,navicate ssh隧道 + com.jcraft.jsch
通常情况下,在新建一个数据库连接时,往往只需要填写连接名,主机名或IP地址,端口,用户名,密码,特别是后面四大要素,jdbc连接也需要四大要素,除了将host和端口拼接成了url,还需要指定driver,类如navicate的数据库连接工具,也是需要driver的,只是已经为我们准备好了。勾上使用SSH隧道的单选框,下面同样有主机名或IP地址,端口,用户名,密码四大要素,这里需要填写一台有公网ip的云服务信息,主机名或IP地址一定是公网可访问的地址,并且在该主机和数据库所在服务器处于同一局域网。...原创 2022-08-04 15:37:12 · 1445 阅读 · 0 评论 -
计算机网络知识大总结,包含各种熟悉得不能再熟悉的术语解析
计算机网络(网络)把许多计算机连接在一起,而互联网把许多网络连接在一起,是网络的网络。计算机通信是计算机中的进程(即运行着的程序)质检的通信。计算机网络采用的通信方式是客户–服务器方式(C/S方式)和对于邓连接方式(P2P方式)。客户和服务器都是指通信中所涉及的应用进程。客户是服务请求方,服务器是服务的提供方。计算机网络体系由应用层、传输层、网络层、数据链路层、物理层构成,其中,我们所熟知...原创 2019-12-12 22:31:02 · 381 阅读 · 0 评论 -
公司官网无法通过域名访问,原来是tomcat配置出了问题
今天同事说公司官网访问不了,只显示一片空白,真是见了鬼了了,前段时间还好好的。不过ECS远程访问好像确实是一直用不了,也没花心思去琢磨。今天就一起收拾了。首先解决远程访问问题。正常操作是win+r输入mstsc命令打开远程连接窗口,输入公网ip地址,改一下用户名,点击连接就行。结果。。。杀千刀的咋显示下意识的就以为服务器崩了,雪崩的那种,联系阿里技术人员折腾了一番,然并暖。...原创 2019-07-10 16:23:39 · 2885 阅读 · 0 评论 -
正则表达式,一篇就够了
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。正则表达式是繁琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。.点号用于匹配除换行符之外的任意一个字符,如t.r可以匹配tar、tbr等,但不能匹配taar,taar可以对应为t..r。* 星号用于匹配前一个字符出现0次或者任意多次,如zo*,可以.原创 2021-03-23 11:37:09 · 527 阅读 · 0 评论 -
深入浅出Java函数式接口,其实我们一直都有在用的
首先,什么是函数式接口?有且仅有一个抽象方法的接口(可以包含其它默认,静态,私有方法)Java中的函数式编程表现形式就是Lambda表达式,所以函数式接口就是可以使用Lambda的接口。保证只有一个抽象方法,就是为了Lambda表达式能够顺利进行推导。函数式接口通常标注@FunctionalInterface注解,用以检查是否符合函数式接口规范,但不标注该注解,也可以是函数式接口。有网友这样形容Java函数式接口,个人觉得特别形象准确,Java函数式接口类似于C++里的函数指针。指定返回参数类型T,原创 2022-06-21 18:05:49 · 203 阅读 · 1 评论 -
使用ssh公钥方式连接gitee私有仓库
首先在本地通过自己的邮箱生成公钥,gitee官方也提供了详细的说明在任意路径下,git bash here,执行以下命令,注意替换自己的邮箱地址,然后再三次回车。然后使用命令查看生成的公钥。登陆自己的gitee账户,进入到项目公钥管理界面。在上图正中间黏贴生成的公钥,会自动识别出标题,添加后本地则有只读权限,对的,这种方式添加的仓库公钥,可以共享,但只能pull。要想有写操作,请注意上图右上角,点击进去,添加全局的公钥通过上图添加的公钥,可以操作当前用户的所有仓库。另外,下面补充以下本地的操作,如果原创 2022-06-02 15:59:27 · 1480 阅读 · 1 评论 -
git更新上一次提交代码的备注信息
提交:git commit -m "备注信息xxx"修改上次提交的备注信息:git commit --amend --only -m "新的备注信息xxx"原创 2022-04-06 17:20:45 · 298 阅读 · 0 评论 -
java&周边技术文摘
SpringBoot 如何使用Druid统计、监控 SQL运行情况?如何解决微服务的数据一致性分发问题?SpringBoot性能优化我已经不用 try catch 处理异常了!太辣鸡了!SpringBoot中实现业务校验,这种方式才叫优雅!面试官Spring63问,抗住了马上高薪,失败了工厂拧螺丝ConcurrentHashMap面试灵魂拷问,你能扛多久不小心将测试代码提交到生产环境? 别慌,教你 6 种方法秒解决! 七种方案!探讨Redis分布式锁的正确使用姿势海量数据下如何使用多线.原创 2022-03-14 17:47:12 · 1622 阅读 · 0 评论 -
java 自动补齐数值至指定位数
如流水号需要在数字前自动补齐0,至指定位数。如果已经达到了指定位数,不会补齐,返回原数值。 /** * 自动补齐位数 * @param length 补齐后的位数 * @param num 待补齐的数值 * @return */ public static String pad(int length,long num){ return String.format("%0".concat(String.valueOf(leng原创 2022-01-06 14:30:55 · 3081 阅读 · 0 评论 -
调用feign接口时,如何往header中添加参数
Controller接收到请求后,我们可以在service中通过feign直接调用其它服务的接口,但是,controller接收到的请求和通过feign调用其它服务,其它服务接收到的请求,是不一样的。例如我们往往习惯于在header中放入用户的token信息,在不做处理的情况下,其它服务接收到的请求,可能就是无用户信息状态,这种请求应该判定为无效状态。在服务的提供方或者调用方定义一个拦截器,将当前请求的token信息手动添加到feign请求的header中。@Configurationpublic.原创 2021-12-15 16:30:15 · 3442 阅读 · 0 评论 -
idea中刷新maven依赖,总是拉不下来
一种不会报错的情况是,想要更新的依赖一直正在被占用(有正在启动的服务正在使用该依赖),这时怎么刷新,都是老的依赖版本。这种情况把服务停了重新拉一下就行了。还有不被占用,但一直拉不下来的时候,排除maven配置错误的原因,去本地把maven依赖删掉,再拉最新的。如果拉下来不是最新的,那就得检查一下远程仓库是否有最新的被成功deploy上去了。...原创 2021-12-14 17:27:52 · 4660 阅读 · 2 评论 -
VO中的Long类型数据通过注解的方式直接转换为String,防止数据失真
在需要序列化的字段上添加如下注解即可。import com.fasterxml.jackson.databind.annotation.JsonSerialize;import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;@JsonSerialize(using = ToStringSerializer.class)原创 2021-12-09 16:27:32 · 1078 阅读 · 0 评论 -
入参对象有LocalDateTime类型的参数,swagger该如何传参
swagger提供的默认参数格式大概是下面这个样子2021-11-24T08:41:36.357Z直接传入这个格式的字符串,服务端会报错Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.time.LocalDateTime` from String "2021-11-24T08:41:36.357Z": Failed to deser原创 2021-11-24 16:48:05 · 3255 阅读 · 0 评论 -
java8 lambda表达式Stream对List常用操作总结
List最为java编程语音使用最频繁的数据结构之一,经常涉及到对List数据的各种处理,以前我们只能通过遍历的方式,自己去逐条处理,java8提供了Stream能够满足大部分日常对List的操作,如分组,求和,过滤等等,并且效率比自己逐条遍历要快很多,代码也更加简洁。首先创建一个Student测试的实体类如下@Data@ApiModel("学生实体类")public class StudentEntity { @ApiModelProperty("主键") private Lon原创 2021-10-19 20:17:19 · 588 阅读 · 0 评论 -
浅谈通用的字典表结构设计
应该绝大多数系统都需要字典表吧,或许不叫这个名字,值集,枚举表等等。当然,java中有枚举类,能够将一部分不涉及到更新的枚举值配置其中,但大部分涉及到维护的数据,或者是通用的数据,如国家省市值,这个表数据状态值,配置到字典表里面都是非常好的选择。在这里,我们就使用比较有名的项目ruoyi提供的字典表DDL来简单分享一下。ruoyi有两张字典相关表,一个字典类型表,一个字典数据表,将字典定义和数据分开,我也非常赞同这种设计。当然,也有些系统就用一张表代替,第一层存字典类型,即定义,后一层存数据。字典类.原创 2021-09-18 17:19:25 · 8502 阅读 · 0 评论 -
mybatisplus中的xml如何添加like条件,进行模糊查询
like会和%结合使用,like '%xxx%'匹配包含xxx的内容,'%xxx'匹配一xxx结尾的内容,'xxx%'匹配以xxx开头的内容。如果在xml中写code like ${dto.code},会被解析code like xxx,如果不是数字,肯定是会直接报错的,没有加单引号。如果使用code like '${dto.code}',解析为code like 'xxx',错是不会报了,但是查询结果和code = xxx是一样的。所以,根据自己的需求,在两边加上%,如code like '%$.原创 2021-04-29 16:31:50 · 9596 阅读 · 3 评论 -
前端同时访问后端同一接口两次,但只有后面那次请求有返回数据
两次接口都是成功了的,但是第一次请求的返回值没有数据,状态为200.最开始我都认为是前端调用的问题,两次请求之间加上延时还是不行。我自己写了个脚本测试也是如此,通过反复测试,发现如果当第一次请求没有执行完之前,发起第二次请求,那么第一次请求就绝对没有数据,但也是请求成功的。这个接口稍微有点特殊,普通的接口直接返回一个DTO给前端,由于这个接口的数据格式比较灵活,所以直接处理成Gson,通过response对象写入。public class BaseController { protecte.原创 2021-07-12 17:24:02 · 4929 阅读 · 0 评论 -
springboot如何使用多线程,线程池管理
在原生java中,创建和启动线程的方式大致有以下几种:继承Thread类,然后重写run方法实现Runnable接口,并重写run方法匿名内部类 Thread thread = new Thread(new Runnable() { @Override public void run() { // 线程实现 } }); thread.start();lambda表达式 new Thread(()->{ // 线程实原创 2021-06-08 17:01:56 · 4406 阅读 · 0 评论 -
异常:The supplied data appears to be in the Office 2007+ XML
我遇到这个异常时,是在处理excel时,根据字节数组流创建HSSFWorkbook对象时报的错,这个是excel兼容性的问题。处理xls结尾的文件时,用HSSFWorkbook及其相关类型;而处理xlsx结尾的文件时,需要用XSSFWorkbook及其相关类。两种类型其实方法都差不多,但在使用的时候,还是需要注意的。...原创 2021-05-27 19:52:41 · 1296 阅读 · 2 评论 -
关于java通过反射 获取/修改 对象属性值的一些注意事项
getFields()与 getDeclaredFields()前者能够获取所有public字段,包括父类字段;后者可以所有public/protected/private类型的字段,但是不包括父类的字段。使用时根据自己的需求选择即可。如何获取子类和父类的所有字段首先,model对象的所有属性值,即字段,通常都是定义为private,所以,只能通过getDeclaredFields()方法去获取;然后,递归循环每个子类的父类吧,getSuperclass()方法可以做到。反射获取或者..原创 2021-05-22 10:48:04 · 1263 阅读 · 0 评论 -
swagger里面显示的示例参数格式错误
swagger的配置和用法,在此就不做过多赘述了,在使用过程中,可能有的朋友会遇到这样的情况,这个接口显示的示例参数,却是另一个接口的参数格式,这个对后端自测的角度来说,非常不友好。但只要把参数手动改成正确的格式,后端接口还是能正确接收的。我们习惯使用DTO作为接口的入参,一个DTO对象往往需要标注@ApiModel注解,我们从原备注信息能够获得该注解的详情。能够针对我们的接口入参对象提供额外的信息,也就是能够根据后端入参的数据接口,显示一个可测试的数据对象,一个json格式的对象。而出现这个接口.原创 2021-05-22 10:36:13 · 1365 阅读 · 0 评论 -
JAVA提取字符串信息中的数字(包括整数,小数)工具类
提供了两个静态方法,getNumber可以返回数字类型的字符串数组,getIndexNumber可以查询某个位置的字符类型的字符串,支持提供默认值,个人认为这个非常重要,以防一些数据问题带来的异常。如果需要其它方法,可以在getNumber的基础上扩展。public class NumberHelper { private static final Pattern INT_REGEX; private static final Pattern FLOAT_REGEX; st.原创 2021-05-11 16:30:58 · 2166 阅读 · 0 评论 -
springboot通过各种不同类型参数获取容器中的bean工具类
一般依赖通过@Autowired,@Resource注入就可以了,也可以通过将属性设置为private final类型,再使用lombok的@AllArgsConstructor也可以注入。使用这个工具类,主要是在处理spring事务的时候,拿到某个对象的代理类,以更加精准的控制事务。@Componentpublic class SpringContextHelper implements ApplicationContextAware { private static ApplicationC原创 2021-05-11 16:12:35 · 716 阅读 · 0 评论 -
idea中如何添加自定义的todo
在开发中,可能有的时候因为某些原因,某个功能暂时没法完成,可能是因为第三方的接口暂时没有提供,可能是自己只定义了一个接口,给别人调,但具体的实现还没有填充,等等,这些情况最好都添加一个todo标识,提醒自己这个功能还没有完成。大多数项目都是多个人共同协作开发,所以,如果大家都用同一中todo标识的话,那就多半区分不开。首先,创建一个自定义的todo pattern打开setting/editor/TODO进行idea的todo管理界面上面的patterns是本地环境中支持的todo范式,下面的.原创 2021-05-10 14:00:31 · 3795 阅读 · 0 评论 -
前端获取的Long类型数据失真,后端这样处理就行了
数据库表id一边定义为Long类型,对应数据库类型为bigint。我这边的情况是,数据库的id虽然是自增,但一开始因为一些原因,起始值特别特别大,java后端处理过程中没有什么问题,也不会出现失真。但是,前端获取的对应字段,最后两位变成00,失真了两位。我自己通过swagger里面测试查看到的返回值也是如此。但是,在postman里面测试的返回值确实正确的,postman厉害了。对此,想到的肯定是把long类型转换成字符串输出。因为项目用到了DDD领域驱动设计,所以只改输出对象就可以,接受时的DTO和原创 2021-04-22 13:03:49 · 2313 阅读 · 0 评论 -
mybatisplus中的xml对象参数传递
如果是一般类型的参数,直接把类型加上,在xml的sql中通过#{}或者${}的方式引入就行了,如果是一个java对象,在mapper的参数前面加上@Param注解,给定参数名,在xml中直接调用。举个栗子:下面是mapper的接口的一个方法List<DesHistoryVo> getHistory(@Param("dto") HistoryQueryDto dto);接着在xml中调用dto对象的属性省略...and supplier_id = ${dto.supplierId}原创 2021-04-21 21:07:00 · 7127 阅读 · 0 评论 -
idea中未被识别的maven项目,如何手动添加
一个maven项目,肯定是有pom文件的,在项目的创建或者变更过程中,pom文件可能出现异常,这时就需要我们手动来添加maven项目。在gitee上创建了一个创库,只有几个文件,没有目录结构,pull下来后,将项目根目录作为根目录,下面再建module作为子项目,方便管理。这一点与eclipse是有非常非常大的区别,刚开始转换开发工具时也特别不适应。新建子项目没什么问题,但根路径下没有pom文件,没被识别为父项目。首先,新建一个pom文件,复制一个常用的父pom内容。此时pom文件颜色是红色,不像.原创 2021-04-17 20:41:34 · 1577 阅读 · 5 评论