关于undertow打包候后部署时应用根路径获取的一个困惑

我使用官方提供的脚本启动时(即 CP=${APP_BASE_PATH}/config:${APP_BASE_PATH}/lib/*)获取到的路径为脚本路径+/config。
当我更改脚本 CP=${APP_BASE_PATH}/config2:${APP_BASE_PATH}/lib2/*时,获取到的路径为脚本路径+/lib2/config

部署环境为centos 7

评论区

JFinal

2020-10-24 11:58

信息量太少

我建议你先将 config2 这个目录先创建好,如果目录不存在,可能是过不去的

sliver

2020-10-24 16:47

这些目录都是存在的
1. 我把项目打包后放到服务器的 /root/app下,此时的项目下存在的文件夹有config,lib,webapp,脚本(jfinal.sh)在项目根目录,脚本里面的配置为 CP=${APP_BASE_PATH}/config:${APP_BASE_PATH}/lib/*
2. 复制config -> config2和lib->lib2以及脚本jfinal.sh -> jfinal2.sh,修改脚本内容( CP=${APP_BASE_PATH}/config2:${APP_BASE_PATH}/lib2/* )
3. 运行jfinal.sh, PathKit.getRootClassPath()获取到的路径为/root/app/config
4. 运行jfinal2.sh, PathKit.getRootClassPath()获取到的路径为/root/app/lib2/config
5. 之所以复制一份处理是因为我打算做集群部署,但配置需要更改,一开始我只是把修改脚本里面的config换成config2,然后发现获取到的项目根路径还是/root/app/config。
让我想不明白的是结果后面都会有config,按道理来讲也应该是获取到/root/app/或/root/app/lib(jfnal.sh)

JFinal

2020-10-24 17:05

@sliver 使用 jfinal undertow 部署时,会默认添加一个 "config" 目录为 class path,源码在这里:
https://gitee.com/jfinal/jfinal-undertow/blob/master/src/main/java/com/jfinal/server/undertow/hotswap/ClassLoaderKit.java

但这个不影响你添加额外的 class path ,只需要在脚本里面向 CP 变量追加新的目录即可

原有的 config 目录最好是删掉

此外, PathKit.getRootClassPath() 这个变量与 undertow.resourcePath 配置中的第一个存在的目录有关,按理你获取到的值应该是 /root/app/webapp

JFinal

2020-10-24 17:07

@sliver 你可以适当地修改 jfinal undertow 源码,然后安装到本地来解决问题:
https://jfinal.com/share/2093

最后,做集群的话,我建议顶多是将 webapp 抽取到一个统一的地方去,配置 undertow.resourcePath 就可以重新指定 webapp 在哪里了

而 webapp 之外的 config、lib 这些目录以及文件建议各自独立

sliver

2020-10-24 19:31

sliver

2020-10-24 19:34

@JFinal webapp下放的是静态文件,应该不会获取到那去

JFinal

2020-10-24 21:39

@sliver 我更正一下我前面说错的一个地方,undertow.resourcePath 配置与 PathKit.getWebRootPath() 有关,而不是 PathKit.getRootClassPath()

热门反馈

扫码入社