spring boot部署war包出现NameNotFoundException异常

在SpringBoot应用部署war包时遇到启动失败的问题,异常信息指向过滤器LoginSSOInterceptor的资源未找到。尝试了多种解决方案,如检查web.xml和context.xml配置,但问题依然存在。最终发现是由于使用Resource引起,将Resource替换为@Autowired解决了问题。具体原因未深究。

最近工作中,遇到了一个问题,spring boot部署war包的过程中启动时在实现了Filter的filter类中出现以下异常信息,导致tomcat启动失败:

21-06-07.13:47:22.234 [localhost-startStop-1] ERROR [/] - Exception starting filter loginSSOInterceptor
javax.naming.NameNotFoundException: Name [com.jt.ap.boot.filter.LoginSSOInterceptor/userApi] is not bound in this Context. Unable to find [com.jt.ap.boot.filter.LoginSSOInterceptor].
at org.apache.naming.NamingContext.lookup(NamingContext.java:824)
at org.apache.naming.NamingContext.lookup(NamingContext.java:172)
at org.apache.catalina.core.DefaultInstanceManager.lookupFieldResource(DefaultInstanceManager.java:587)
at org.apache.catalina.core.DefaultInstanceManager.processAnnotations(DefaultInstanceManager.java:487)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:174)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:166)
at org.apache.catalina.core.ApplicationFilterConfig.(ApplicationFilterConfig.java:111)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4747)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5389)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBaseStartChild.call(ContainerBase.java:1410)atorg.apache.catalina.core.ContainerBaseStartChild.call(ContainerBase.java:1410) at org.apache.catalina.core.ContainerBaseStartChild.call(ContainerBase.java:1410)atorg.apache.catalina.core.ContainerBaseStartChild.call(ContainerBase.java:1400)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at com.alibaba.mtc.MtContextRunnable.run(MtContextRunnable.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

在网上找了很多答案,一直都没有解决,比如:
1、tomcat的web.xml配置缺东西
2、context.xml数据源缺少配置等等都不能解决
最后在国外网站一位大神说,可能是用了Resource的原因,改成Autowired就能解决,改了之后解决了,具体原因也没在追究。

### `org.glassfish` 用途、配置与错误集成分析 `org.glassfish` 是一个与 Java EE(现 Jakarta EE)标准紧密相关的开源项目,主要由 Oracle 推动开发,其核心产品是 GlassFish 应用服务器。GlassFish 是一个轻量级、模块化、支持完整 Java EE 规范的应用服务器,常用于开发、测试和部署企业级 Java 应用程序。 #### 用途 GlassFish 提供了对 Java EE 标准的完整实现,括 Servlet、JSP、EJB、JPA、JMS、WebSocket 等关键组件的支持。它被广泛用于开发 Web 应用、微服务、RESTful API 和分布式系统。相较于 Tomcat,GlassFish 支持更完整的 Java EE 功能,适合需要完整企业级特性的项目。 此外,GlassFish 还提供了管理控制台、CLI 工具以及 REST API,便于进行服务配置、监控和部署管理[^1]。 #### 配置方法 GlassFish 的配置主要通过以下方式进行: 1. **管理控制台**:通过浏览器访问默认端口 4848 的管理界面,可以进行数据源配置、JVM 参数设置、线程池调整等操作。 2. **asadmin 命令行工具**:提供丰富的命令用于启动、停止、部署、配置服务器等。例如: ```bash asadmin start-domain asadmin create-jdbc-connection-pool --datasourceclassname=com.mysql.cj.jdbc.MysqlDataSource MyPool ``` 3. **配置文件**:主要配置文件位于 `domains/domain1/config/domain.xml`,可用于手动调整 JVM 参数、线程池大小、安全设置等。 在某些场景下,如与 Spring Boot 集成时,需要注意类加载顺序和依赖冲突问题。例如,Spring Boot 默认使用 Tomcat 作为嵌入式容器,若需切换至 GlassFish,则需在 `pom.xml` 中进行依赖调整: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-glassfish</artifactId> </dependency> ``` #### 常见错误与解决方案 1. **类加载冲突**:由于 GlassFish 自带部分 Java EE API 实现,与 Spring Boot 或其他框架中的依赖可能发生冲突。例如,`javax.servlet` 或 `javax.persistence` 的版本不一致可能导致启动失败。解决方法是通过 Maven 或 Gradle 排除相关依赖。 2. **JNDI 数据源配置错误**:未正确配置 JNDI 名称或数据库驱动未部署,可能导致应用启动时报 `javax.naming.NameNotFoundException`。需确保数据源名称在 `persistence.xml` 或 Spring 配置中与 JNDI 名称一致,并将驱动放入 `glassfish/lib` 目录。 3. **与 XXL-JOB 的集成问题**:若在 GlassFish 中部署 XXL-JOB 的执行器模块,需确保 `@JobHandler` 注解的类被正确扫描并注册为 Spring Bean。否则可能导致调度中心调用时报 `job handler not found` 错误。建议检查 Spring 配置文件或注解扫描路径是否含 JobHandler 所在[^2]。 #### 与 `@JobHandler` 的集成 在 XXL-JOB 框架中,`@JobHandler` 用于定义任务执行逻辑。若在 GlassFish 容器中部署 XXL-JOB 执行器模块,需注意以下几点: 1. **Spring 上下文初始化**:确保 Spring 上下文正常加载,JobHandler 类被正确扫描注册为 Bean。 2. **日志与异常处理**:在 GlassFish 中部署的应用若发生 JobHandler 执行异常,需检查 `server.log` 文件,通常日志中会含具体错误堆栈。 3. **类路径问题**:确认 `xxl-job-core` 等依赖已正确打WAR 文件,并在 GlassFish 的 lib 目录中没有冲突的版本。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值