fatjar 外部config下的配置文件不加载

 fatjar  外部config下的配置文件不加载 是什么原因呢

评论区

macaque

2019-11-08 10:57

JFinal

2019-11-08 15:33

jar 包内部存在同名配置文件,那么 config 下面的则不会加载,这是一个优先级问题

在打包的配置中,配置一下过滤,避免将配置文件打入 jar 包

如果是 jfinal undertow 的配置文件,还可以通过 -dev、-pro 结尾字符串来实现你的需求,让 jar 包打入 -dev 配置,让 config 中放 -pro 配置,例如:
1: jar 包中打入 undertow.txt
2:config 目录放入 undertow-pro.txt
这样的话 config 目录的就会被加载

如果是 jfinal 自身的配置文件,可以在 MyConfig 中这么来用:
public class MyConfig extends JFinalConfig {
private Prop p;

public void configConstant(Constants me) {
this.p = PropKit.useFirstFound("jfinal-club-config-pro.txt", "jfinal-club-config-dev.txt");

me.setDevMode(p.getBoolean("devMode"));
}

public void configEngine(Engine me) {
me.setDevMode(p.getBoolean("engineDevMode");
}

上面的代码 PropKit.useFirstFound(first, second) 会优先年 first 配置,找到则使用,找不到则继承找 second 配置

而你就可以利用这个 PropKit.useFirstFound(...) 机制,将 second 打入 jar 包, 让 first 配置放入 config 目录

这种用法在 jfinal club 中有,注意看源码:
JFinalClubConfig

macaque

2019-11-08 17:11

@JFinal 我是这么写的PropKit.use("cbox_config_dev.txt").appendIfExists("cbox_config_pro.txt"); 然后jar包里放的是cbox_config_dev.txt, config里放的是cbox_config_pro.txt 这样不行么?

JFinal

2019-11-08 18:13

@macaque appendIfExists(...) 也可以,但建议使用 PropKit.useFirstFound(...)

JFinal

2019-11-08 18:15

@macaque appendIfExists(...) 也可以,但建议使用 PropKit.useFirstFound(...)

这个问题的本质是,config 目录与 jar 包中出现同名配置文件时, jar 包中的优先

解决的时候,让 jar 不要打入配置文件,或者打入 dev 配置,在 config 中添加 pro 配置

macaque

2019-11-11 10:24

@JFinal 我用appendIfExists 不加载config下的,我换成useFirstFound试试

macaque

2019-11-11 10:29

@JFinal 换成useFirstFound也是读不到config下的

JFinal

2019-11-11 10:33

@macaque 换成 useFirstFound 一定是可以的,前提是你的 jar 里头没有同名配置文件

macaque

2019-11-11 11:43

@JFinal 我在jar包里是cbox_config_dev.txt,config下是cbox_config_pro.txt, PropKit.useFirstFound("cbox_config_pro.txt","cbox_config_dev.txt");这么写的

JFinal

2019-11-12 11:36

@macaque 这样写是对的,你那里没有实现,估计是文件名有错误,或者 jar 包中存在 cbox_config_pro.txt