自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(265)
  • 资源 (22)
  • 收藏
  • 关注

原创 实现自定义Spring Boot Starter

利用 starter 实现自动化配置只需要两个条件:maven 依赖和配置文件,这里简单介绍下starter 实现自动化配置的流程。引入 maven 依赖实质上就是导入 jar 包,Spring Boot 项目启动的时候会找到 starter jar 包中的 resources/META-INF/spring.factories 文件,根据 spring.factories 文件中的配置,加载需要自动配置的类。以 mybatis-spring-boot-starter 为例,其自动配置类之一如下:对

2022-12-03 11:56:02 412

原创 XXL-Job框架底层原理分析笔记

XXL-Job是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。公司中用到了这个组件,只是按照现成的执行器任务复制粘贴修改,没有系统性学习,这里简单总结下XXL-Job的使用,持续更新!关于XXL-Job的下载和部署入门级请参考这篇博客。

2022-10-23 00:34:07 321

原创 SpringBoot+Mybatis-Plus多数据源使用

在实际开发中项目很容易就遇到使用多数据源的情形,比如:在新增数据时除了给自己的库保留一份,还需要同步到别人的库;转移程序需要将A库的数据转到B库等等。。这里介绍下mybatis-plus-dynamic的使用。

2022-10-03 15:56:56 850

原创 基于SpringBoot+RabbitMQ+Redis开发的秒杀系统(异步下单、热点数据缓存、解决超卖)

本项目是参考网上资料,整理开发而成,项目代码中加入了自己的理解和实现。​基于SpringBoot框架开发,实现的功能主要是登录、商品列表、商品详情、秒杀商品,订单详情等功能。在系统业务处理中,使用到分布式session维持会话、Redis预减库存降低数据库访问压力,消息队列异步下单(削峰)、客户端轮询结果、接口限流防刷等技术。

2022-09-12 17:06:18 8644 9

原创 Mysql批量删除大量数据

假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE FROM syslogs WHERE statusid=1 会发现删除失败,因为lock wait timeout exceed的错误。如果要用order by 必须要和 limit 联用,否则被优化掉。然后分多次执行就可以把这些记录成功删除。...

2022-08-27 08:15:00 5045

原创 【SpringBoot AOP Redis实现延时双删功能实战】

一、业务场景在多线程并发情况下,假设有两个数据库修改请求,为保证数据库与redis的数据一致性,修改请求的实现中需要修改数据库后,级联修改redis中的数据。请求一:A修改数据库数据 B修改redis数据请求二:C修改数据库数据 D修改redis数据并发情况下就会存在A ---> C ---> D ---> B的情况 (一定要理解线程并发执行多组原子操作执行顺序是可能存在交叉现象的)## 1、此时存在的问题 A修改数据库的数据最终保存到了redis中,C在A之后也修改了数据库数据。 此

2022-08-14 12:04:13 1653 7

原创 组合 - Java - 回溯 + 剪枝

给定两个整数n和k,返回1…n中所有可能的k个数的组合。示例输入输出[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]

2022-07-28 23:38:10 734

原创 349两个数组的交集和01两数之和

给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例给定nums=[2,7,11,15],target=9因为nums[0]+nums[1]=2+7=9所以返回[0,1]分析题意就是让你从数组中找到两个位置他们对应位置的和为target。...

2022-07-23 23:00:15 63

原创 49字母异位分组和242有效的字母异位词

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例输入输出[[“bat”]]说明所有输入均为小写字母。不考虑答案输出的顺序。

2022-07-23 22:55:27 101

转载 线程池:业务代码最常用也最容易犯错的组件

由于线程的创建比较昂贵,随意、没有控制地创建大量线程会造成性能问题,因此短平快的任务一般考虑使用线程池来处理,而不是直接创建线程。今天,我们就针对线程池这个话题展开讨论,通过三个生产事故,来看看使用线程池应该注意些什么。Java中的Executors类定义了一些快捷的工具方法,来帮助我们快速创建线程池。《阿里巴巴Java开发手册》中提到,禁止使用这些方法来创建线程池,而应该手动new ThreadPoolExecutor来创建线程池。这一条规则的背后,是大量血淋淋的生产事故,最典型的就是newFixedTh

2022-07-02 22:40:18 105

转载 聊聊接口优化的几个方法

