模块化之无法读取SpringBoot配置文件

562 阅读2分钟

模块化编程之无法读取SpringBoot配置文件

java9 引入了模块化编程, jdk也出到 20 了,SpringBoot 也快放弃 java8 了,我们自然不能落后。

那就先来个 spring-boot 2.7.10 试试手。
刚开始还一切顺利,直到我手贱修改了 module-info.java
就再也读取不到 spring 配置文件了
每次启动看到的都是这句,然后紧跟一堆错误

xxx No active profile set, falling back to 1 default profile: "default"
xxx Tomcat initialized with port(s): 8080 (http)

这两句明显就不对, application.yml 指定了 devapplication-dev.yml 又指定了端口 8048, 怎么看都不可能是这样子的。然后在 IDEA 中指定启动环境,环境对了,但端口不对,说明配置还是没读取到。

在不停的回滚和试错中,终于找到了问题所在。
module-info.java 我一开始是这样写的:

open module cc.wanforme.saya {
   ....
}

后来我改成这样了

 module cc.wanforme.saya {
   ....
  // 挨个放开
  opens cc.wanforme.saya;
  opens cc.wanforme.saya.log;
}

看完我人都不好了,这特么居然有坑!

解决方案

第一种改回去

// open 写在头部
open module cc.wanforme.saya {
   ....
}

第二种opens配置文件夹

module cc.wanforme.saya {
   ....
  opens cc.wanforme.saya;
  opens cc.wanforme.saya.log;

  // 开放静态资源,否则无法读取
  opens config; // 我的配置文件在 'src/main/resources/config' 下
  //opens fxml; // 其他的文件夹
}

如果IDE版本低了会报错

后语

module-info 谁用谁知道,一用吓一跳,不熟悉还是别用了!
而且IDEA的智能导入提示只有在 module-info 中声明模块包后才能提示,我要是知道我要用的类在哪儿还需要你提醒?

一个奇技淫巧: 先把 module-info.java 改成其他名字,项目就会编程非模块的普通项目, IDEA 就会提示你引入。类引入后,再把文件改回 module-info.java ,这时候就会提示你缺少某个模块,需要引入。

对了,我用的IDEA版本是 2022