自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(157)
  • 资源 (7)
  • 收藏
  • 关注

原创 quartz任务类自动依赖注入

/*** 发送消息到当前请求用户* @param principal 身份标识* @param message 接收的消息体* @return 发送到当前请求用户的消息*/@MessageMapping({"/app-test/user"})@SendToUser(value = “/ping”, broadcast = false)public GreetingResponse queue(Principal principal, String message) {log.info(“来

2021-03-26 13:23:17 35

原创 redis同时设置key和过期时间实现分布式锁

/*** 用来处理消息*/static class AppStompFrameHandler implements StompFrameHandler { @Override public Type getPayloadType(StompHeaders headers) { return GreetingResponse.class; } @Override public void handleFrame(StompHeaders heade

2021-03-24 12:14:38 104

原创 TCC-transaction源码(三):示例工程介绍

示例项目地址:https://github.com/changmingxie/tcc-transaction/tree/master-1.2.x/tcc-transaction-tutorial-sample一. 示例项目源码中各个类之间交互时序图二. 示例项目泳道流程图异常交易流程:正常交易流程:三. 示例项目主流程图...

2020-11-16 14:22:58 47

原创 调试dubbo-3.服务引用

/** * 通过websocket广播消息,发给所有定阅用户 * * @param subsAdd 用户的定阅地址 * @param msg 发送的内容,Json字符串格式 */public void broadCast(String subsAdd, Object msg) { messagingTemplate.convertAndSend(subsAdd, msg); log.info("BroadCast through webSocket successfull

2020-10-15 19:28:51 36

原创 调试dubbo-2.服务导出

使用SimpMessagingTemplate发送消息public class WebSocketHelperImpl { @Autowired private SimpMessagingTemplate messagingTemplate; /** * 通过websocket点对点发送单一定阅用户 * * @param subsAdd 用户的定阅地址,不需要拼接前缀和用户id * @param msg 发送的内容,Json字符串

2020-10-15 19:28:16 57

原创 调试dubbo-1

spring启动解析dubbo的bean定义​ 在dubbo-config-spring 的resources/META-INF/spring.handlers文件中,指定了dubbo的配置解析器, 用来解析dubbo配置文件中的那些标签。key是spring配置文件中的schemaLocation指定的,value是解析器类,一一对应。​ spring容器启动阶段加载配置文件中bean定义的时候(org.springframework.beans.factory.xml.BeanDefinitio..

2020-10-15 19:27:36 46

原创 arthas选择pid报错、端口占用报错

方便部分朋友上github不方便,我来搬运一下:报错如下:[ERROR] Can not read maven-metadata.xml from: https://maven.aliyun.com/repository/public/com/taobao/arthas/arthas-packaging/maven-metadata.xml[ERROR] Can not find Arthas under local: /root/.arthas/lib and remote: aliyun官方

2020-08-26 16:28:03 1295

原创 记录springBoot使用SOCKJS+STOMP长连接

概览WebSocketWebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。WebSocket 面临的问题某些浏览器中缺乏对 WebSocket 的支持。支持 WebSocket 的第一个 Internet Explorer version 是 version 10(请参阅http://caniuse.com/websockets以获得浏

2020-08-22 00:24:12 667 3

原创 记录logback + ELK日志

logback + ELK日志安装es略安装logstashhttps://www.elastic.co/guide/en/logstash/current/index.html新建一个简单的配置文件,只设置logstash的输入和输出,输入为tcp监听的端口,输出为esinput { tcp { host => "10.1.1.1" port => 4567 mode => "server" code

2020-08-21 23:52:04 60

原创 logstash收不到logback发送的日志

allDelayCancelExceptions.addAll(Arrays.asList(compensableMethodContext.getAnnotation().delayCancelExceptions()));try { // 开启一个事务 transaction = transactionManager.begin(compensableMethodContext.getUniqueIdentity()); try { // 真正执行业务方法

2020-08-21 23:50:10 422 1

原创 TCC-transaction源码(二):事务恢复

一、为什么需要恢复任务为了处理异常。在TCC事务下,假如A服务调用B服务,B服务超过事务恢复的时间还没有返回,就要取消事务,进行回滚操作,不能让事务一直这么挂着不结束。或者还没等B结果返回A服务就挂了,重启A服务后的遗留事务需要恢复。或者是B返回成功/失败后,A服务执行二阶段的确认提交/回滚事务的方法时候失败了,如果没有异常处理,A的资源便无法释放,事务无法结束。二、恢复任务初始化类public class RecoverScheduledJob { private TransactionR

2020-08-04 01:11:10 69

原创 TCC-transaction源码(一):Compensable注解和事务拦截器

一 、Compensable注解的两个切面@Pointcut("@annotation(org.mengyun.tcctransaction.api.Compensable)")org.mengyun.tcctransaction.spring.ConfigurableTransactionAspect顺序 Ordered.HIGHEST_PRECEDENCE;org.mengyun.tcctransaction.interceptor.ResourceCoordinatorAspect

2020-07-30 23:44:50 359

原创 mybatis框架order by作为参数传入时失效小坑

mxl中的语句如下<select id="statToday" resultType="com.dahua.la.business.model.vo.StatSysResultVO"> select a, b, count(1) as total from table where a is not null and b is not null and operateTime >= #{

2020-07-20 22:48:56 153

原创 Caused by: org.apache.ibatis.reflection.ReflectionException: Could not set property ‘id‘ of ‘class

问题描述Caused by: org.apache.ibatis.reflection.ReflectionException: Could not set property ‘id’ of ‘class XXX’ with value ‘XXX’ Cause: java.lang.IllegalArgumentException: argument type mismatch这是mybatis保存数据时报的一个错,跟着源码找了一下原因。如下:因为mybatis的全局配置com.baomidou.my

2020-07-18 08:53:20 380

翻译 RabbitMQ文档翻译七(JAVA).发送者确认

LongEventProducer producer = new LongEventProducer(ringBuffer); ByteBuffer bb = ByteBuffer.allocate(8); for (long l = 0; true; l++) { bb.putLong(0, l); producer.onData(bb); Thread.sleep(1000); }}}### 使用Java...

2020-07-02 23:13:55 121

翻译 RabbitMQ文档翻译六(JAVA).远程过程调用(RPC)

import com.lmax.disruptor.dsl.Disruptor;import com.lmax.disruptor.RingBuffer;import com.lmax.disruptor.util.DaemonThreadFactory;import java.nio.ByteBuffer;public class LongEventMain{ public static void main(String[] args) throws Exception {

2020-07-02 23:11:21 63

翻译 RabbitMQ文档翻译五(JAVA).主题

显而易见的是,事件发布比使用简单队列更加复杂。这是由于对事件预分配的期望。它需要(在最低级别)一个两阶段的消息发布方法,即声明环缓冲区中的插槽,然后发布可用的数据。还需要将发布包装在try/finally块中。如果我们在环缓冲区中声明一个槽(调用RingBuffer.next())然后我们必须发布此序列。否则会导致Disruptor的状态破坏。具体来说,在多生产商的情况下,这将导致消费者停滞,如果不重新启动就无法恢复。因此,建议使用EventTranslator API。最后一步是把所有部分组装起来。手动

2020-07-02 23:08:03 63

翻译 RabbitMQ文档翻译四(JAVA).路由

这种方法的另一个优点是,转换器Translators可以被拉到一个单独的类中,并且很容易独立地进行单元测试。Disruptor提供了许多不同的接口(EventTranslator、eventtranslatoronerg、EventTranslatorTwoArg等),可以实现这些接口来提供转换器。允许将转换器表示为静态类或lambda表达式形式,原因是这两种形式可以作为参数通过对环形缓冲区的调用传递到转换器。使用旧版本API发布事件我们可以使用一种更“原始”的方法。import com.lmax.d

2020-07-02 23:05:24 63

翻译 RabbitMQ文档翻译三(JAVA).发布/订阅

使用转换器发布事件在Disruptor的3.0版本中,添加了一个更丰富的Lambda样式的API,来帮助开发人员将这种复杂性封装在环形缓冲区ring buffer中,因此在3.0之后,发布消息的首选方法是通过API的事件发布器/事件转换器部分。例如。import com.lmax.disruptor.RingBuffer;import com.lmax.disruptor.EventTranslatorOneArg;public class LongEventProducerWithTransla

2020-07-02 23:01:56 73

翻译 RabbitMQ文档翻译二(JAVA).工作队列

工作队列在第一个教程中,我们编写了从命名队列发送和接收消息的程序。在本例中,我们将创建一个工作队列,用于在多个工作人员之间分配耗时的任务。工作队列(又名:任务队列)的主要思想是避免立即执行资源密集型任务,并且必须等待任务完成。相反,我们把任务安排在以后完成。我们将任务封装为消息并将其发送到队列。在后台运行的工作进程将从队列弹出(pop操作)任务并最终执行该作业。当您运行多个worker时,任务将在他们之间共享。这个概念在web应用程序中特别有用,因为在短的HTTP请求窗口期间无法处理复杂的任务。准

2020-07-02 22:57:53 58

翻译 RabbitMQ文档翻译一(JAVA).Hello World!

RabbitMQ是一个消息代理:它接受和转发消息。你可以把它想象成一个邮局:当你把你想寄出的邮件放进一个邮箱里时,你可以确信邮件的收件人最终会收到邮件。类似的,RabbitMQ是一个邮箱、一个邮局和一个邮递员。RabbitMQ与邮局的主要区别在于,它不处理纸张信件,而是接受、存储和转发二进制的数据信息块。RabbitMQ和消息传递通常使用一些行业术语生产只意味着发送。发送消息的程序是生产者:queue是RabbitMQ中的邮箱的名称。尽管消息流经RabbitMQ和您的应用程序,但它们只能存

2020-07-02 22:52:32 92

原创 logback读取spring的属性实现不同环境的日志灵活配置

第一种使用形式——加载指定的配置模块 中的name,读取的是spring.profiles.active配置项的值,不设置默认为default。spring.profiles.active配置项可以配置在application.properties(application.yml)中,此时就是读取的spring配置文件。也可以在jvm参数中设置,-Dspring.profiles.active=dev.如下两条的意思是,当spring.profiles.active配置为dev的时候,包裹在其中的部

2020-06-29 23:16:57 1542

原创 通过redisson源码看看它实现的分布式锁

redisson实现分布式锁,是通过一个hash结构存储的,形式如下:MY_LOCK 3444e697-8ab7-43ba-bfb5-28a38aeb1f02:1 1MY_LOCK 是我获取分布式锁的时候,通过redisson.getLock(“MY_LOCK”)定义的,它作为hash结构的key3444e697-8ab7-43ba-bfb5-28a38aeb1f02:1 作为hash结构的一个field,冒号后面的1是线程id。1 是field的值,作为当前线程重入锁的次数。每次

2020-06-13 18:58:37 319

翻译 distuptor概述中文文档

原文地址:https://github.com/LMAX-Exchange/disruptor/wiki/Getting-Started文章目录基本事件产生与消费基本事件产生与消费为了开始使用Disruptor,我们将考虑一个非常简单的自定义例子,一个将单个Long值从生产者传递给消费者的例子,消费者只需打印出值。首先我们要定义携带数据的事件。public class LongEvent{ private long value; public void set(long valu

2020-06-10 22:04:25 187

原创 params和multipartform-data两种类型的参数中有同名参数的解析问题

同时使用params和multipart/form-data两种参数类型不符合常规套路,一般不会这么做。最近有个老代码有这样的使用场景。在升级了spring和springBoot版本以后,以前能用的接口报错了。报错的内容就是参数解析不正常,这个参数在params和multipart/form-data中都有,并且名称相同,一个是字符串,一个是int,在Controller中使用int类型接收参数。报错String数组无法被转成int。记录一下调试结果无论什么版本的spring和springBoot,这两种

2020-06-05 21:21:21 309

原创 试一试Seata

安装Seata从https://github.com/seata/seata/releases下载最新版的安装包解压后的conf目录中的两个重要配置文件file.conf:配置存储方式、透传事务信息的NIO、事务组配置、锁配置等信息,file.conf.example文件中有可以参考的样例。这种文件形式的配置默认对应registry.conf文件内的file方式配置。registr...

2020-04-30 23:43:14 436

原创 动态规划+中心扩展重新理解寻找最长回文子串

问题描述https://leetcode-cn.com/problems/longest-palindromic-substring/动态规划的四个过程1.划分状态,即划分子问题。如果一个字符串是回文字符串,那么它肯定满足1.两端的两个字符相等 2.除去两端两个字符剩下的还是回文字符串。以此往字符串串中心位置类推都满足这个规律。那可以找任意一个字符作为中心点,从中心点开始向两边扩散,判断是否...

2020-04-29 21:58:10 114

原创 通过“不同路径”问题思考动态规划

问题描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/unique-paths例如,上图是一个7 x 3 的网格。有...

2020-04-27 18:41:49 133

原创 复现java.net.SocketException: Connection reset 的一种场景

最近项目中使用httpClient配置的RestTemplate,写了一个http请求工具,设置了连接池,SocketTimeOut等参数。但是在高频率的请求某个接口的时候,会报错提示java.net.SocketException: Connection reset, 后来找到原因是请求方式写错了,POST请求被我发成了GET. 但是出现这种问题会是什么原因呢。代码大致如下:private...

2019-10-31 23:55:12 1325

原创 Aop使用args切点的一个错误:No visible constructors in class *

springAop使用args切点的一个错误:No visible constructors in class org.springframework.boot.context.properties.ConversionServiceDeducer$Factory问题:在使用args形式的aop的时候,程序跑不起来,报错如上,我当时的代码大概是这么写的@Aspect@Componentp...

2019-10-31 22:20:11 1145

原创 appassembler-maven-plugin插件打包的时候如何把本地依赖的jar包打进去

有时候maven仓库没有的jar包,我们需要从本地址指定文件路径并且指定scope为system来引入依赖。默认的,assemble插件是不会把本地依赖的jar包打包进去的。 <dependency> <groupId>*</groupId> <artifactId>*</artifactId>...

2019-08-27 08:13:35 1634

原创 java线程安全的高效计数--LongAddr原理分析

之前遇到一个问题,写一个线程安全的高效计数。题目就这一句话,通过对这个问题的思考展开本篇。一 、初步想法synchronized控制变量的修改加锁的方式会阻塞线程,线程需要被唤醒,这涉及到了线程的状态的改变,需要上下文切换,所以是比较重量级的,-- 可以用但是低效。volatile修饰计数变量volatile只能保证多线程的内存可见性,不能保证多线程的执行有序性。而最基本的同步要...

2019-08-17 15:22:15 1166

原创 单线程的redis如何处理阻塞命令

今天有个问题,既然redis是单线程的,那么像 BLPOP这种的阻塞命令不会一直占用着线程,其他命令无法执行吗?然而事实上是可以执行的。BLPOP key1 [key2 ] timeout 移出并获取列表的第一个元素,如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止而且redis的线程模型,是 I/O 多路复用,通过文件事件分配器单线程执行的。如下图,程序总是会将所有...

2019-08-06 14:35:29 3788

原创 SpringBoot-AOP源码梳理

SpringBoot-AOP源码梳理1. @EnableAspectJAutoProxy 注解做了什么?在springboot中,@EnableAspectJAutoProxy 注解开启AOP , 在这个注解里面,通过@Import 给容器中导入AspectJAutoProxyRegistrar 对象.@Import(AspectJAutoProxyRegistrar.class)publ...

2019-08-04 20:25:01 341

原创 IDEA 问题 following errors occurred on attempt to save files

刚才遇到这个问题,文件修改完以后不能保存(IDEA设置的默认保存时间是空闲后15秒),并且产生了两个临时文件,分别以__jb_old__ 和 jb_tmp 结尾。有人说法是修改setting -> System settings -> Use “safe write” (save changes to a temporary file first), 去掉这个前面复选框的勾选。但是去...

2019-07-31 10:52:31 2562 2

原创 Springboot 启动流程源码主流程分析

Springboot 启动流程源码主流程分析一 、 前半部分new SpringApplication(primarySources)public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) { this.resourceLoader = resourceLoader...

2019-07-15 23:14:41 104

原创 万万没想到之抓捕孔连顺问题的一些思考

我叫王大锤,是一名特工。我刚刚接到任务:在字节跳动大街进行埋伏,抓捕恐怖分子孔连顺。和我一起行动的还有另外两名特工,我提议我们在字节跳动大街的N个建筑中选定3个埋伏地点。为了相互照应,我们决定相距最远的两名特工间的距离不超过D。我特喵是个天才! 经过精密的计算,我们从X种可行的埋伏方案中选择了一种。这个方案万无一失,颤抖吧,孔连顺!……万万没想到,计划还是失败了,孔连顺化妆成小龙女,混在cos...

2019-07-04 10:57:16 1689 2

原创 新闻盖楼问题数据库表设计的一些思考

问题现象一个新闻下面可以有评论,其他人可以对评论进行回复,还可以对回复进行回复。例如但是对回复的回复一般无论回复多少层,都是并列显示的,只不过引用被回复的内容。这种结构不完全是树形结构,基本上只有上下两级,一级评论,二级回复。(例如有时候我们会看到一条对评论的回复,但是下面引用的内容显示该评论已删除),这种情况不,对于一级评论,删除的时候,下面的回复是级联删除的,但是对于二级评论,只删除当前...

2019-07-03 17:32:25 562 1

原创 elasticsearch使用中文分词器和拼音分词器,自定义分词器

elasticsearch使用中文分词器和拼音分词器,自定义分词器1. 到github 下载分词器上面有已经编译好打好的包。下载后在es安装目录下的plugins/目录下创建ik和pinyin两个文件夹,把下载好的zip包解压在里面。重启es就会生效了。github上readme.txt文件里有使用说明。注意下载的时候下载版本对应的,比如我的es版本是5.6.16,下载分词器的时候也要下载这个...

2019-07-02 00:59:25 3545 1

原创 springboot整合elasticsearch

我的ElasticSearch 版本是5.6.16一. pom依赖鉴于可能有版本冲突问题,我全贴上来。<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins...

2019-06-29 00:59:06 87

spring + redis使用@Cacheable,@CachePut,@CacheEvict

spring + redis使用@Cacheable,@CachePut,@CacheEvict详细步骤

2018-05-18

mybatis-plugin

mybatis-plugin插件,idea2018版本亲测可用。资源与大家分享,同时提倡有钱的支持正版,尊重产权。

2018-05-29

springmvc拦截器实现登录验证

springmvc拦截器实现登录验证

2017-05-15

springMVC整合hibernate的校验Validation

springMVC整合hibernate的校验Validation, 简单明了。

2017-12-26

SpringMvc单元测试Junit

一个简洁的SrpingMvc的Demo, 包含基于Junit的单元测试。

2017-05-08

windows编程计算器

VC++编程计算器,MFC, #include "stdafx.h" #include "计算器2.h" #include "M_GN.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif

2013-12-04

ActiveMQ整合Spirng的一个demo

ActiveMQ整合Spirng的一个demo

2017-08-20

空空如也

空空如也

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

TA关注的人 TA的粉丝

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