2、业务逻辑复杂3、线程池设计不合理4、锁设计不合理5、机器问题(fullGC,机器重启,线程打满)所谓的深度分页问题,涉及到mysql分页的原理。通常情况下,mysql的分页是这样写的:含义当然就是从student表里查100到120这20条数据,mysql会把前120条数据都查出来,抛弃前100条,返回20条。当分页所以深度不大的时候当然没问题,随着分页的深入,sql可能会变成这样:这个时候,mysql会查出来1000020条数据,抛弃1000000条,如此大的数据量,速度一定快不起来。那如何解

2022-07-02 13:21:02 92

转载 生成订单30分钟未支付,则自动取消,该怎么实现?

在开发中,往往会遇到一些关于延时任务的需求。例如对上述的任务,我们给一个专业的名字来形容,那就是延时任务。那么这里就会产生一个问题,这个延时任务和定时任务的区别究竟在哪里呢?一共有如下几点区别:下面,我们以判断订单是否超时为例,进行方案分析。方案分析思路该方案通常是在小型项目中使用,即通过一个线程定时的去扫描数据库,通过订单时间来判断是否有超时的订单,然后进行update或delete等操作实现博主当年早期是用quartz来实现的(实习那会的事),简单介绍一下maven项目引入一个依赖如下所示调

2022-06-20 22:40:00 332

原创 观察者模式Spring之publishEvent事件处理

一、使用场景这个一般什么时候使用,我们一般是在不同的bean直接进行信息传递,比如我们beanA的事件处理完后,需要beanB进行处理一些业务逻辑的时候这种情况就一般可以使用publish-event解决。二、原理ApplicationContext中的事件处理是通过ApplicationEvent类和ApplicationListener接口来提供的,通过ApplicationContext的publishEvent()方法发布到ApplicationListener;。一个事件模型有三个组成部分

2022-05-19 22:03:15 2112

原创 Lombok 妙用之@RequiredArgsConstructo注解

@RequiredArgsConstructo注解一、@Autowired二、@Resource三、Lombok提供的@RequiredArgsConstructor注解丢掉 @Autowired,@Resource 让代码更简洁!一、@AutowiredSpring提供的注解,默认的注入方式为 byType ,也就是根据类型匹配,当有多个实现时,则通过 byName 注入,也可以通过配合@Qualifier注解来显式指定name值,指明要使用哪个具体的实现类。二、@ResourceJava JS

2022-05-10 15:48:16 1015

原创 SpringBoot利用AOP记录系统日志

利用Spring框架中aop,我们可以实现业务代码与系统级服务进行解耦,例如日志记录、事务及其他安全业务等,可以使得我们的工程更加容易维护、优雅。一、添加依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency>二、自定义注解@T

2022-05-07 19:15:00 2735

原创 解决SpringBoot @Value注解静态属性无法注入问题

