jfinal 能否实现不同环境读取不同配置?类似springboot

jfinal 能否实现不同环境读取不同配置?类似springboot,如下图

1.png

  • 不同环境的配置设置一个配置文件

  • 在application.properties中通过如下配置实现文件的切换

    spring.profiles.active=dev


评论区

JFinal

2017-08-15 16:09

在 YourJFinalConfig extends JFinalConfig 中添加一个方法解决一下,大致如下:
private void loadConfig() {
// 加载用于指定开发模式的配置文件
PropKit.use("application.properties");
// 读取 dev 模式
boolean dev = PropKit.getToBoolean("dev");
// 移除默认的配置文件,第一个被 use 的文件会成为默认配置文件
PropKit.useless("application.properties");
if (dev) {
PropKit.use("application-dev.properties");
} else {
PropKit.use("application-prod.properties");
}
}

然后在 configConsant(Constants me) 方法的第一行处调用一次即可,如果希望更简单,最的的四行代码可以这样:
PropKit.use(dev ? "application-dev.properties" : "application-prod.properties");

在 jfinal 之下,大概是 5 行代码可满足这个需求,但同时又不限定你的配置文件名称,少了一些约定,学习成本低

JFinal

2017-08-15 16:13

我自己在项目中是下面这种解决方案:
try {
PropKit.use("config-product.txt");
} catch (Exception e) {
PropKit.use("config-dev.txt");
}

也就是说,优先加载生产环境配置,如果生产环境配置不存在则加载开发环境配置,我在本地开发环境中没有提供 config-produect.txt,所以始终是加载 config-dev.txt

而部署在生产环境时,会创建一个 config-product.txt 用于生产环境,原有的 config-dev.txt 被直接忽略

JFinal

2019-01-01 12:53

@JFinal jfinal 新版本可以这么来用:
PropKit.use("config-dev.txt").appendIfExists("config-pro.txt")

后面 append 过来配置中的配置项会覆盖前面添加的

tianci121404

2019-08-06 16:14

static void loadConfig() {
if (p == null) {
String active = PropKit.use("config.properties").get("jfinal.profiles.active");
if (StringUtils.equals("dev", active)) {
p = PropKit.use("config-dev.properties");
} else if (StringUtils.equals("pro", active)) {
p = PropKit.use("config-pro.properties");
} else if (StringUtils.equals("test", active)) {
p = PropKit.use("config-test.properties");
} else {
throw new RuntimeException("Read profile exceptions : [" + active + "] not existent");
}
}
}

JFinal

2019-08-06 16:20

@tianci121404 下载首页 jfinal demo for maven ,里面的 PropKit.useFirstFound(生产配置, 开发配置) 就是你需要的功能

tianci121404

2019-08-08 17:16

@JFinal 波总,您那个是顺序加载,开发环境不放生产配置,只有开发配置,但是我们的开发环境可能会生产配置、测试配置、开发配置都存在,用开关控制加载哪个配置文件可能更方便一些, 所以多写了几行代码,模仿springboot的配置文件加载。感谢波总的jfinal,期待jfinal在新版本增加一些异步和多线程的东西,还有异常和断言模板化,拦截器模板化,集成或模拟lombok等等,这些都是项目中经常用到的。

JFinal

2019-08-08 17:22

@tianci121404 jfinal 现有的工具类也可以方便支持,例如:
1: 弄一个指定配置文件类型的配置项,这个配置项可以放另一个配置中,也可以放在现有的某个配置文件中,甚至可以放在启动参数中

2:这里以将该配置项放在 dev-config.txt 为例,先在 dev-config.txt 中放入当前运行环境需要的配置文件名,例如:
configFile=product-config.txt

3: 在 configConstant(Constans me) 方法中添加如下代码;
String configFile = new Prop("dev-config.txt").get("configFile");
PropKit.use(configFile);

4:不同的运行环境只需要修改 dev-config.txt 中的 configFile 值即可

lesalie

2020-02-24 11:10

根据不同环境打包还得改配置 麻烦

热门反馈

扫码入社