springboot启动流程及原理剖析
SpringBoot应用打出的jar包, 是可以直接使用 java -jar XXX.jar 命令直接启动的, 那么背后的原理是怎样的?
JarLauncherjar包结构首先先看一下springboot的jar包结构是什么样的。
新建一个springboot工程(可以直接使用idea自带的Spring Initializer创建), 然后使用mvn clean package打包, 使用压缩软件打开jar包, 观察其内部结构如下:
12345678910111213141516.├── BOOT-INF│ ├── classes│ │ ├── application.properties│ │ ├── cn│ │ ├── static│ │ └── templates│ └── lib│ ├── spring-core-5.2.2.RELEASE.jar│ ├── spring-webmvc-5.2.2.RELEASE.jar│ ├── ...// 这里略了大量jar包├── META-INF│ └── ...
树莓派使用另一主机的硬盘
实现效果:不实际接入真实硬盘, 而是使用局域网内(公网主机也行, 只是速度取决于带宽)另一主机上的硬盘(或者是目录)
实现方案: 使用NFS来实现
准备:
一个树莓派
一台Linux主机, 系统Ubuntu 20.04, ip是10.0.0.239
操作步骤:
服务端(Linux主机)
IP为10.0.0.239的主机安装nfs server
1sudo apt install nfs-kernel-server
创建nfs共享目录(如果已经存在, 可以不创建), 也就是要挂载到树莓上的目录
1mkdir -p /mnt/media/download
配置nfs服务, 编辑配置文件:vim /etc/exports, 添加一行
1/mnt/media/download *(rw,sync,no_root_squash,no_subtree_check)
各个字段说明如下:
/mnt/media/download: 要共享的目录
*:指定可以访问共享目录的用户 ip, * 代表所有用户。192.168.3. 指定网段。192 ...
红米AC2100 openWrt设置无线中继
红米AC2100刷openWrt的教程:http://openwrt.ink:88/archives/s-breed
刷完之后, 设置无线中继的步骤记录一下。这里使用2.4G的频率来作为客户端接收上一级信号, 然后使用5G频率作为服务端发射无线信号。图片是已经设置好之后截的, 所以有些地方可能有些不一样。
选择 网络 - 无线, 选择2.4G旁边的扫描按钮,加入网络, 选择需要中继的上一级网络, 然后填写密码, 其他默认即可。然后点击保存。
进入网络-接口页面, 点击 LAN条目的编辑, 注意此时已经有一个刚刚加入的wwan网络。
除了刚才新添加的wwan网络, 其余的全部勾选上
以上已经完成。 若不想开启2.4G的发射信号, 去无线页面禁用或删除2.4G的即可。
基于docker-compose+prometheus+grafana搭建Linux监控
基于docker-compose、prometheus、grafana来搭建Linux服务器的监控。
用到的几个expoter说明:
node-exporter: 监控整个主机所有资源
cadvisor: 监控容器资源
创建目录在主机上创建一些目录, 用来持久化监控数据和配置
123mkdir -p /opt/docker/monitor/configmkdir -p /opt/docker/monitor/datachmod 777 /opt/docker/monitor/data
创建docker-compose.yml切换到/opt/docker/monitor目录, 新建docker-compose.yml, 内容如下:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859version: '2'networks: monitor: driv ...
mybatis相关
在springboot中打印sql语句, 在配置文件中添加:
1mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
clickhouse索引原理介绍
clickhouse本身支持很多表引擎,这里只介绍其中最常用的MergeTree引擎。
建表语句12345678910111213CREATE TABLE [IF NOT EXISTS] [db.]table_name ( name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1], name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2], ... INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1, # 创建普通索引(跳数索引) INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2) ENGINE = MergeTree()ORDER BY expr[PARTITION BY expr] # 创建分区键索引[PRIMARY KEY expr] # 创建主键索引[SAMPLE BY expr][TTL ...
Linux压测和硬件测试命令
硬盘使用fio命令来进行硬盘测试。
安装:sudo apt install fio
基本参数如下:
123456789101112131415161718192021filename=/dev/emcpowerb 支持文件系统或者裸设备,-filename=/dev/sda2或-filename=/dev/sdbdirect=1 测试过程绕过机器自带的buffer,使测试结果更真实rw=randwread 测试随机读的I/Orw=randwrite 测试随机写的I/Orw=randrw 测试随机混合写和读的I/Orw=read 测试顺序读的I/Orw=write 测试顺序写的I/Orw=rw 测试顺序混合写和读的I/Obs=4k 单次io的块文件大小为4kbsrange=512-2048 同上,提定数据块的大小范围size ...