前言
之前我的所有配置文件放在Resource目录下,现在我想移到dc_server目录读取配置文件,然后就:
自定义配置文件读取的坑……
探索
项目启动后发布加载不到根目录下的配置文件,一直报这种错误ERROR in ch.qos.logback.core.joran.action.PropertyAction - Could not find resource [/Users/hyperdai/Projects/java_dcserver/conf/logserver.properties].
各种百度找不到原因,然后开始看源码,定位到PropertyAction类下获取资源文件的地方:Loader.getResourceBySelfClassLoader(resource);
有问题,跟进。
到了ClassLoader.getResource……我还没发现问题,还在谷歌……
比如疯狂看这种彻底搞懂Class.getResource和ClassLoader.getResource的区别和底层原理
然后彻底搞不懂了,没办法,按logback的PropertyAction类源码,模仿写一个案例,自己去调试地址……
比如这样的姿势:
其实我没发现解决根本问题,我一直在加载的是classpath!然后回到问题:怎么加载加载非类路径下的logback配置文件
看了几种方案,包括定时更新的方案,就在准备实现之前,
关于logback.xml加载外部配置文件问题,发现这个作者的问题跟我相反。。。他加载不了类文件,我加载不了外部文件,然后<property file="${app.path}/conf/logserver.properties" />
非常舒服的解决了
总结
定位问题
很重要,反复说,反复做不到,我想是一种“大佬”和“菜鸟”之间的区别
努力定位问题……更快的DEBUG……分析问题
其实很简单,就是需要讨论方案最优解!就怕发现不了问题!
如果使用file,那么是绝对路径。如果使用resource的话,就是在类路径里寻找了。