Spring异步任务和定时任务线程池
前言我们都知道在Spring中,想要启用异步任务和定时任务非常简单,只要在配置类或者启动类上添加@EnableAsync和@EnableScheduling,然后在对应方法上添加@Async和@Schedule即可。那么@Async和@Schedule默认是在什么线程池中运行的呢?默认的线程池是什么配置?如何修改其配置?如何自定义线程池? 异步任务执行器 TaskExecutor异步任务执行器的接口是 TaskExecutor 。 12345@FunctionalInterfacepublic interface TaskExecutor extends Executor { @Override void execute(Runnable task);} TaskExecutor 继承了 JDK 的 Executor(即平时经常使用的 ExecutorService 的父接口)。TaskExecutor 有很多实现类,Spring Boot默认提供的实现类是...
SpringCloud笔记
前言什么是SpringCloud?Spring Cloud 被称为构建分布式微服务系统的“全家桶”,它并不是某一门技术,而是一系列微服务解决方案或框架的有序集合。它将市面上成熟的、经过验证的微服务框架整合起来,并通过 Spring Boot 的思想进行再封装,屏蔽调其中复杂的配置和实现原理,最终为开发人员提供了一套简单易懂、易部署和易维护的分布式系统开发工具包。 虽然 Spring Cloud 提供了很强大的功能,但是并没有提供所有的实现。其中的部分中间件只提供了统一的抽象API。不同厂商结合自身中间件,提供了自己的 Spring Cloud 套件。例如 Spring Cloud Netflix 、Spring Cloud Alibaba。(Netflix由于开源策略的调整,部分组件已经开始停止维护,因此不再适用于长久使用) 不同SpringCloud套件的常用组件 Spring Cloud 官方 Spring Cloud Netflix Spring Cloud Alibaba 配置中心 Spring Cloud Config/Spring Cloud...
GithubActions进行CICD一键部署
基本概念Github Actions 是 Github 推出的持续集成工具 workflow: 一个 workflow 工作流就是一个完整的过程,每个workflow 包含一组 jobs任务。 job : jobs任务包含一个或多个job ,每个 job包含一系列的 steps 步骤。 step : 每个 step 步骤可以执行指令或者使用一个 action 动作。 action : 每个 action 动作就是一个通用的基本单元。 workflow 必须存储在项目根路径下的 .github/workflows 中,每个workflow对应一个具体的 .yml 文件 workflow 文件1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465# 工作流程的名字name: summerbot's CI/CD# 触发时机: push 到 main 分支on: push: ...
ElasticSearch笔记
ElasticSearch安装安装 ES下载压缩包 1wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.14.0-linux-x86_64.tar.gz 解压 1tar -zxvf elasticsearch-7.14.0-linux-x86_64.tar.gz 修改配置文件,开启远程访问 1234vim elasticsearch-7.14.0/config修改network.host: 0.0.0.0 由于 ElasticSearch 不能在 root 用户下启动,所以需要创建一个新用户: 12345useradd temppasswd tempsu temp 启动 ElasticSearch 123cd elasticsearch-7.14.0/bin./elasticsearch port: http 9200 tcp 9300 可能遇到的问题: 如果启动后 ES 被 killed ,可能是服务器内存不够,可以修改分配给 ES 的 JVM...
docker-compose部署SpringBoot项目
docker-compose部署SpringBoot项目简介docker-compose 是 Docker 官方的开源项目,主要用于实现对 Docker 容器集群的快速编排。 用户可以通过 docker-compose.yml 来定义一组相关联的容器作为一个项目(project) docker-compose的两个概念: 服务(service):应用的容器 项目(project):一组关联的服务组成,在 docker-compose.yml 中定义 安装下载最新版的docker-compose文件 (截止2022.1.28) 1sudo curl -L https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose *下载慢换国内源 DaoCloud | Docker 极速下载 1sudo curl -L...
Java反射
Java 反射反射介绍概念 反射机制允许程序在执行期间借助于 Reflection Api 获取任何类的内部信息(成员变量、构造器、成员方法等),并能直接操作任意对象的内部属性和方法。 当一个类被加载之后,就在堆内存的方法区中产生了一个相应的 Class 类型的对象(一个类只有一个Class对象),这个对象包含了完整的类的结构信息,可以通过这个对象看到类的结构。 加载到内存中的运行时类会缓存一段时间,在此时间之内,通过不同方式获取到的都是同一个运行时类。(即同一个Class类的对象) 反射相关类吧java.lang.Class:标识某个类加载后在堆中的对象 java.lang.reflect.Method:代表类的方法 java.lang.reflect.Field:代表类的成员变量 java.lang.reflect.Constructor:代表成员的构造方法 Class类 Class 类也是类,继承 Object 类 Class 类的实例不是 new 出来的,而是在类被加载时由系统创建的 对于某个类的 Class...
剑指Offer刷题记录
03 数组中重复的数字题目在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 12345class Solution { public int findRepeatNumber(int[] nums) { }} 题解基本思路初步想法是创建一个Set,然后遍历数组并把数字添加入Set,每次添加的时候如果数字已经存在,就返回该数字。 但是这样的话时间复杂度和空间复杂度太高了。 12345678910111213public class Solution { public int findRepeatNumber(int[] nums) { Set<Integer> set = new HashSet<Integer>(); int repeat = -1; for (int num : nums)...
SpringBoot自定义Controller参数解析器
SpringBoot自定义Controller参数解析器(HandlerMethodArgumentResolver)正文省略一万字( 参考: HandlerMethodArgumentResolver(一):Controller方法入参自动封装器(将参数parameter解析为值)【享学Spring MVC】 - 云+社区 - 腾讯云 (tencent.com) HandlerMethodArgumentResolver(二):Map参数类型和固定参数类型【享学Spring MVC】 - 云+社区 - 腾讯云 (tencent.com) HandlerMethodArgumentResolver(三):基于HttpMessageConverter消息转换器的参数处理器【享学Spring MVC】 - 云+社区 - 腾讯云 (tencent.com) HandlerMethodArgumentResolver(四):自定参数解析器处理特定应用场景,介绍PropertyNamingStrategy的使用【享学Spring MVC】 - 云+社区 - 腾讯云...
Java动态代理
动态代理实现: 1、JDK 动态代理 用 Java 反射包中的类和接口实现动态代理 2、CGLIB 动态代理 通过第三方库 CGLIB ,以继承类的方式实现动态代理 JDK 代理由于底层机制的缘故,被代理的目标类必须实现至少一个接口 创建被代理的目标类以及其实现的接口 创建 InvocationHandler 接口的实现类,在 invoke() 中完成要代理的功能 用 Proxy.newInstance() 动态地构造出代理对象 Hello (被代理的目标类实现的接口) 12345public interface Hello { void sayHello(); int plus(int a, int b);} HelloImpl (被代理的目标类) 123456789101112131415public class HelloImpl implements Hello { @Override public void sayHello() { ...
MySQL高级
逻辑架构 参考:MySQL逻辑架构 - 知乎 (zhihu.com) 连接层将MySQL服务层通过线程池和TCP连接池,与多个客户端连接。主要工作是:连接处理、授权认证、安全防护。 服务层服务层用于处理核心服务,如标准的SQL接口、查询解析、SQL优化和统计、全局的和引擎依赖的缓存与缓冲器等等。所有的与存储引擎无关的工作,如过程、函数等,都会在这一层来处理。在该层上,服务器会解析查询并创建相应的内部解析树,并对其完成优化,如确定查询表的顺序,是否利用索引等,最后生成相关的执行操作。 服务层可以细分为几个部分: SQL Interface: SQL接口 接收用户的SQL命令,并且返回用户需要查询的结果。比如SELECT … FROM就是调用SQL Interface MySQL支持DML(数据操作语言)、DDL(数据定义语言)、存储过程、视图、触发器、自定义函数等多种SQL语言接口 Parser: 解析器 在解析器中对 SQL...