2025-09-06 11:28
@北流家园网 热加载的 class load 不同, 获取 class loader 这个会吧?
if (Thread.currentThread().getContextClassLoader().getClass() == HotSwapClassLoader.class) {
热加载模式之下
} else {
...
}
2025-09-06 01:06
@北流家园网 简单来说就是新增一个 /etc/systemd/system/your_project.service
在这个 your_project.service 文件中添加依赖,例如下面是添加了对 mysql 的依赖:
[Unit]
Description=MyApp Service
After=network.target mysqld.service
Requires=mysqld.service
# 其它部分省略
以上的 After、Requires 会让你的应用在 mysql 启动之后再启动。
这个 xxx.service 脚本写完后还要通过 systemctl 让它生效,然后就可以通过如下的方法启动、停止、重启项目了:
systemctl start xxx
systemctl stop xxx
systemctl restart xxx
还可以通过 status 查看状态:
systemctl status xxx
使用 systemctl 还有一个优势,那就是你可以在脚本使你的这个服务在挂掉后自动启动,加个配置即可:
RestartSec = 12s
以下是我在生产环境的一个系统的实际用法:
[Unit]
Description = Stock Service
After = network.target
[Service]
Type = forking
Restart = on-failure
RestartSec = 12s
WorkingDirectory = /opt/app/stock
ExecStart = /opt/app/stock/stock.sh start
[Install]
WantedBy = multi-user.target
注意一下 stock.sh 这个脚本文件,就是 jfinal-club 等等项目中的 .sh 启动脚本,唯一的不同就是里头的 java 命令要使用全路径,例如:
/opt/jdk_1.8/bin/java -Xverify:none ${JAVA_OPTS} -cp ${CP} ${MAIN_CLASS} &
而不能是: java -Xverify:none ${JAVA_OPTS} -cp ${CP} ${MAIN_CLASS} &
也就是说,主要的脚本,jfinal club 中已经帮你写好了,你只需要写 xxx.service 这个 systemctl 要求的脚本即可,这个脚本的写法非常简单,可以直接参考我上面的例子。
2025-08-15 02:31
@shenbaise 今天还有同学正好用上了这个功能,配置一下 undertow.resourcePath 即可:
按照官方给的配置文件来配置:
https://gitee.com/jfinal/jfinal-undertow/blob/master/undertow.txt
2025-08-06 12:15
@jFinal用户0028 这个不变动项目本身,只是启动方式改一点点而已
jfinal undertow 支持所有 jfinal 版本