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.x
MyBatisPlus 3.5.x
开发限制
- 必须使用
MyBatisPlus
分页插件。 - 只能对
MyBatisPlus
语法下的SQL
进行拦截,比如Service函数、Mapper函数、动态SQL
。(自定义实现的Mapper
函数,暂不考虑兼容测试) - 自定义
SQL
中的分页数据量不能控制(业务相关,不方便兼容)。 - 如果因为“程序错误”导致查询数据量过大的问题,比较难以排查。
自定义
SQL
中的分页 与IPage
一同使用会报错,MyBatisPlus
认定为代码逻辑上的错误,这里不做处理。
数据库
兼容
DB2
Dm
MySQL
(已测试)Oracle12c
Oracle
Postgre
SQLServer
理论上兼容(未测试)
Gauss(Oracle)
GBase(MySQL)
H2(Postgre)
HSQL(Postgre)
Kingbase(Postgre)
MariaDB(MySQL)
Oscar(MySQL)
Phoenixt(Postgre)
SQLite(Postgre)
XuGu(MySQL)
未兼容(不考虑实现)
SQLServer2005
Sybase
实现
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
输出到文件中的执行脚本$
需要改为\$