模块化编程之无法读取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 指定了 dev ,application-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