解决@Value注解静态属性无法注入问题解决方案一:使用 set 方法解决方案二:使用 @PostConstruct 方法最近在项目中遇到一个问题:在给static修饰的变量做@Value注入时,发现变量值为null,发现@Value只能给普通变量做值注入,无法为static属性赋值。@Data@Componentpublic class ApiConfig { @Value("${openapi.appKey:test21c454457f28a2c31}") private St

2022-05-06 23:15:00 714

原创 MySQL乐观锁解决库存超卖问题

在通过多线程来解决高并发的问题上,线程安全往往是最先需要考虑的问题,其次才是性能。库存超卖问题是有很多种技术解决方案的,比如悲观锁,分布式锁,乐观锁,队列串行化,Redis原子操作等。本篇通过MySQL乐观锁来演示基本实现。一、Goods和Order@Datapublic class Goods { private int id; private String name; private int stock; private int version;}@Data

2022-04-21 20:45:00 1767

原创 基于Springboot+Dubbo+Nacos 注解方式实现微服务调用

基于Springboot+Dubbo+Nacos 注解方式实现微服务调用一、项目结构二、spring-boot-dubbo-base工程三、spring-boot-dubbo-consumer工程四、spring-boot-dubbo-provider工程五、顺序启动ProviderApplication、ConsumerApplication发现服务已经注册到nacos一、项目结构源码下载启动nacos服务二、spring-boot-dubbo-base工程1、pom.xml<dep

2022-04-20 20:15:00 850

转载 责任链模式样例(基于SpringBoot)

责任链模式,简而言之,就是将多个操作组装成一条链路进行处理。请求在链路上传递,链路上的每一个节点就是一个处理器,每个处理器都可以对请求进行处理,或者传递给链路上的下一个处理器处理。一、AbstractCheckHandler抽象类处理器/** * 抽象类处理器 */@Componentpublic abstract class AbstractCheckHandler { /** * 当前处理器持有下一个处理器的引用 */ @Getter @Sett

2022-04-14 22:21:35 2107 2

原创 Excel导入校验字段及其优化

一、产品需求:1:excel数据模板下载2:excel数据导入3:导入得时候根据模板得校验规则来进行筛选,导入成功得返回成功列表,数据有问题得返回失败列表,失败列表支持数据编辑修正看到需求第一眼可能就是第三列有点难度,我们知道,传统得数据校验是在DTO上面加注解//第一种public Result test1(@RequestBody @Validated TestDTO dto) {...}//第二种public Result test2(@RequestBody @Valid Tes

2022-04-06 22:15:00 2033

原创 【基于SpringBoot和Mybatis-Plus的关联表关联关系保存和修改】

本项目是个微服务项目,采用前后端分离方式进行协作开发。需求描述:表A和和表B通过equity_id进行关联,其中A->B是一对多关系。对此关联关系保证可编辑和新增。整体思路:新增时候直接双向绑定,修改时候先根据id全部删除,再新增关联关系。特此设计整理如下:一、权益表结构和权益实体类1.equity_limit_buy_setCREATE TABLE `equity_limit_buy_set` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMEN

2022-04-03 16:55:04 351

原创 Spring Boot + Redission实战 -> 实现分布式锁

Redission实现分布式锁1.添加Redission依赖2.自定义注解类型实现分布式锁:@Lock3.分布式锁切面:LockAspect4.任务推送执行器TaskPushExecutor5.查询执行日志状况需求场景:执行推送任务,保证每个任务只推送一次。处理流程:将需要幂等性的接口加上自定义注解。然后编写一个切面,在Around方法里逻辑:尝试获取分布式锁(带过期时间),成功表明没重复提交,否则就是重复提交了。具体的redis已经配置在了nacos中,这里不做赘述。1.添加Redission依赖

2022-02-23 21:15:00 600

原创 SpringCloud Alibaba--Sentinel哨兵使用

继续学习SpringCloud Alibaba的Sentinel,这里测试Nacos的config功能,首先启动nacos服务。启动sentinel-dashboard-1.8.3.jar服务java -jar sentinel-dashboard-1.8.3.jar一、创建cloudalibaba-sentinel-service8401工程pom.xml<!-- SpringCloud alibaba nacos --> <dependency&g

2022-02-19 16:26:48 649 2

原创 最近项目中的一次SQL查询数据缓慢优化的一点总结

当数据量增多之后,多表关联查询,又增加了模糊查询条件,导致查询缓慢,由于是微服务项目,服务之间调用超时,从而引起连接超时异常,导致服务不可用!一、优化方案1、将SQL拆分、分2次查询2、将两次查询的结果,重新进行封装组合原始SQL如下<select id="getUserGroupPage" resultType="com.xxx.service.api.response.CmsUserGroupResp"> select

2022-02-17 19:58:09 413

原创 SpringBoot2.x 全局事务配置

首先依旧还是在启动类上加上事务开启注解@EnableTransactionManagement如下@SpringBootApplication(scanBasePackages = "com.xxx")@MapperScan("com.xxx.service.db.repository")@EnableDiscoveryClient@EnableFeignClients@EnableTransactionManagementpublic class MthCmsServiceApplicati

2022-02-15 22:30:00 797

原创 SpringBoot中SpringContextHolder工具类使用

SpringContextHolder作用:以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext。SpringContextHolder@Componentpublic class SpringContextHolder implements ApplicationContextAware { /** * 以静态变量保存ApplicationContext,可在任意代码中取出Applicaiton

2022-02-15 20:45:00 1585

转载 写个日志请求切面,前后端甩锅更方便

一、切面介绍面向切面编程是一种编程范式,它作为OOP面向对象编程的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、权限控制、缓存控制、日志打印等等。AOP把软件的功能模块分为两个部分:核心关注点和横切关注点。业务处理的主要功能为核心关注点,而非核心、需要拓展的功能为横切关注点。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点进行分离,使用切面有以下好处:(1)集中处理某一关注点/横切逻辑(2)可以很方便的添加/删除关注点(3)侵入性少,增强代码可读性及可维护性因

2022-02-14 19:15:00 166

原创 SpringCloud Alibaba--Nacos配置中心使用

继续学习SpringCloud Alibaba的Nacos,这里测试Nacos的config功能,首先启动nacos服务。一、创建cloudalibaba-config-nacos-client3377工程1 yml配置文件application.yml、bootstrap.ymlspring: profiles: active: dev #表示开发环境server: port: 3377spring: application: name:

2022-02-13 15:00:55 255

原创 使用Spring的@Value和@ConfigurationProperties从Nacos或yml中获取值并自动刷新

这里以service项目调用xxl-job为例进行说明一、nacos配置server: port: 32031spring: application: name: t1 profiles: active: local cloud: nacos: config: prefix: t1 group: test namespace: YKF file-extension: properties

2022-02-10 23:00:00 3171

原创 Mybatis-Plus之多租户插件TenantLineInnerInterceptor及动态表名插件DynamicTableNameInnerInterceptor

一、多租户多租户技术(英语:multi-tenancy technology)或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。多租户技术可以实现多个租户之间共享系统实例,同时又可以实现租户的系统实例的个性化定制。通过使用多租户技术可以保证系统共性的部分被共享,个性的部分被单独隔离。通过在多个租户之间的资源复用,运营管理维护资源,有效节省开发应用的成本。多租户技术的实现重点,在于不同租户间应用程序环境的隔离(appli

2022-01-28 09:59:41 4659 4

原创 枚举类使用案例

一、ICmsCommonEnum公共接口/** * @description 通用枚举公共类 */public interface ICmsCommonEnum { /** * 统一定义基础code码 * @return */ String getCode();} 二、ErrorCodeEnum枚举类package com.meditrusthealth.mth.cms.service.api.enums;import lombok.A

2022-01-20 20:00:00 126

原创 Mybatis-Plus 乐观锁插件OptimisticLockerI及逻辑删除及防全局删除和更新

当要更新一条记录的时候,希望这条记录没有被别人更新乐观锁实现方式:1:取出记录时,获取当前 version2:更新时,带上这个 version 执行更新时, set version = newVersionwhere version = oldVersion 如果 version 不对,就更新失败一、乐观锁插件实现步骤:1、配置插件@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusIn

2022-01-14 23:00:00 413

原创 SpringCloud Alibaba--Nacos服务注册发现与负载均衡

书接上文,继续跟着周阳老师学习SpringCloud Alibaba的Nacos。首先启动nacos服务。一、Nacos服务提供者创建工程cloudalibaba-provider-payment90011.pom.xml <dependencies> <!-- SpringCloud alibaba nacos --> <dependency> <groupId>com.al

2022-01-09 14:07:27 436

原创 Mybatis-Plus实现分页查询功能Demo

一、Mybatis实现方式如下:@Datapublic class PagingResult<E> implements Serializable { private static final long serialVersionUID = -4925664861534366008L; private int count; private int current; private int pageSize; private List<E>

2022-01-07 19:45:00 486

原创 IDEA:合并开发分支到指定分支(测试/生产)

IDEA合并开发分支到指定分支(测试/生产)以前都是用小乌龟TortoiseGit,提交代码和解决冲突,自从用习惯了idea后,真香!

2021-12-23 09:41:56 1371 2

原创 SpringCloud H版系列12--Sleuth分布式跟踪

SpringCloud Sleuth一、Spring Cloud Sleuth1.1 Sleuth1.2 基本概念1.3 下载和启动二、项目实战2.1 对8001和80修改pom,引入zipkin依赖。2.2 依次启动7001、8001和80进行测试书接上文,继续跟着周阳老师学习SpringCloud的分布式跟踪框架Sleuth。一、Spring Cloud Sleuth1.1 SleuthSpring Cloud Sleuth为Spring Cloud实现了分布式跟踪,在分布式系统中提供追踪解决方

2021-12-04 22:45:28 1224

原创 SpringCloud H版系列11--Stream为微服务应用构建消息驱动能力

Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架。它可以基于 Spring Boot 来创建独立的、可用于生产的 Spring 应用程序。Spring Cloud Stream 为一些供应商的消息中间件产品提供了个性化的自动化配置实现,并引入了发布-订阅、消费组、分区这三个核心概念。

2021-12-01 15:41:31 334

原创 简单记录下前后端增删改查笔记

前后端增删改查笔记一、前端界面代码二、后端代码三、界面效果3.1查询3.2 添加3.3 修改3.4 删除一、前端界面代码主页面<script>var ctx = "${pageContext.request.contextPath}";</script><div style="display:none"><span id="ImportCustomer" style="background:#353737;color: #FFFFFF;display:

2021-11-23 22:00:00 665

转载 JVM几种回收算法 CMS与G1的区别

JVM几种回收算法 CMS与G1的区别一、JVM回收算法二、CMS和G1的区别一、JVM回收算法Java应用程序不用程序员手动管理内存中的垃圾回收,是因为JVM有专门的垃圾回收线程做这件事。当内存不够用时,会自动触发回收。为了在效率和内存碎片之间均衡,衍生出了一系列的垃圾回收算法。1.标记–清除算法执行步骤:标记:遍历整个内存区域,对需要回收的对象打上标记。清除:再次遍历内存,对标记过的内存进行回收。图解:缺点:效率问题;遍历了两次内存空间(第一次标记,第二次清除)。空间问题:容易产

2021-11-17 19:15:00 370

原创 SpringBoot中使用异步方法优化Service逻辑,提高接口响应速度

这里写目录标题一、异步二、SpringBoot中的异步方法三、自定义线程池执行异步方法四、捕获(无返回值的)异步方法中的异常五、获取(有返回值)异步方法的返回值六、项目整体结构和代码一、异步异步方法适用于逻辑与逻辑之间可以相互分割互不影响的业务中, 如生成验证码和发送验证码组成的业务, 其实无需等到真正发送成功验证码才对客户端进行响应, 可以让短信发送这一耗时操作转为异步执行, 解耦耗时操作和核心业务。有个业务场景,业务数据审核通过后需要给用户发短信,发短信过程比较耗时,可能需要几秒甚至十几秒,因此使

2021-11-14 22:47:43 433

dubbo-admin-2.5.7.war.7z

dubbo-admin监控工程

2021-07-29

dubbotest1-master.7z

springboot整合dubbo+zookeeper https://blog.csdn.net/wangzibai/article/details/100106261

2021-07-29

dubbo-admin-2.5.4.war.7z

web页面服务查看,下载dubbo-admin监控工程,将war包解压后放入tomcat的webapps目录下,将\webapps\dubbo-admin-2.5.4\WEB-INF\dubbo.properties修改成自己的zookeeper地址即可

2021-07-29

Linux中安装Oracle12c介质.docx

Linux环境中安装Oracle12C介质操作手册,详细记载了安装过程以及安装问题。利用Xmanager的Xstart启动图形化安装界面进行安装,清晰明了,操作简单,本人亲测可行!

2020-08-03

springboot.7z

SpringBoot整合Mybatis完整详细版,通过连接MySQL,实现增删改查功能。例子比较简单是非常适合入门练手。项目启动之后,直接在浏览器输入访问地址即可。

2020-07-18

springboottest1.7z

SpringBoot整合Mybatis完整详细版,通过连接MySQL,实现增删改查功能。例子比较简单是非常适合入门练手。项目启动之后,直接在浏览器http://localhost:8086/testBoot/getUser/2即可

2020-07-17

SpringShiroDemo.7z

SpringMVC与Shiro整合,实现登录授权功能。通过使用账号admin和密码admin登录进入,否则需要登录才能访问。登录链接地址:http://localhost:8080/ShiroDemo/login.jsp

2020-06-04

基于MapReduce的Apriori算法并行化改进

基于MapReduce的Apriori算法并行化改进,包含改进思路与代码实现。该文档提供了详细的设计思路和方法,具有一定的借鉴意义,互相学习,互相进步!

2017-11-08

基于MapReduce的Apriori算法

基于MapReduce的Apriori算法,关联规则并行化思路与解决方案。该方法具有一定的借鉴意义,可以用来进行学术研究。

2017-11-08

zookeeper安装配置

zookeeper安装配置,步骤明确而详细。此文档为培训班内部培训资料!

2017-11-08

详细配置Hbase

hbase资料整理PPT,资料详细。为内部培训课程PPT,请勿转载!

2017-11-08

WebService配置

WebService配置详细配置步骤。按照操作文档提示步骤,配置webservice接口,欢迎指正,亲测可行!

2017-11-08

基于MapReduce的Apriori算法代码及其使用

基于MapReduce的Apriori算法代码及其使用,内含源代码及其实现。数据集为http://fimi.ua.ac.be/data/

2017-11-08

基于MapReduce的Apriori算法代码

mapreduce实现apriori算法,亲测可行!需要自行下载数据集。数据集链接如下http://fimi.ua.ac.be/data/

2017-11-08

《机器学习实战》源代码

《机器学习实战》源代码

2017-06-29

数据挖掘经典算法

数据挖掘经典算法,详细介绍,原理剖析。

2017-06-29

前端打印插件

前端打印插件,简单易用

2017-06-29

Myeclipse-2014-破解文件

Myeclipse-2014-破解文件

2017-06-29

echarts.min.js

优秀的报表制作插件,美观而简洁

2017-06-29

bootstrap-3.3.7

一款非常优秀的前端插件

2017-06-29

python-2.7.10.amd64

python2.7

2016-07-10

cmiadapter

1111

2016-07-10

空空如也

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

TA关注的人

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