自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 mybatis plus新版代码生成器,类型转换处理器ITypeConvertHandler使用

看官方文档时,看到类型转换器就会下意识的整个页面搜索关键字查看使用,但你会神奇的发现,根本就没有具体的使用示例,凉了。这时只能去看源码打断点,研究默认的使用,再重写自己的;可以自定义模板,直接在模板上修改,以下是freemaker模板示例。当默认生成的数据类型不满足时,就需要自定义指定要生成的类型。因此自定义类型转换器时,可以基于默认的基础上来改。如何你再看下指南,就会发现这边居然会有示例。

2023-08-28 23:52:07 797

原创 MyBatis 操作动态表、动态列,数据迁移

MyBatis 操作动态表、动态列,数据迁移

2023-05-19 18:02:34 496

原创 hutool工具并发使用 Sftp sftp = new Sftp(sshHost, sshPort, sshUser, sshPass) 的坑

hutool 使用 Sftp 的一些坑

2022-12-22 16:12:52 5136

原创 前端 input 输入框限制只输入整数值,输入不显示其他字符

最初是在网上搜索layui input框输入整数,网上查出来的结果基本上都是一样,使用的都是onkeyup,onkeyup是按键弹起时触发,因此在输入的时候会先显示字符后再清除,换成oninput后就能解决这个问题,如果要IE支持,还需要加上onpropertychange。oninput 是 Chrome 支持的,onpropertychange 是 IE 支持的。...

2022-08-16 11:18:04 1424

原创 Spring Boot、Spring Cloud、Spring Cloud Alibaba 各个版本的对应关系

Spring Boot、Spring Cloud、Spring Cloud Alibaba 各个版本的对应关系

2022-07-14 23:00:41 290

原创 限购(一人一单)问题解剖及解决方案

目录限购问题问题:活动产品,每个用户购买不能超过1个?解决方案:Java锁(单机)解决方案:分布式锁(集群)Redis实现分布式锁问题?setnx锁超时释放使用 redisson 来实现分布式锁总结限购问题限购问题是生活中很常见的,如某某手机限购不能超过几台,商品搞活动时每人购买不能超过1件…这种问题看似很简单,但一个处理不好,就会出现超买问题问题:活动产品,每个用户购买不能超过1个?线程1进来先校验A客户是否下单过,此时是没有,在还未来得及生成订单,线程2进来校验A客户是否下单过,由于线程

2022-04-15 23:28:57 2092

原创 秒杀超卖问题解剖及解决方案

目录超卖问题问题:先校验产品库存,再更新库存解决方案一:乐观锁版本号模式解决方案二:乐观锁,更新后库存大于0问题:为什么不使用悲观锁来解决?总结超卖问题秒杀往往伴随着高并发,一个处理不好就会出现超卖问题问题:先校验产品库存,再更新库存线程1先校验库存,余100,在线程1未来得及更新库存时,线程2进来校验库存,还是余100,然后两个线程都能更新库存,导致最终结果超卖解决方案一:乐观锁版本号模式在更新产品库存时,产品库存等于校验时库存时才更新。线程1:在校验时库存余100,update t

2022-04-14 23:25:40 3382 4

原创 Seata启动连接数据库异常,MySQL8.0版本

解决方案引入MySQL版本对应的jar包,Seata默认提供了两个版本的,如果没有可自行引入修改数据库连接配置store.db.driverClassName=com.mysql.cj.jdbc.Driverstore.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true&serverTimezone=GMT%2B8seata官方提供的连接默认没有serv

2022-03-20 23:40:55 3507 1

原创 分布式事务之RocketMQ实现消息最终一致性

