You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebLogic部署Spring Boot2.0.0加载自定义Message资源遇JspTagException

排查WebLogic下Spring Boot MessageSource找不到消息的问题

这种Tomcat正常但WebLogic出问题的情况,大概率是类加载机制或者资源路径解析的差异导致的——毕竟WebLogic的类加载模型和Tomcat有不少区别。咱们一步步来拆解问题:

1. 先修正资源路径的大小写细节

你配置里写的是classPath:,但标准的classpath前缀应该是小写的p:classpath:。虽然Java本身对大小写不敏感,但WebLogic的资源解析器可能对这个更严格,先把配置里的classPath:改成classpath:试试:

@Configuration
public class ResouceBundleConfig {
    @Bean
    public MessageSource messageSource (){
        ReloadableResourceBundleMessageSource messageSourceResourceBundle=new ReloadableResourceBundleMessageSource();
        // 修正classPath为classpath
        messageSourceResourceBundle.setBasenames("classpath:inheritanceMessage","classpath:publicMessage");
        messageSourceResourceBundle.setDefaultEncoding("UTF-8");
        return messageSourceResourceBundle;
    }
}

同时把application.yml里的配置也同步修正:

spring:
  messages:
    basename: classpath:inheritanceMessage,classpath:publicMessage

2. 确认资源文件的打包位置

WebWar包部署时,.properties资源文件必须放在WEB-INF/classes目录下。你可以手动解压War包检查:

  • 看看inheritanceMessage.properties、inheritanceMessage_en_US.properties这些文件是不是在WEB-INF/classes目录里
  • 如果你的资源文件放在src/main/resources下,Maven/Gradle打包时应该会自动复制到这里,但WebLogic对War结构要求更严格,确保没有被遗漏

3. 解决Spring Boot Bean加载优先级冲突

WebLogic环境中,Spring Boot的自动配置可能和你自定义的MessageSource Bean产生冲突。你可以试试两种方案:

  • 给自定义的MessageSource Bean加上@Primary注解,确保它被优先加载:
@Bean
@Primary
public MessageSource messageSource (){
    // ... 原有代码逻辑
}
  • 或者直接禁用Spring Boot自动配置的MessageSource,在启动类上添加排除配置:
@SpringBootApplication(exclude = {MessageSourceAutoConfiguration.class})

4. 验证资源文件的命名与编码

  • 确保英文locale文件的命名完全正确:比如inheritanceMessage_en_US.properties,别出现拼写错误(少下划线、大小写错误等)
  • 检查.properties文件的编码确实是UTF-8。虽然Spring Boot默认支持UTF-8,但WebLogic的老版本可能存在兼容问题,你可以尝试用native2ascii工具转成ASCII编码后再测试

5. 手动调试资源加载状态

你可以在代码里加一段调试逻辑,确认WebLogic能不能读取到目标资源:

@Autowired
private ResourceLoader resourceLoader;

// 在任意可执行的方法中添加测试代码
public void testResourceLoad() {
    Resource resource = resourceLoader.getResource("classpath:inheritanceMessage_en_US.properties");
    System.out.println("资源是否存在:" + resource.exists());
}

如果输出false,说明WebLogic确实找不到该资源,那就要回到资源打包路径的问题上重新排查。


内容的提问来源于stack exchange,提问作者user9826539

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:19:07