Untitled
前言
在 Window10 上安装 Linux 已经很方便了,下面简单记录一下安装 WSL2
安装
开启电脑的虚拟化支持
需要在 BIOS 中设置 vm 开启
开启 Win10 子系统
1 | dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart |
开启 Win10 虚拟化
1 | dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart |
下载 Linux Kernel
WSL2 Linux kernel update package for x64 machines
下载上面系统然后直接安装。
ARM64 版本点击这里下载 ARM64 package
把WSL2 设置为默认
1 | wsl --set-default-version 2 |
安装 Linux 系统
打开 Microsoft Store ,搜索想要安装的系统
下面一些系统链接
- Ubuntu 18.04 LTS
- Ubuntu 20.04 LTS
- openSUSE Leap 15.1
- SUSE Linux Enterprise Server 12 SP5
- SUSE Linux Enterprise Server 15 SP1
- Kali Linux
- Debian GNU/Linux
- Fedora Remix for WSL
- Pengwin
- Pengwin Enterprise
- Alpine WSL
我这里安装的 Kail Linux
运行安装的 Linux 系统
第一次运行会安装,有如下输出
1 | Installing, this may take a few minutes.. |
安装结束后需要配置名称
安装结束
安装 Window 终端
Windows终端支持多个选项卡(在多个Linux命令行、Windows命令提示符、PowerShell、Azure CLI等之间快速切换),创建自定义键绑定(打开或关闭选项卡的快捷键,复制粘贴等),使用搜索功能,和自定义主题(配色方案、字体样式和大小、背景图像/模糊/透明)。
Untitled
Java
下载:VSCode
下载插件:
1 | "java.configuration.runtimes": [ |
代码提示
SpringBoot支持
下载:
SQLTools支持
下载:
Markdown支持
下载:
HTML\CSS支持
下载:
自动补全:Auto Close Tag
同步修改闭合标签:Auto Rename Tag
路径提示:Path Intellisense
自动刷新:Live Server
ESLint
Debugger for Chrome
Git 增强
Vue
npm
PowerShell
下载:
主题
Docker
Angular Language Service
简体中文
Microsoft Edge Tools
Debugger for Firefox
IntelliJ IDEA Keybindings
Dart
ES7+ React/Redux/React-Native snippets
rest client
Untitled
Untitled
Untitled
Untitled
Untitled
MybatisPlus默认最大查询数据量
前言
背景
在持久层使用 MyBatisPlus 的项目开发过程中,开发人员会使用 list、selectList 等 MyBatisPlus 自带函数根据一定条件查询全表数据,由于代码的健壮性不强,部分查询条件不生效时 list、selectList 等函数的查询结果集合过大。
目的
限制 MyBatisPlus 非分页查询情况下查询的数据量,提高项目稳定性。
思路
- 对
MyBatisPlus中执行的非分页查询SQL进行拦截,添加默认最大查询数据量。 - 提供符合
MyBatisPlus规范的BigPage(允许自定义分页查询的最大数据量),供大数据量查询的业务。 MyBatisPlus分页查询,设置全局单页最大数据量。- 查询结果集合等于设置的最大数据量时,打印
warn级别的日志提醒或抛出异常(可配)。
限制
支持版本
MyBatisPlus 3.4.xMyBatisPlus 3.5.x
开发限制
- 必须使用
MyBatisPlus分页插件。 - 只能对
MyBatisPlus语法下的SQL进行拦截,比如Service函数、Mapper函数、动态SQL。(自定义实现的Mapper函数,暂不考虑兼容测试) - 自定义
SQL中的分页数据量不能控制(业务相关,不方便兼容)。 - 如果因为“程序错误”导致查询数据量过大的问题,比较难以排查。
自定义
SQL中的分页 与IPage一同使用会报错,MyBatisPlus认定为代码逻辑上的错误,这里不做处理。
数据库
兼容
DB2DmMySQL(已测试)Oracle12cOraclePostgreSQLServer
理论上兼容(未测试)
Gauss(Oracle)GBase(MySQL)H2(Postgre)HSQL(Postgre)Kingbase(Postgre)MariaDB(MySQL)Oscar(MySQL)Phoenixt(Postgre)SQLite(Postgre)XuGu(MySQL)
未兼容(不考虑实现)
SQLServer2005Sybase
实现
1、全表查询SQL限制最大查询数据量
配置最大查询数量
1 | maxzhao: |
自定义配置分页拦截器
自定义MyBatisPlus分页拦截器。
分页拦截器需要做的是在查询之前拦截并处理SQL:
1 | start=>start: 查询之前 |
分页参数:指的是主动设置的
IPage。
SQL中是否包含限制属性:指的是动态SQL中是否包含用于限制查询条数的关键字。
MyBatisPlus分页拦截器:是对MyBatis拦截器的一层封装。
注入分页
1 | /** |
2、BigPage实现
MyBatisPlus原分页实现类 com.baomidou.mybatisplus.extension.plugins.pagination.Page 没有 maxLimit 属性的默认值,但是我们可以通过继承 Page 来实现 BigPage,并且给与一个较大的默认值(100W),如果超过这个默认值,我们认为这个业务很可能存在问题(业务上真的超过100W数据量的限制,setMaxLimit就可以了)。
1 |
|
3、MyBatisPlus 分页查询,设置全局单页最大数据量。
配置单页最大数据量
1 | maxzhao: |
在 MybatisPlusInterceptor 注入分页拦截器时,设置分页拦截器的单页查询最大数据量。
4、查询数据量等于最大限制时的处理
目前有两种推荐的处理方式:
- 打印
warn级别的日志提醒。 - 抛出异常。
这两种实现方式可以动态配置。
需要重写 com.baomidou.mybatisplus.core.override.MybatisMapperMethod,暂时不做处理。
Log4j2对接Logstash
前言
Log4j2对接ELK
Log4j2使用Socket向logstash推送数据logstash经过过滤后,把数据保存到ElasticSearch中。log4j2使用socket推送日志到logstash
环境信息:
- 部署路径:
/opt/logstash Log4j2对接方式:Socket- 部署地址:
192.168.2.8 logstash建议使用grok插件
grok是一个十分强大的logstash filter插件,他可以通过正则解析任意文本,将非结构化日志数据解析成结构化和方便查询的结构。
安装插件
1 | # 查看 |
配置
logstash
配置 PIP 文件
1 | cat > /opt/logstash/config/app-log4j2.conf <<EOF |
配置 pipelines.yml(可选)
vim /opt/logstash/config/pipelines.yml
1 | - pipeline.id: app-log4j2-processing |
配置 logstash.yml(可选)
1 | path.config: "/opt/logstash/config/piptlines.yml" |
启动logstash
1 | # 如果 pipelines.yml 与 logstash.yml 没有配置,需要命令行中主动添加配置 |
项目
log4j2.yml
1 | Configuration: |
异步日志
依赖
1 | <dependency> |
Springboot配置log4j2.component.properties
1 | Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector |
附
app-log4j2.conf配置
1 | input { |
对应的log4j2.yml配置
1 | Configuration: |
app-kafka.conf配置
1 |
|
重启脚本
1 | cat > /opt/script/restart-logstash << EOF |
注意:使用
cat输出到文件中的执行脚本$需要改为\$