目录引言开发流程开发步骤伪代码流程图引言开发流程开发步骤客户下单生成预订单调用产品服务扣减库存调用客户服务扣减余额2、3、4步骤正常执行完,修改订单状态为正式订单3、4步骤出现异常时推送MQ回退扣减产品库存(幂等处理)回退扣减客户余额(幂等处理)伪代码public class OrderController { @RequestMapping("/saveOrder") public R saveOrder(@RequestBody Order order) {

2022-03-06 22:10:43 1089

原创 Feign服务调用,Get、Post请求

目录GET 请求POST请求GET 请求Feign客户端@FeignClient("lik-dr-product")public interface ProductFeign { /** * 从请求路径获取值,需要使用@PathVariable注解 */ @GetMapping("/product/findById/{id}") Product findById(@PathVariable("id") Long id); /** * 从请求参数中

2022-02-19 18:11:29 5243 2

原创 Feign 配置全局日志,记录请求、响应信息

2022-02-18 23:34:28 1139

原创 Java 之 CyclicBarrier 原理篇

目录引言测试示例CyclicBarrier 源码结构await 等待构造器的预设命令执行总结引言CyclicBarrier 就像就组长召唤大家开会一样,首先是预约一个时间,小组成员提前做好准备,待开会组长发言完,小组成员再做出响应;测试示例import java.util.concurrent.CyclicBarrier;public class CyclicBarrierTest { public static void main(String[] args) {

2022-02-15 23:11:33 326

原创 Java 之 Semaphore 原理篇

目录引言测试示例Semaphore 源码acquire 抢占资源release 释放资源总结引言Semaphore 就像是饭堂,饭堂有固定的桌位,在吃饭高峰期时就要来早点抢位,不然桌位坐满了就得等别人吃完才有桌位吃饭;测试示例import java.util.Random;import java.util.concurrent.Semaphore;import java.util.concurrent.TimeUnit;public class SemaphoreTest {

2022-02-14 23:51:51 616

原创 Java 之 CountDownLatch 原理篇

目录引言测试程序await 阻塞countDown总结引言CountDownLatch 就像游戏中的打BOOS,打BOOS之前有几道关卡,必须通过这几道关卡才能见到BOOS;CountDownLatch 可以通过设置一个计数器,当计数器到0之前都会阻塞在 await 前面,通常是在多线程时,在子线程执行完后调用countDown进行倒数,待所有子线程执行完,计数器倒为0时再执行主线程 await 后面的逻辑;测试程序import java.util.concurrent.CountDownLa

2022-02-09 23:55:52 781

原创 SpringBoot整合RocketMQ,顺序消息

目录引言问题分析RocketMq顺序消息生产者消费者消费结果小结引言总有那么一种业务需求是要有先后顺序来执行问题分析例:在A系统下了一个订单,需要推到B系统去生成订单和发货单,并且是要先生成订单再生成发货单,如果按正常情况去先发造成订单的消息到MQ,再发生成发货单的消息到MQ会出现的几种问题;推送订单和推送发货单的消息发到不同的主题?如果放到不同的主题,每个消费者对不同的主题的消费速度是不一样的,即使是先发订单消息再发发货单消息也是保证不了顺序性的。推送订单和推送发货单的消息发到同

2022-01-24 23:17:03 2095 2

原创 SpringBoot整合RocketMQ,集群、广播消息

目录环境生产者application.yml发送普通消息消费者application.yml消费组(consumerGroup)集群consumer-group-1 (集群)consumer-group-1 (集群)consumer-group-2消息消费结果小结广播模式消费消费者5消费者6广播模式消费结果广播模式小结顺序消息环境JDK11、SpringBoot2.6.3、RocketMQ4.8、IDEA生产者application.ymlserver: port: 6101sprin

2022-01-24 21:56:27 2122

原创 Java字符串转Integer

String num = "98.500";int intValue = new BigDecimal(num).intValue();

2021-12-28 17:14:03 598

原创 论Seata是否适合高并发下的分布式事务解决方案(附测试结果)

文章目录引言测试结果Seata在高并发下出现的问题问题分析Seata结论一、pandas是什么?二、使用步骤1.引入库2.读入数据总结引言对Seata AT模式进行压测,基于Seata1.4.1,订单服务调库存服务测试结果使用 jmeter 进行压测,在100并发下成功数是 23、29,成功率不到30%,在1000并发下成功数是276、260,成功率同样是不到30%Seata在高并发下出现的问题获取全局锁失败Seata服务器中出现的异常:io.seata.core.exceptio

2021-04-04 22:14:39 4592 4

原创 MyBatisPlus列表数据(分页)和导出数据(不分页)共用同一个Service方法或Mapper接口

目录引言实现思路源码分析实现代码结果引言需求:做一个导出,往往列表的数据与导出的数据是一致的,要说有不一样的,那就是导出的数据可能没有分页,既是符合条件的全部数据,而页面中的列表数据是有分页的;数据一样可以共用同一个Service或Mapper方法,没必要写两个,在网上搜索了一波,没有找到方案,自己研究找到一种可以实现的方案,特此记录实现思路列表数据和导出数据分两个方法,Controller两个,Service两个,Mapper两个(不推荐使用,麻烦,代码冗余)Service、Mapp

2021-03-18 17:01:05 3263

原创 freemaker 遍历后台Map获取key value键值对,key为int类型

freemaker 遍历后台Map获取key value键值对,key为int类型引言遍历Map同时获取key/value试过不行的方式引言在网上查到的遍历方式都是遍历key,再用key来获取value,不知道什么原因,我用这种方式获取不了value,不知道是不是因为key是int类型就取不了,后来想到了另一种方式,特此记录一下…遍历Map同时获取key/value// 这种方式直接就拿到key/value,好像其他语言也有这种写法就试了一下,还真的可以用// <#list taskMa

2021-01-20 14:12:42 824

原创 Hutool导出Excel,导多个Sheet页

重要方法// 指定要写出的 Sheet 页bigWriter.setSheet(sheet.getSheetName());工具类public class HuExcelUtils { /** * 导出多个 Sheet 页 * @param response * @param sheetList 页数据 * @param fileName 文件名 */ public static void exportExcel(Ht

2020-06-03 19:32:05 9714 3

原创 Hutool 导出Excel,只导出设置了别名的字段

目录只导设置别名的字段工具类使用只导设置别名的字段Hutool 的导出会默认将实体类(或Map)的所有字段都导出来,有时候根据业务的需求不要一些多余的字段,这就很烦,请教了一下大佬,知道有这么一个方法bigWriter.setOnlyAlias(true); // 官方提供了这个方法,参数为true时只导出有别名的工具类public class HuExcelUtils { /** * excel 导出工具类 * * @param response

2020-05-14 19:19:38 7947 1

原创 Java中switch处理字符串的原理

引言switch对字符串的支持是从JDK7开始的实现原理switch对字符串的处理和基本数据类型的处理有一点点的不一样,它会字符串转为HashCode码来转到对应的分支,分支中的字符串也会转成HashCode码,HashCode码为int类型,switch这样处理字符串就和int类型的一致,只是在内部再一次使用equals对原字符串进行比较代码示例public class SwitchStringDemo { public static void main(String[] a

2020-05-08 19:51:18 357

原创 常用的IDEA 与 eclipse快捷键

常用的IDEA 与 eclipse快捷键IDEAeclipse格式化代码Ctrl+ Alt+ LCtrl + Shift + F代码提示Alt+ EnterAlt + /导入包Ctrl + Shift+ O显示文件结构Ctrl + F12F4快速打开类Ctrl + NCtrl + Shift+ T显示类结构图(类或接口的继...

2019-06-03 13:39:46 1385

原创 CSS设置背景图片满屏

折腾了很久,图片长一点或者宽一点,怎么设置宽和高都有问题,设置背景图片满屏,网上也搜了很多,都没有好的解决方案。最后抠了某个网站的源码,找到了目前的一个解决方案<!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>首页</title> ...

2019-05-23 22:20:55 14559 5

原创 记首次工作的经历(Java程序员)

目录引言坑一、代码规范问题二、实体类系列化问题三、数据库问题四、团队协作问题初入职引言记首次工作的经历,以及出现的各种坑,避免以后工作再遇到同样的问题坑一、代码规范问题在团队开发上,个人所写的代码并不只是个人的,团队的其他伙伴也是有可能去查看或维护的,所以在代码风格上是很重要的,该空格的空格、该换行的换行、该缩进的缩进、该注释的就注释,这些风格是很重要的,代码尽量写优雅一点。如...

2019-04-10 14:36:02 750

原创 白话文讲通 "数据库三范式"

数据库三范式引言在设计数据库时,基本要求是根据数据库三范式来设计各个表。看了一些书和文章对三范式的讲解都太啰嗦和长篇大论,因此根据我对三范式的理解,使用简单几句话讲清数据库三范式第一范式(1NF): 属性的原子性要求表中设计的每个字段都具有原子性,不可再分割。例:姓名字段,其中的姓和名必须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两个独立的字...

2019-03-10 15:23:41 497

原创 Redis 命令

简言Redis是基于C语言开发的一个开源的高性能键值对(key-value)数据库。通用命令String (字符串)类型添加键值 &amp;gt; set key value127.0.0.1:6379&amp;gt; set k1 val1OK取值 &amp;gt; get key127.0.0.1:6379&amp;gt; get k1&quot;val1&quot;一次性设置多个键值 &am

2019-02-27 00:22:18 216

原创 SpringAOP - 注解方式实现

目录简述AOP的术语注解方式实现Spring AOP简述 AOP: - 面向切面编程, - AOP是一种编程范式,Spring将AOP思想引入到框架中, - 使用AOP可以对某个模块的功能进行增强, - SpringAOP底层使用的是动态代理来实现, - 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑之间的耦合度降低,提高程序的可重用性,同时提高了开发的...

2019-02-23 13:34:18 175

原创 SpringAOP - xml 方式实现

AOP: - 面向切面编程, - AOP是一种编程范式,Spring将AOP思想引入到框架中, - 使用AOP可以对某个模块的功能进行增强, - SpringAOP底层使用的是动态代理来实现, - 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率, - AOP采取横向抽取机制,取代了传统纵向继承体系重...

2019-02-23 13:27:51 450

原创 玩Dubbo遇到 java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy异常

目录开门见山报错原因解决方案报错代码开门见山对着Dubbo官网玩,并使用ZooKeeper作注册中心,在使用Maven 导入包时要注意了,我导入的 dubbo 版本是2.6.5(github中的),在Dubbo官方中的ZooKeeper的curator 客户端给出的依赖版本是1.1.10,加入依赖并启动服务提供者,就开启报错模式了报错原因在一番折腾后,发现问题就出在curator这个依...

2019-01-22 20:16:57 4603

原创 Windows下配置并启动Dubbo管理控制台

目录注意项配置ZooKeeper配置 Dubbo管理控制台注意项1)安装和配置好JDK、Maven2)配置好ZooKeeper,并启动(Dubbo官方推荐使用ZooKeeper作为注册中心)配置ZooKeeper此处使用zookeeper-3.4.13,先到ZooKeeper官网下载好zk压缩包 -&amp;gt; 官网下载网址.下载zk解压缩到非英文目录下打开解压后的zk目录,并...

2019-01-21 23:24:01 551

原创 Servlet中的 "重定向" 与 "请求转发"

目录两者区别重定向请求转发两者区别重定向:地址栏会发生改变数据会丢失(原有的request请求失效)使用 response 进行重定向(response.sendRedirect(&amp;quot;/path&amp;quot;);)重定向的过程在客户端+服务器端完成请求转发:地址栏不会发生改变数据不会丢失(原有的request请求不会失效)使用 request 进行请求转发转发的过程在服务器内部完成...

2019-01-18 18:28:51 164

原创 String 中的 equals() 和 ==

目录String 对象的equals() 与 普通对象的equals()== (双等号)String 对象的equals() 与 普通对象的equals()两个独立的普通对象(不包括基本数据的包装类)使用equals() 来进行比较,不管字段的值是否一样,equals()返回的一定是 false ;两个独立的String对象(new 创建)使用 equals () 来进行比较,只要它的值一样...

2019-01-08 19:48:48 2668 1

原创 单例模式的5种实现

单例模式简介饿汉式懒汉式双重检查加锁内部类枚举防止反射示例简介特点: 保证一个类只能有一个实例,且是自己实例化出来的,并提供一个全局访问点给外部类来获取该实例优点:只有一个实例,节省内存缺点:不易于拓展,多数情况下都要直接修改单例类注意:单例模式构造方法为 private 权限,不能在其他类中使用 new 来创建;但可以使用反射来访问私有构造方法,为了安全考虑,可在构造方法体中抛出一个异...

2019-01-06 15:36:50 275

原创 ArrayList 源码深度解析(基于JDK 1.8)

目录简言ArrayList 介绍ArrayList 的字段ArrayList 的构造方法增(add()、addAll()、扩容)删(remove()、removeAll()、clear())改(set())查(contains())获取(get())简言以下所有源码基于JDK 1.8ArrayList 介绍其底层操作的是数组。ArrayList 是线程不安全的ArrayLi...

2019-01-01 01:54:15 443

原创 Oracle中常用日期函数to_char()、to_date()、add_months()、last_day()、next_day()的使用

目录日期数据类型1)to_char(date, m)2)to_date(date, m)3)add_months(date, n)4)last_day(date)5)next_day(date, m)日期数据类型时区返回的数据类型输出格式current_date会话的时区date2018.12.23 21:59:49current_timestamp会话的...

2018-12-26 23:52:36 5707

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除