Skip to content

Commit ebd43d0

Browse files
Resolve conflict in java/springBoot3.2 + jdk21 + GraalVM上手体验.md
2 parents ceea4a5 + 11e09f6 commit ebd43d0

File tree

2 files changed

+121
-12
lines changed

2 files changed

+121
-12
lines changed

java/springBoot3.2 + jdk21 + GraalVM上手体验.md

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
# SpringBoot3.2 + jdk21 + GraalVM上手体验
1+
# springBoot3.2 + jdk21 + GraalVM上手体验
2+
SpringBoot2.x官方已经停止维护了,jdk8这次真的得换了🤣
23

3-
>参考官方文章进行体验:https://spring.io/blog/2023/09/09/all-together-now-spring-boot-3-2-graalvm-native-images-java-21-and-virtual
4+
5+
>- 可以参考官方文章进行体验:https://spring.io/blog/2023/09/09/all-together-now-spring-boot-3-2-graalvm-native-images-java-21-and-virtual
46
>
5-
>可以通过官方快速得到一个基于jdk21的项目https://start.spring.io/
7+
>- 通过官方快速得到一个基于jdk21的项目https://start.spring.io/
68
79
## 快速体验(二进制部署)
810

@@ -27,7 +29,7 @@ public class DemoApplication {
2729

2830
启动非常快,秒启动
2931

30-
![image-20231201173556211](https://cdn.fengxianhub.top/resources-master/image-20231201173556211.png)
32+
![image-20231201173556211](https://img-blog.csdnimg.cn/img_convert/6177751a91e71fbf42a294d5c0d712e0.png)
3133

3234
压测环境内存占用大概`70MB`左右,空闲时在`20MB`左右(由于直接打成二进制文件了,不能再使用jconsole、arthas之类的进行监控了),性能上由于不需要JVM预热,性能启动即巅峰。
3335

@@ -59,13 +61,13 @@ Waiting: 0 4 5.6 3 145
5961
Total: 1 7 10.4 6 149
6062
```
6163
62-
![image-20231201173732084](https://cdn.fengxianhub.top/resources-master/image-20231201173732084.png)
64+
![image-20231201173732084](https://img-blog.csdnimg.cn/img_convert/1ce803696e706e607860c9c1ed3a8a16.png)
6365
6466
## 快速体验(jar部署)
6567
6668
jar包占用只有19MB,已经不能算是小胖jar了😊
6769
68-
![image-20231201175815773](https://cdn.fengxianhub.top/resources-master/image-20231201175815773.png)
70+
![image-20231201175815773](https://img-blog.csdnimg.cn/img_convert/c5234d582cfb7b3185f87db7661f7d03.png)
6971
7072
内存占用在压测时大概在200MB左右,空闲时在160MB左右。性能显然也不是启动即巅峰,可以看出其实还是需要进行JVM预热才能达到性能巅峰的
7173
@@ -97,7 +99,7 @@ Waiting: 0 12 88.7 6 1771
9799
Total: 1 53 439.0 10 7011
98100
```
99101
100-
![image-20231201180038447](https://cdn.fengxianhub.top/resources-master/image-20231201180038447.png)
102+
![image-20231201180038447](https://img-blog.csdnimg.cn/img_convert/3dedb4ca21d5c5212ba2cb343571f02d.png)
101103
102104
103105
@@ -129,7 +131,7 @@ func main() {
129131
}
130132
```
131133
132-
这里golang没有使用框架,仅使用标准库,所以内存占用较低,仅10MB左右,即使使用Gin之类的web框架,内存也不会超过20MB
134+
这里golang没有使用框架,仅使用标准库,所以内存占用较低,`10MB`左右,不过即使使用Gin之类的web框架,内存也不会超过20MB
133135
134136
```shell
135137
$ ab -c 50 -n 10000 http://localhost:8080/customers
@@ -159,7 +161,7 @@ Waiting: 0 2 10.5 2 459
159161
Total: 1 7 32.3 4 462
160162
```
161163
162-
![image-20231201174441704](https://cdn.fengxianhub.top/resources-master/image-20231201174441704.png)
164+
![image-20231201174441704](https://img-blog.csdnimg.cn/img_convert/87713526e30e27ca4d410070daafb7ee.png)
163165
164166
## 对比Rust
165167
@@ -231,9 +233,9 @@ cargo build 213.00s user 23.08s system 258% cpu 1:31.39 total
231233
232234
## 结论
233235
234-
AOT-processed已经相对成熟,效果可以说非常惊艳,解决了`JVM`启动慢、需要预热、内存占用大的问题
236+
AOT-processed已经相对成熟,效果可以说非常惊艳,解决了`JVM`启动慢、需要预热、内存占用大等问题
235237
236-
美中不足的是编译速度非常慢,笔者电脑2017款mac book pro编译花费大概15分钟左右
238+
美中不足的是编译速度非常慢,笔者电脑是2017款mac book pro编译花费大概15分钟左右
237239
238240
```shell
239241
Finished generating 'demo' in 14m 33s.
@@ -245,4 +247,10 @@ Finished generating 'demo' in 14m 33s.
245247
[INFO] ------------------------------------------------------------------------
246248
```
247249
248-
可以看出java在云原生大环境下已经取得了不错的进步的
250+
------------
251+
[INFO] Total time: 15:45 min
252+
[INFO] Finished at: 2023-12-01T17:00:21+08:00
253+
[INFO] ------------------------------------------------------------------------
254+
```
255+
256+
可以看出java在云原生大环境下已经取得了不错的进步的
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
# 为阿里云域名配置泛解析SSL证书并自动刷新
2+
3+
最近阿里云免费的SSL过期了,需要更换,打开控制台一看,好家伙,居然已经用完了😱
4+
5+
![image-20231210235422273](https://cdn.fengxianhub.top/resources-master/image-20231210235422273.png)
6+
7+
而且阿里云证书有几个痛点:
8+
9+
- 一年刷新一次,不能自动更新
10+
- 免费的没有泛解析证书,每个域名一个证书有点麻烦
11+
- 免费证书有限
12+
13+
基于以上痛点,我打算使用开源免费的泛解析证书
14+
15+
- 基于docker容器进行一键部署(可以自动刷新),并且异常情况会邮件进行通知
16+
- 使用`Let's Encrypt`或者`ZeroSSL`的泛解析证书
17+
- 泛解析证书理论上没有限制
18+
19+
>下面是介绍,可以跳过😁
20+
21+
市面上主流的证书生成工具有 `certbot``acme.sh``acme-tiny`,其中[acme.sh](https://github.com/acmesh-official/acme.sh)申请泛解析证书最为方便
22+
23+
市面上使用最多的免费泛解析证书是`Let's Encrypt`家的,[acme.sh](https://link.zhihu.com/?target=http%3A//acme.sh) v3.0之前默认申请的也是这家的证书,但是在[acme.sh](https://link.zhihu.com/?target=http%3A//acme.sh) v3.0之后,默认申请的证书是`ZeroSSL`[ZeroSSL](https://app.zerossl.com/)同样可以申请`90`天的免费泛解析证书,相较于`Let's Encrypt`,ZeroSSL提供了一个管理界面可以管理我们的证书,并且提供api可以进行二次开发,可玩性方面比Let's Encrypt更多一些;缺点是稳定性方面可能没有老牌Let's Encrypt证书好,但是笔者并没有遇到过;当然也可以使用Let's Encrypt🎈
24+
25+
26+
27+
## docker容器一键部署
28+
29+
>为了方便你我他,笔者构建了docker容器进行一键部署,并且能通过邮件对证书异常进行自动通知
30+
>
31+
>这里分为两步
32+
>
33+
>- 自动使用`acme.sh`刷新证书
34+
>- 自动调用阿里云API更新OSS证书
35+
36+
```shell
37+
version: '3'
38+
services:
39+
acme-sh:
40+
image: neilpang/acme.sh
41+
container_name: acme.sh
42+
restart: always
43+
command: daemon
44+
environment:
45+
- Ali_Key="xxxxx"
46+
- Ali_Secret="xxxxx"
47+
volumes:
48+
- ./acme/out:/acme.sh
49+
network_mode: host
50+
```
51+
52+
**启动容器**
53+
54+
```shell
55+
$ docker-compose -f docker-compose-acme.sh.yaml -p acme.sh up -d
56+
```
57+
58+
**申请SSL证书**
59+
60+
```shell
61+
1、首先将默认证书服务器切换为 letsencrypt
62+
docker exec acme.sh acme.sh --set-default-ca --server letsencrypt
63+
64+
# --debug 可以去掉,我们加上能直接打印出每一步详细日志,如果出错的话可以知道在哪一步出错
65+
# -d 后面换成你自己的域名,可以使用*号 泛指所有子域名,eg *.3658k.com
66+
docker exec acme.sh --issue --dns dns_ali -d example.com -d *.example.com --debug
67+
# 其他云厂商 例如腾讯云只需要修改--dns dns_dp
68+
```
69+
70+
**设置 crontab 任务自动续签**
71+
72+
在宿主主机的cronta,添加一条定时任务,每天让acme容器去自动检查下那些域名过期,如果过期的话,acme会自动续签,这样我们就不用担心证书过期了
73+
74+
`crontab -e` 添加一下内容
75+
76+
```shell
77+
0 0 * * * docker exec acme.sh --cron
78+
```
79+
80+
**升级 acme**
81+
82+
有的时候续签可能会出问题,这时候就需要升级一下acme看能不能自动解决了
83+
84+
```shell
85+
docker exec acme.sh acme.sh --upgrade
86+
```
87+
88+
89+
90+
91+
92+
93+
94+
95+
96+
97+
98+
99+
100+
101+

0 commit comments

Comments
 (0)