实际业务
yxh13521338301
只分享干货的码农
展开
-
想要在springboot启动后马上做些事情?源码告诉你怎么实现
话不多说,直接上源码。(springboot的启动源码不再过多阐述了哈,感兴趣的朋友可以自行查看源码或查看我的了一篇博文《springboot2.0启动原理源码剖析》)public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); ConfigurableApplicationContext context = null;.原创 2020-12-24 09:23:49 · 398 阅读 · 2 评论 -
Redisson的分布式锁
最近想使用redisson的分布式锁去替换系统中的redis分布式锁从而解决续期问题,查看了源码,发现其原理还是比较容易理解的。一、Maven配置 <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.13.4</version> </dependency>..原创 2020-11-04 16:21:16 · 2656 阅读 · 0 评论 -
为什么对研发情有独钟
相信很多猿仔都和我一样,学到知识总想着在实际工作中快速用到,这样就算暴露处理错误,也方便我们加深对知识的理解。 不才,年初想着使用策略+模板方法的设计模式去重构我们项目中臃肿的代码,上去就是一通撸。经过自测之后,满意地露出了淫荡的笑容...然而,之后的工作时间中,总会有一些匪夷所思的数据出现,比如,短信接收者吐槽不是他的数据,为何他收到短信;再者,数据不一致等现象。 仔细检查代码,也没发现我这惊为天人的代码逻辑有何不妥之处,而且自己反复测试还是没有问题复现,故想着莫非用户...原创 2020-07-28 16:19:10 · 687 阅读 · 0 评论 -
使用AOP去切入private,导致属性注入失败的问题
1.背景最近项目中使用了数据字典,在写订单模块时会经常在映射方法中将订单的类型和订单的状态放到request域或model域中。由于订单模块业务映射很多,一个个添加太麻烦,所以想到AOP来实现。2.问题描述自己写了一个AOP,访问时发现,有些映射访问错误,属性注入为空3.aop代码package com.chongdong.web.comm...原创 2019-11-04 14:00:25 · 3266 阅读 · 1 评论 -
JS校验上传图片的宽高
说明因为onload是异步加载,所以无法将onload的校验结果返回至外部,可以换个思路,在onload中执行回调方法进行校验代码/** * @Description 图片尺寸验证 * @Author: yanxh<br> * @Date 2019/10/28 13:06<br> * @Version 1.0<br> *...原创 2019-10-29 09:27:36 · 890 阅读 · 0 评论 -
内存溢出OutOfMemoryError
这是一个老生常谈的问题,至于这种异常产生的原因无外乎几种:JVM内存设置太小、内存泄漏、死循环和无限递归等。一、常见问题类型的原因及解决方法1. tomcat:java.lang.OutOfMemoryError: PermGen space问题类型: PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要...原创 2019-05-20 10:39:54 · 258 阅读 · 0 评论 -
使用redis分布式锁解决请求重复的问题
场景:多节点部署相同的web应用,其定时任务会触发两次,可在业务处理的地方加redis锁进行处理reids工具类package ...;import java.util.ArrayList;import java.util.Collection;import java.util.List;import java.util.Map;import java.util.Set;i...原创 2019-05-16 15:30:59 · 4735 阅读 · 3 评论 -
插入mysql出现 Incorrect string value错误的解决方法
问题描述 这可真是个坑爹的问题,我的数据库使用的也是UTF-8,所以中文应该是没问题的,后发现用户传递了一个原创 2019-05-28 16:44:38 · 12311 阅读 · 4 评论 -
解决update或delete时where查询的结果很庞大导致sql执行超时的问题
对于轻量级的更新,单一的update或delete可以很快处理,但如果where查出的结果达到百万甚至千万级别,这一条更新语句执行下去,估计程序连接超时是必不可免的了。其实我们可以换个思路,将where查询的结果进行分页,然后我们程序循环调用这个sql,这样每次小量的更新会很迅速。程序不至于出现链接超时的情况。这种方法有个前提,就是每次更新的内容必须影响where查询的记录,否则就是死循环...原创 2019-06-05 15:31:32 · 3514 阅读 · 0 评论 -
springboot+mybatis 使用mybatis的拦截器去控制sql语句的输出
其实很多项目都是直接配置mybatis的配置文件,比如:# 日志 logging: level: com.chongdong.data.mapper : debug com.chongdong: infoso,我这个文章貌似没什么实用。其实不然,如果是批量操作的话,那么日志中的sql和参数是非常庞大的,这对后期的维护和问题的定位很不利,所以我自己...原创 2019-06-06 15:17:25 · 4817 阅读 · 3 评论 -
sharding-jdbc分库分表时注意事项
DataSource接口不支持timeout相关操作Connection接口不支持存储过程,函数,游标的操作不支持执行native的SQL不支持savepoint相关操作不支持Schema/Catalog的操作不支持自定义类型映射Statement和PreparedStatement接口不支持返回多结果集的语句(即存储过程,非SELECT多条数据)不支持国际化字...原创 2019-06-26 10:15:16 · 2154 阅读 · 0 评论 -
JAVA自定义数据字典
由于业务的原因,导致程序中有很多枚举,不便维护,故使用自定义的字典表1.表的设计主要有两张表:sys_dict_type 用于记录字典类型 ; sys_dict 用于记录字典数据DDL:CREATE TABLE `sys_dict_type` ( `ID` bigint(20) NOT NULL AUTO_INCREMENT, `NAME_EN` varchar(25...原创 2019-08-30 14:52:57 · 11619 阅读 · 7 评论 -
文件上传百分比进度条的设计
相信很多猿友都会经历文件上传的功能开发,那么面对大文件的上传,如何在视图层展示处理的进度想必大家都曾是苦不堪言吧?今天,菜鸟就总结一下自己设计的方法。一、定时查询二、估算由于设计公司业务,代码暂不透露 ,只整理自己的设计思想,个人感觉如果为了以后可以多节点部署web应用,可选择第二种,如果为了用户等候时间更准确,可参照第一种方式。...原创 2019-05-05 10:35:02 · 1103 阅读 · 2 评论 -
img404时的默认值
当img标签的src指向的图片路径对应文件不存在时,图片会显示异常,为了防止这种情况,我们一般都会有一个默认的图片去替代显示,img的onerror事件就很好的实现了此功能<img src="错误的路径" onerror="javascript:this.src='默认图片路径' "/>...原创 2019-01-04 18:13:30 · 457 阅读 · 0 评论 -
java 反射入门学习
一、概述java反射机制是在运行状态中,对于任意一个类,都能够获得这个类所有的属性和方法;对于任意一个对象都能调用它的属性和方法;这种动态获取的信息以及动态调用对象的方法的功能称为java的反射机制。反射就是将类中的成员分解为一个个java对象。二、反射涉及的类反射API用来生成JVM中的类、接口或则对象的信息。★Class类:反射的核心类,可以获取类的属性,方法等信息。...原创 2018-06-07 14:47:53 · 530 阅读 · 0 评论 -
SSO实际应用
SSO核心原理:1.子系统之间session不能实现共享,cookie在不同域名下时也不能共享的,为此我们需要一个相同的顶级域名(如:aaa.yanxiaohui.cn,bbb.yanxiaohui.cn)2.在用户登录操作完成的时候(即单点登录成功后)我们向顶级域名写入cookie3.在访问这个顶级域名下的其他系统的时候我们只验证顶级域名下有没有指定的cookie存在,如果存在,...原创 2018-11-09 16:51:16 · 233 阅读 · 0 评论 -
暴走漫画
原创 2019-01-10 17:19:23 · 388 阅读 · 0 评论 -
使用时间戳命名文件遇到的坑
问题描述:最近写了一个文件上传的接口,从流中读出文件,将其保存成指定的文件类型,文件名以当前系统的时间戳命名。写完自测,没有问题,就提交代码了。但是今天测试的同事反馈,有个业务需要上传多张图片,当图片很小时,会出现问题(图片无法打开,或多个请求返回的图片名称相同),经过反复调试分析,找到原因。产生原因:上传多次图片时,调用方使用多线程来处理,这样就会在同一节点请求接口,当文件特...原创 2019-03-08 16:01:51 · 2458 阅读 · 2 评论 -
上传文件时使用文件流遇到的坑
由于项目性质,做商品批量导入时,使用inputStream去获取文件流,通过POI解析为list集合,然后为了提高效率,使用异步线程池。但是在线程中获取不到list,尝试了几次,判断为,list通过文件流解析得到,本质还是属于文件流,如果使用异步线程的话,文件流就不会流入线程中,而是继续走主线程,所以在外面再定义一个集合list2,将流中的list的数据全部addAll即可。...原创 2019-03-08 16:07:57 · 909 阅读 · 0 评论 -
json序列化导致无限递归的问题
描述遇到个比较奇葩的问题,在序列化一个实体类时,总是报无限递归导致堆溢出的错误,核查后发现,原来我这个实体里面有一个Method的熟悉,而Method中有一个自己的实体属性Method root,所以导致序列化的时候不停地递归,最后堆溢出。总结序列化无限递归,往往是因为对象里面有其他引用类型的属性包含自己或者属性本身...原创 2019-03-15 15:16:46 · 2241 阅读 · 1 评论 -
java动态代理的Demo
jdk的动态代理离不开两个核心的类,java.lang.reflect.Proxy和java.lang.reflect.InvocationHandler,前者创造代理对象,后者增强代理行为。话不多说,直接上代码被代理者的父类接口(游戏)package cn.yanxiaohui.service.web.test.proxy.dynamic;/** * 动态代理的测试接口 * @a...原创 2019-03-18 13:17:23 · 725 阅读 · 0 评论 -
Java模版模式DEMO
模版类package cn.yanxiaohui.service.web.test.template;/** * 模版模式 * 旅游的三要素: * 吃 * 玩 * 休息 * @author yanxh * */public abstract class Tourism { public final void comeOn() { System....原创 2019-03-22 14:23:33 · 174 阅读 · 0 评论 -
JAVA发送邮件附件变成.bin文件的解决方法
出现此类问题,多数是由于附件名称太长或附件名称有中文导致。在发送邮件的方法类中加上静态代码块即可 /** * 后加的防止题目过长并且进行全局定义 */ static { System.setProperty("mail.mime.splitlongparameters", "false"); System.setProperty("mail.mime.charset",...原创 2019-04-01 15:17:23 · 4014 阅读 · 2 评论 -
使用JAVA发送带附件的邮件
首先定义我们的邮箱类/** * 邮件类 * * @author yanxh * */public class Mail { /** * smtp服务器 */ private String smtpHost = ""; /** * smtp服务器是否授权 true表示授权 */ private String smtpAuth = ""; /** ...原创 2019-04-01 17:44:23 · 396 阅读 · 2 评论 -
观察者模式DEMO
场景订阅号发布信息,相关读者可以自动查看信息被观察的接口package cn.yanxiaohui.service.web.test.observer;/** * 定义被观察的接口 * 一般有三个方法:订阅,取消订阅以及推送信息 * @author yanxh */public interface Observerable { /** * 在被观察...原创 2019-04-11 11:17:36 · 111 阅读 · 0 评论 -
Java获取HTML文件的代码
public static String readfile(String filePath){ File file = new File(filePath); InputStream input = null; try { input = new FileInputStream(file); } ca...原创 2019-04-09 11:07:07 · 1090 阅读 · 0 评论 -
循环之后将数据放入刚刚循环的对象中
实际场景,集合为商品订单集合,一个订单有多个商品,现在要做导出,商品有一个属性为订单总金额,如何得到这个订单总金额,并将其放入商品中?//订单集合List<Order> orderList = new ArrayList<Order>();//导出的列的keyString[] keys = {"name","price","orderPrice"};//导出的...原创 2018-06-06 10:54:08 · 1074 阅读 · 0 评论