1. Demo1.1 定义事件定义事件可以是一个简单的POJO对象
123456@Data@Builderpublic class AacopyTestEvent { private String name; private String description;}
1.2 编写监听事件处理类监听事件需要
在处理方法上添加@EventListener注解,
在方法入参里加上对应的事件对象
将方法所在类加入到spring容器
123456789@Componentpublic class AacopyTestEventListener { @EventListener public void handleAacopyTestEvent(AacopyTestEvent aacopyTestEvent) { System.out.println("接收到事件..."); System.out.println(aacopyTestEvent); }} ...
SpringEL实现规则表达式判断Spring 表达式语言(简称“SpEL”)是一种强大的表达式语言
123456public static void main(String[] args) { ExpressionParser parser = new SpelExpressionParser(); Expression exp = parser.parseExpression("'1 + 1 = ' + (1 + 1)"); String message = exp.getValue(String.class); System.out.println(message); //1 + 1 = 2}
项目中动态计算表达式值的过程
从页面上配置表单式,左值选择表单中的属性或者接口返回对象属性,中间选择比较符号,右值选择枚举或者输入字符串
使用时,生成完整表达式,并获取计算表达式需要的所有的数据
1(#fun1([formModules][MD_OC], "[status]==' ...
AOP面向切面编程
切面的逻辑和业务逻辑进行隔离,降低耦合度,提高代码可重用性
1. 动态代理AOP通过动态代理来实现,分为两种代理方式,(1)JDK动态代理,(2)CGLIB动态代理
1.1 JDK动态代理有接口通过JDK动态代理,通过实现接口来创建代理对象
1.2 demo
定义一个接口
1234public interface TestService { Integer add(String str); Boolean delete(String str);}
创建实现类
12345678910111213public class TestServiceImpl implements TestService { @Override public Integer add(String str) { System.out.println("执行add方法:" + str); return 1; } @Override public Boolea ...
IOC:控制反转,将创建对象的操作交给Spring处理,要使用某个对象,只需要从Spring容器中获取,主要目的是为了降低耦合
1. 示例
创建一个maven项目
在pom文件中引入spring的依赖spring-context,context依赖了spring的4大核心包,spring-core,spring-beans,spring-core,spring-expression
12345<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.22</version></dependency>
编写一个类Hello
1234567891011package cn.aacopy.learn.spring;/** * @author cmyang * @date 2022/9/9 0:14 */public class ...
Java支持三种网络IO模型:BIO,NIO,AIO
BIO
同步阻塞
一个连接一个线程
场景:适用于连接数量比较小且固定的架构,JDK1.4以前只有BIO
编程:
123456789101112131415161718192021222324252627public static void main(String[] args) throws IOException { ExecutorService executorService = Executors.newCachedThreadPool(); ServerSocket serverSocket = new ServerSocket(9999); while (true) { Socket socket = serverSocket.accept(); System.out.println("客户端已连接..."); executorService.execute(() -> & ...
1. 简介XXL-Job是一个分布式任务调度平台
官方网站:https://www.xuxueli.com/xxl-job/
2. 设计思想
将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。
将任务抽象成分散的JobHandler,交由“执行器”统一管理
“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。
“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性
3. 下载源码版本2.3.0:https://github.com/xuxueli/xxl-job/tree/2.3.0
目录介绍
doc:xxl-job的文档资料,包括了数据库的脚本
xxl-job-core:公共jar包依赖
xxl-job-admin:调度中心
xxl-job-executor-samples:执行器
数据库表
xxl_job_group:执行器信息表,用于维护任务执行器的信息
xxl_job_info:调度扩展信息表,主要是用于保存xxl-job的调度任务的扩展信息,比如说像任务分组、任务名、机器的地址等等
xxl_j ...
1. 安装1.1 前置安装ES1234567891011mkdir -p /home/dockerdata/elasticsearch/configmkdir -p /home/dockerdata/elasticsearch/datachmod 777 -R /home/dockerdata/elasticsearchecho "http.host: 0.0.0.0" >> /home/dockerdata/elasticsearch/config/elasticsearch.ymldocker run -d --name elasticsearch --privileged=true -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms1024m -Xmx1024m" \ -v /dockerData/elasticsearch/config/elasticsearch.yml:/usr/sh ...
1. 简介2. 安装2.1 下载文件下载文件
https://git-scm.com/download/linux
2.2 安装
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install gcc perl-ExtUtils-MakeMaker
rz 上传至/usr/local/git/目录下
tar -zxvf git-2.43.0.tar.gz 解压缩
cd git-2.43.0 进入目录
./configure --prefix=/usr/local/git/git-2.43.0 预编译
make && make install 编译并安装
ln -s /usr/local/git/git-2.43.0/bin/* /usr/bin/ 将git命令软连接到/usr/bin目录下
2.3 测试git --help
2.4 配置
git config --global user.email "969312613@q ...
设计模式是对软件设计过程中普遍存在(反复出现)的各种问题,所提出的解决方案
优点:设计模式可以让程序在以下方面做的更好
代码重用性
代码可读性
可扩展性
可靠性
使程序具有高内聚,低耦合和特性
七大原则要是设计具备以上有点,需要具备七大原则
单一职责原则
接口隔离原则
依赖倒转原则
里氏替换原则
开闭原则
迪米特法则
合成复用原则
单一职责原则一个类应该只负责一个职责
降低类的复杂度,一个类只负责一项职责
提高类的可读性,可维护性
降低变更引起的风险
接口隔离原则一个类与另外一个类的依赖应该建立在最小的接口
依赖倒转原则
高层模块不应该依赖底层模块
抽象不应该依赖细节,细节应该依赖抽象
中心思想是面向接口编程
抽象是指接口和抽象类,细节指实现类
接口和抽象的目的是定制好规范
实现方式
通过接口作为参数实现依赖
通过构造器参数
通过setter方法
里氏替换原则
在使用继承时,子类尽量不要重写父类的方法
继承实际上增加了类的耦合性,在适当的情况下可以通过聚合,组合,依赖来解决问题
开闭原则
类,方法,或者实体,应该对提供方扩展开放,对使用方修改关闭,用抽象构建框架 ...
openFeign向下传递请求头OpenFeign在微服务间的调用向下传递请求头
思路:把请求头放在ThreadLocal里,feign调用时,把请求头取出来再传递给下个服务
方案:实现RequestInterceptor接口,该接口的作用是在feign调用时,给请求添加头信息
123456789101112131415161718@Componentpublic class FeignRequestInterceptor implements RequestInterceptor { @Override public void apply(RequestTemplate template) { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); ...