Spring Boot共享库中ResourceBundleMessageSource无法加载消息文件的解决方法
Spring Boot共享库内置翻译文件无法被ResourceBundleMessageSource加载的解决方法
修正资源文件路径与basename的匹配
如果翻译文件放在src/main/resources/META-INF目录下,需要明确指定basename为classpath:META-INF/mymessages;如果放在src/main/resources根目录,直接用mymessages即可(注意避免和应用中的同名资源冲突)。示例代码:this.localMessageSource = new ResourceBundleMessageSource(); localMessageSource.setDefaultEncoding("UTF-8"); // 若文件在META-INF下 localMessageSource.setBasename("classpath:META-INF/mymessages"); // 若在根目录 // localMessageSource.setBasename("mymessages");显式设置类加载器
共享库的类加载器可能无法默认定位到自身资源,需指定当前类的类加载器来加载资源包:localMessageSource.setClassLoader(getClass().getClassLoader());验证资源文件的打包位置
检查Maven/Gradle的构建配置,确保src/main/resources下的文件被正确打包到jar中。Maven默认会自动复制该目录下的文件到target/classes,最终打包进jar的对应路径。可以解压库的jar包,确认mymessages.properties等文件存在于预期位置。调试资源加载情况
在代码中添加调试代码,确认资源文件是否存在于classpath中:URL resource = getClass().getClassLoader().getResource("mymessages.properties"); System.out.println("资源文件路径:" + resource); // 输出null则说明文件未被正确打包
内容的提问来源于stack exchange,提问作者Herman Bovens
相关产品推荐
相关产品推荐

