- 博客(6)
- 收藏
- 关注
原创 SpringBoot启动Debug笔记二 ———— 准备环境
先来代码:public ConfigurableApplicationContext run(String... args) { // 初始并启动StopWatch,用来监控运行时间等,不重要,暂时略过。 StopWatch stopWatch = new StopWatch(); stopWatch.start(); // 该接口为配置应用上下文(ApplicationContext)提供方法 ConfigurableApplicationContext context = nu
2021-07-21 09:50:25 361
原创 SpringBoot启动Debug笔记一 ———— 启动监听器
前言从主启动类开始,进入下面这段代码:所以这篇文章的主要部分就是这个红色框的部分。一、EventPublishingRunListener.starting() @Override public void starting() { this.initialMulticaster.multicastEvent(new ApplicationStartingEvent(this.application, this.args)); }此方法通过SimpleApplicationEventMu
2021-07-12 11:39:37 291
原创 RabbitMQ如何保证消息不丢失
RabbitMQ如何保证消息不丢失(一)(一)开篇(二)信道的 Confirm 确认模式(三)定义生产者(四)保存失败消息的数据结构(五)MQ消息服务(六)定义消息重新发送任务(七)使用Spring和线程池共同组织消息发送线程(八)总结(一)开篇保证消息不丢失,可以从三个方面来做处理:(1)生产者方面;(2)MQ本身;(3)消费者方面。今天先从生产者角度开始。本工程实例的背景是springboot整合rabbitMQ。(二)信道的 Confirm 确认模式默认情况下,生产者和 Rabbit
2021-05-12 18:28:13 307
原创 自定义线程池之ThreadPoolExecutor的使用
了解原因在阿里规约里面,有这样一条规则:这里提到了使用ThreadPoolExecutor来创建线程池,其实这就是我们常常听说的“自定义线程池”。该类位于java的java.util.concurrent包下。至于使用自定义的好处,上面的图片已经可以说明,接下来我们从概念到实战,分析一下这个类。概念ThreadPoolExecutor类间接实现了ExecutorService接口。通常经使用Executors类的工厂方法设置后,它能够从一些可能池化管理的线程里面选择一个来执行每个已经提交的任务。
2021-04-02 16:00:42 496
原创 实现生产者-消费者模型的JDK中提供的7 个阻塞队列(我只是翻译了JDK源码的类头,没有做总结)
如何使用阻塞队列来实现生产者-消费者模型概述JDK提供的7 个阻塞队列ArrayBlockingQueue(数组阻塞队列)LinkedBlockingQueue(链表阻塞对列)如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入概述阻塞队列(BlockingQueue)是一
2021-03-08 17:04:50 849
原创 代码整洁之道——对象和数据结构
代码整洁之道——对象和数据结构对象和数据结构之间具有二分原理对象和数据结构之间具有二分原理,先看下面两个例子:上述两种定义的本质是截然对立的。过程式代码(使用数据结构的代码)便于在不改动既有数据结构的前提下添加新函数。面向对象代码便于在不改变既有函数前提下添加新类。反过来说:过程式代码难以添加新数据结构,因为必须修改所有函数。面向对象代码难以添加新函数,因为必须修改所有类。举个例子:假如,在6-5中,Square类的side域修改为String类型,将不得不对Geometry类中area
2020-08-18 10:13:46 176
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人