- 博客(119)
- 收藏
- 关注
原创 FeignClient接口类用自定义注解添加统一的入参字段或者处理参数
远程调用第三方系统的接口,都需要传sign签字字段,而此字段一般是用密钥和入参根据约定的算法生成的字符串。为了代码简洁快捷,所以通过注解的方式去实现。题外话,若对方接口要求请求头里面有某个固定的参数,比如token,实现方法可参考如下。fegin接口调用此拦截。fegin调用demo。先创建一个请求拦截器。
2024-08-08 15:35:17 226
原创 阿里云服务器发送邮件失败 Could not connect to SMTP host: smtp.xxx.com, port: 465;
从提示看就是阿里云邮箱的465端口连接不上,一开始以为是阿里云禁止了465端口,所以在阿里云控制台的安全组里面给465端口都配置了入方向和出方向,但仍旧同样报错。阿里云服务器也不例外,但可以在阿里云控制台申请解封25端口,然而是小微服务器一般不给解封的,所以即使本地25端口也调试ok,也不考虑换25端口作为解决方向。这段代码本地ok,上阿里云服务器就连不通stmp+465,故而又从网上找了几个别人写的发送邮件的工具类代码,都是大同小异,结果也是本地ok阿里云服务器不行,着实让人有点蒙圈。
2024-06-07 23:08:24 2210
原创 生僻字汉字存到数据库变成乱码
所以结论就是数据类型要改成 nvarchar ,并且插入或者更新值的时候前面还要带N(或者unicode转换)以sqlserver为例,如何让旧值变成新值的效果呢,先看以下实验。比如汉字 䶮 (读作yan 三声),存到数据库后,会变成问号。
2024-04-28 18:38:41 956
原创 java计算程序运行耗时的方法
有时候为了统计性能耗时,会写几行代码计算一个方法或者sql执行消耗多久时间,打印出日志分析。下面写了3种计算代码执行完所消耗时间的方法。(对于一些重要的业务场景需要监控的,可以把这个耗时结果写入数据量通过job去告警)
2024-01-15 15:06:00 2720 1
原创 上传文件大小限制报错
先看注解 @RequestPart 和 @RequestParam 都是可以的,问题不在这,在看 @RequestPart(“multfile”) 里面的multfile,postman的入参字段名称不填写或者填写的与后台接口的入参字段名称不一致也不会成功 会报错。上面ok后,上传一个大一点的文件报错信息如下, 1048576 bytes 大约是1M,也就是提示你上传最大限制1M文件。:去nginx的conf目录下,编辑nginx.conf文件里面的http{},在里面添加一行配置如下。
2023-11-09 16:27:37 947
原创 拦截器实现
举个简单易懂的例子,假设HandlerInterceptor是你爷爷,你想拥有你爷爷的财产。要么你直接继承你爷爷(HandlerInterceptor),要么是你爸已继承你爷爷,这时你直接继承你爸就等于继承你爷爷了(HandlerInterceptorAdapter),同时还拥有了你爸的财产(如果你爸有财产)。拦截器是对所有action请求都执行,切面Aspect的粒度比拦截器HandlerInterceptor更小一些,可以指定某个方法、某个类包下的全部方法、某个注解才去执行致这段拦截功能。
2023-09-28 11:00:00 336
原创 vue项目开发环境工具-node
如果没弹窗,点击左测第四个菜单“拓展”(相当于idel的plus,装插件的地方),输入language 选择chinese进行安装。下载完成后, 你的项目下会多出一个node_modules的文件, 这就是执行后下载下来的依赖包了。最近在开始接触做vue框架的前端项目,以前用的前端比如html,js,css等都是比较原生的,写好后直接浏览器打开就行。切记镜像不切换,有些依赖包就下载不下来,项目自然也就运行报错,跟java一样的。项目启动成功,项目的代码结构介绍和常用功能,可以参考我另外一篇。
2023-09-26 17:24:52 861
原创 下载项目路径下的文件
文件下载(比如模板下载),方法之一是先在服务器上创建一个路径,再通过代码里面写死或配置去读取这个路径的下的这个文件进行下载。这个方法的缺点就是需要提前创建好这个目录,并给文件路径给与读写权限,上线时还有可能忘记做这个操作了。今天主要是写一个把文件放在项目里面,打包后运行可直接可以下载的功能。
2023-09-25 14:56:52 154
原创 自定义注解(校验参数必填demo)
以上就是整个过程,最重要的是第二步,整个自定义注解的功能都是在这里面实现的。其实字段必填spring也提供了注解@NotNull,示例如下。所以自定义注解一般会写点其他什么业务逻辑的功能,有现成的肯定是直接用谁还不辞辛苦自己去写。其中异常工具类ExceptionUtil.buildException()我这里就不贴代码了,自己写一个或者替换一下。注解在开发过程中很常用,他也支持自定义注解。下面写了一个校验请求参数必填的自定义注解。
2023-07-01 15:52:39 849
原创 maven的pom文件
我们只需要引入spring-boot-start-parent后很多其他依赖就不用在引用了,因为spring-boot-start-parent这个文件中的套餐将我们需要的所有依赖都准备好了。maven会根据pom文件拉取依赖包,根据群组id先是在我们本地仓库对应的路径去找,找不到就去远程仓库下载回来本地。下面这个是安装maven后配置文件里面的,它是所有pom的父pom,所有maven项目继承该配置。我就还需要配置这些非中央仓库告诉maven除了上面的中央仓库,你还可以去我提供的这些仓库里找。
2023-06-08 16:00:00 1983
原创 创建mongodb项目
https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/,有兴趣的可以去了解。repository接口层(这里的repository层我没有使用, 因为与下面的service层二选其一就行了。它两的区别跟 mybatis和jpa类似。首先新建一个springboot项目,新建项目略,不会的新手可以参考。刚创建好springboot项目的时候就一个启动类。接下来把各个代码贴一下。service接口层。
2023-06-05 10:15:27 215
原创 复制集合与对象
这个是最原始也是最费劲的,某个字段不小心写错了还成就了一个bug。但有些jar包里面有现成的方法可以直接使用, 比如spring-beans包里面的。开发过程中,总会涉及到一些BO、PO、DTO、VO等转换, 比如userVO转换成userPO。自己写个转换方法如下。两个入参分别是 源对象/源对象集合 目标对象.class。
2023-06-04 10:00:00 123
原创 mongdb常用查询
查询用 find(普通查询) 和 aggregate(聚合查询) 都可以,但后者的效率好一点。find是用{}来接收查询条件,aggregate用数组[]来接收查询条件。如果用aggregate,根据下面表格可以快速记忆下来,配合上面的示例就可以写出符合需求的脚本语句了。mongdb是把数据存在文档里面,文档里面是一种bson格式的数据(类似json格式),再通过mongdb的javascript语法取读取符合条件的文档内容用表的形式展示给我们。下面是一些对 “查询结果” 再做处理的方法。
2023-05-31 01:00:00 443
原创 单个用户单个接口请求次数限制
除了注解的实现方式, 也可以通过拦截器+redis缓存之类的去实现。通过注解的形式去实现,需要用到的jar是。给需要限制请求次数的接口添加自定义注解。
2023-05-12 00:15:00 441 1
原创 httppost请求工具类(jar)
以前也手写过http工具类,纯原生的。但有些jar里面也是有封装hhtp请求的,今天再写一个别人封装好的demo,用到的架包是spring-web-5.2.5.jar。用这个需要注意的地方就是https的请求了, 如果是服务器上没有安装ssl证书或者本地测试,而你请求的地址是https,就记得加上。这一行代码,并且要写在发起请求之前。
2023-04-30 06:15:00 823
原创 对已有的json重新排序
JSONObject的底层是Map结构, 默认是 HashMap,也可以改成LinkedHashMap,二者在顺序上有些差别。改成LinkedHashMap的方法是。接口做签名时,拼接明文字符串时候,大部分人约定入参需要按字母顺序进行排序,所以写了json重新排序的方法。其中心思想还是用json自带的转字符串并排序。但是如果是LinkedHashMap类型的,则上述的工具类则会失效不起作用。,最后再转回json。
2023-04-27 16:23:53 1314
原创 分割list集合划分批次
在某些业务中,当一个list的数据量很大时, 就可能会考虑进行拆分。比如导出数据, 每N条追加写入表格;提交数据库,每N条执行一次insert 等诸多场景。下面写了三种拆分list 的方法。
2023-04-26 14:39:32 394
原创 请求返回参数公共部分设计
在些接口的时候, 对于某些入参在每个接口都出现的话(比如给PC、APP写的一堆接口,每个接口会包含请求渠道方名称、IP地址、版本、时间戳、签名等参数),可以抽取出来作为公共的参数,减少代码的冗余。java 的继承虽然不能多继承,但可以一层一层的继承。D继承C,C继承B,B继承A, 这样D也就有了A里面的属性方法.同样的,方案二也可以一层包一层比如。比如大部分表,有创建人/时间、更新人/时间等字段,这些也可以抽取出来,通过拦截器的方法去自动填充。公共参数放父DTO里面,每个接口的DTO继承这个父DTO。
2023-04-24 10:34:53 126
原创 表id自增的方法
sql语句被执行的时候会自动带上主键字段和填充值去执行,语句中就不用写id字段了。useGeneratedKeys属性默认是false的,keyProperty对应实体对象里面的主键id字段名称,keyColumn对应数据库的字段名称。更多属性,以及其他标签的属性可以看这里(从XXXMapper.xml里面按住ctrl点击标签或者属性跳进来)最后,通过触发器、事件等去实现id自增的方法就不是很推荐了,所以不举例了。创建表的时候设置id自增即可,或者后期修改表id自增。如果是注解形式的sql,写法如下。
2023-04-12 17:46:46 5531
原创 easyexcel
2.除了性别,比如再有状态0-失效,1-生效,则参照如上在写一个转换类XXXX.java就是,改最后一个convertToExcelData方法,不是字典表的自己写ifelse去返回对应的中文值也行。早就听说阿里巴巴的easyexcel导出数据,在针对大量数据方面不仅效率快,也不会出现内存溢出。它的导出就一行代码,然后就是实体字段添加注解配置就完事了。其中 userService 和 DictService,以及枚举类就不贴代码了,意义不大自己去实现一下就行。
2023-03-31 01:00:00 917
原创 多继承多实现
以上是抽象类和接口的多继承多实现例子,在调用的类里面注入的时候,通过注解的形式注入指定name从而决定走的是哪个一个具体的实现类。子实现通过@Component或@Service表明自己唯一的name。第2个实现类serviceB 它还调用了一个接口,这个接口也是多实现的,这个接口的两个实现类里面的业务逻辑也是打印一行日志。第1个实现类serviceA 直接处理业务逻辑(即打印一行日志,当然大家实际项目中肯不是打印一行日志这么简单)可以用来处理,不同地方调用统一的入口却走的是不一样的逻辑。
2023-03-09 09:41:05 214
原创 基础数据类型的比较
第一个:String 关键词的源码里面是有final修饰的, 字符串zhangsan在内存里面只有唯一一个快照,s1和s2指向的地址都是同一个,而== 比较的是内存地址,所以s1s2的内存地址值相同所以true。, 非缓存数组范围内的 不论赋值方式 一律都不相等,因为超出都是new新的对象两个新变量的内存地址值是不相等的,且缓存范围内,两边变量只要任意一个出现new关键字就都是不相等的。第二个: s3用了new关键词,用new就会新创建一个并在存在另外一个地方,所以内存地址就不相同了,指向也不一样。
2023-01-10 21:43:22 387
原创 招投标业务总结
招标方可以选择对接这个平台让自己的项目发布的广泛,招标方把自己的项目信息推送过去后则可以在中国招标网上看到自己发布的项目了,从而吸引更多的人来参与投标。招标网需要在我方服务器上部署一个前置机(可以理解为一个微服务),我方的项目查询库里面的数据按照接口文档要求组装报文推送前置机,前置机上的程序会根据xsd文件取检查报文数据规范,通过后会生成一个xml文件推送招标网,然后返回结果"接收成功"或者具体的错误信息(一般是必填字段缺失或不符规范,也就是没通过xsd校验,通过校验的基本都是会推送成功的)
2022-11-21 17:47:50 1301
原创 迁移部署项目
在webapps/项目名称/新建一个index.txt随便写个字符串再把txt文件后缀改成html,通过localhost:8080/项目名称 就能看到刚才写的字符串,说明tomcat的service.xml配置、端口、访问地址都没问题,只是项目没被成功启动所以项目里面的其他的接口都无法访问。入方向–手动添加,添加我们需要开放给外网访问的端口,授权对象全是0表示不校验身份(安全性不好),当然也可以限定更小的范围能控制谁可以用这个端口(灵活性不好)。,如果被#注释就放开,如果是no 就改成yes。
2022-10-17 17:19:35 1267
原创 回滚本地未提交的代码
但今天遇到一个问题,我本地在一个文件里面写了很多代码,写完了测试通过了正准备提交, 更新了远程代码, 很不巧远程上这个文件刚好被删除了, 更新的时候也提示了这个文件的路径找不到,点击了取消想暂时不更新远程了,结果还是如预料的一样本地这个文件没了。另外,在一直没提交的情况下, 当我们发现自己写的东西还没有之前写的好,又想回到最开始的写的内容,也可以用这个功能,在历史记录中找修改时间点相近的版本,在查看右边的内容比对,确认是最开始写的内容就选中这个历史版本进行回退,回到最初始的状态。
2022-09-06 09:28:09 2056
原创 LocalDateTime工具类
用了ideal和jdk1.8后,LocalDateTime的使用就少不了。有些功能用Date会使用,但在LocalDateTime里有些功能是略微有些不同。相比之下LocalDateTime的使用更加简洁,也就是一行代码的事所以也用不着写工具类。API文档 里面有时间工具类、加密、表格、文件、图片、zip、http、json、map、数组等等,功能多的背不过来,需要啥就去搜索一下有没有自己想要的,没有的话在自己去写。上面写的方法比较少, 因为发现了一个很强大的开源工具类jar包:hutool,分享给大家。.
2022-08-16 14:29:21 1603
原创 java获取树行结构菜单
项目中免不了会遇到树形结构的查询,今天分享一下我写的一个查询方法。 先看数据库的数据,主要有id,parentId,name三个字段(可能还有其他本次无用的很多字段),根节点的父id设置为0实现的效果下面是业务层的实现代码,主要是递归的思想实体和返回对象创建表语句......
2022-07-09 18:37:37 833
原创 plus和mybatis的区别
plus和mybatis的区别:puls是增强版,在mybatis上进行了拓展,保留了mybatis的全部功能。对于业务线的开发人员来说,相比mybatis最大的优点是: 单表的增删改查以及列表分页不需要xml来写sql语句,因为plus提供了一个叫做BaseMapper的接口(在mybatis-plus-core.jar里面),内部已经提供了相当多的crud操作方法,详细如下只有当联表查询或者一些复杂......
2022-07-01 17:11:56 1918
原创 字符串修改前后比较不同
页面上有一个勾选列表,需要实现页面修改之后被新增、修改、删除的数据实现同步后台数据库表里。做法是先是查数据库表原有的数据的主键(逗号拼接成字符串形式)然后与页面修改之后传到后台的字符串进行比较,找出勾选的不同之处。然后把新勾选的插入数据库,勾选去的从数据库删除,仍保留勾选的对数据库字段进行更新。下面是找出新老两个字符串哪些是新增哪些是删除哪些是保留的方法package yulisao.test;import org.apache.commons.lang3.StringUtils;import
2022-04-06 00:08:15 1264
原创 List<Map>根据map字段排序
从一个list<map>根据指定的map字段进行排序package yulisao.test;import org.apache.commons.collections.CollectionUtils;import org.apache.commons.lang3.StringUtils;import java.util.*;/** * @author yulisao * @createDate 2022/3/20 0020 下午 11:34 */public class
2022-03-27 21:33:50 10807 1
原创 找出两个字符串重叠的部分
有个需求是对两个人的运动轨迹进行分析判断是否有过接触,运动轨迹是一个字符串或者数组。详细的需求就不透露了,但其中会涉及到求在两个字符串都出现的部分,也就是交集 。下面是实现方法package yulisao.test;import java.util.ArrayList;import java.util.List;import org.apache.commons.collections.CollectionUtils;import org.apache.commons.lang3.Strin
2022-03-27 20:39:26 1265
原创 计算月差工具类
最近有个需求里面要求计算月差,不足一个月按一个月计算。计算月差,大部分逻辑是 (年-年)*12 + (月-月) + (日-日决定是否要进一)。但是有个场景 2.28-3.31是多少个月有着不同的理解理解一: 一个月零3天。因为2.28到3.28是一个月,3.28-3.31是3天,所以是一个月零3天理解二: 这个月底到下个月月底,刚好一个月。如果按理解一来,就用 (年-年)*12 + (月-月) + (日-日决定是否要进一) 就可以了,得到是2个月。如果按理解二来,计算出2个月就不符合要求了,预期的
2022-03-27 15:14:51 669
原创 git修改用户名(作者)重置git账号密码
安装完git后,我们会通过下面命令设置了提交代码的用户名git config --global user.name "你的用户名"git config --global user.email "你的邮箱"做一个新项目的时候, 已经提交本地私仓。第一次pull提交代码时,提示错误 commit authorNanpme check error。发现原来服务器端设置了检查用户名,上述命令我随便写了自己私人邮箱没有使用公司邮箱,所以推送的时候检查不通过就提交不了,现需修改用户名。先查看一下自己已设置的用
2021-10-07 22:26:55 4568
原创 银行贷款与网上借贷比较
曾经做过很多p2p项目,现在也做了一些银行的贷款项目。二者有相同也有不同之处,下面大致的对主流程简介一下。一、资金渠道与资质银行是把自己的钱借给申请人,还款本息都归银行。 p2p是发布一个借款需求,多个投资人把自己的钱借给申请人,p2p平台不出钱,但交易达成后收取借款人和投资人一定的手续费进行盈利。银行都是合法的借贷,P2P如果没金融牌照加持,很容易戴上非法集资的帽子,2019年P2P因为这个倒闭大半,但金融牌照基本是申请不到。二.借款产品二者一般都会有借款产品的维护,后台管理系统里可以对借款产品
2021-09-12 17:09:28 425
原创 js生成随机字符串
这个function是用时间戳+N位随机字符拼接在一起。 当然如果N的值够大够长,则前面不拼接时间戳也可以function getRandomChar(len) { var x="0123456789qwertyuioplkjhgfdsazxcvbnm"; // 需要什么字符这里添加 var tmp=""; var timestamp = new Date().getTime(); for(var i=0;i< len;i++) { tmp += x.charAt
2021-07-23 16:20:35 1022
原创 Socket请求
测试时可以直接使用软件工具,比如SocketTool.exe,也方便若编程中需要Socket的请求,可以参考如下方法。 /** * socket连接 * * @param ip 目标主机地址 * @param port 目标端口 * @param req_msg 报文数据 * @param timeout 超时时间(秒) * @return */ public static String sendSocketMessage(String ip, int port,
2021-07-06 17:18:54 1163
原创 window.location.href下载中文名称文件报错
导出文件, 当文件是中文的时候, 有时候浏览器会自动转码,导致服务器上找不到这个文件了而报错。比如:/home/data/李四.xls 存在与服务器上, 通过window.location.href=file_url后,/home/data/%E6%9D%8E%E5%9B%9B.xls 浏览器自动转了找不到文件了404开始以为是前端后台的编码格式不一致导致传输数据过程中变了,就想着用URLcode后台加密前台解密。但最终发现在页面上即使写死一个中文名称文件名也是一样的结果。也尝试了window.o
2021-05-10 17:12:02 2518
原创 shell脚本-删除文件或者文件夹
服务器上每月需清理前上个月的文件夹,最开始是写了方法,递归删除,自造数据测试没问题。public static void deleteDir(String dirPath) { File file = new File(dirPath); if (file.isFile()) { file.delete(); } else { File[] files = file.listFiles(); if (files == null) { file.delete();
2021-04-27 18:01:49 7079
原创 读取/导出带文档密码的表格
前两天做了导出excel还要求打开时输入密码,整理了一下代码,写个工具类。说明:excel表格分为2003版本文件名后缀xls和2007版本文件名后缀xlsx,版本不同读写创建文档略有不同xls加密依赖jxcell.jar,xlsx依赖的poi-ooxml.jar,且两者不能混用否则报错。xls 自带了写保护功能,但可以绕过密码以只读模式打开文档,只是不能编辑而已。本次的需求是要密码才准查看,所以改用了jxcell.jarxssfWorkbook当数据超大(1048576行,16384列)时,
2021-04-26 14:05:16 774 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人