Tomcat 10.0.10中@Resource等注解失效问题咨询
解决方案
Tomcat 10.x 版本对应Jakarta EE 9+规范,注解无法生效属于配置缺失或依赖冲突问题,按以下步骤排查修复即可:
- 先检查Tomcat安装目录下的
lib文件夹是否存在jakarta.annotation-api.jar:部分精简版Tomcat安装包会默认移除该依赖,缺少该jar会导致容器无法识别jakarta.annotation包下的所有注解,直接下载对应版本的jar放入lib目录重启Tomcat即可。 - 调整
@Resource注解的name属性写法:不需要加java:comp/env/前缀,直接写@Resource(name = "bean/Something")即可,Tomcat会自动补全JNDI前缀,错误的全路径写法会导致注入匹配失败。 - 排查应用内依赖冲突:不要在项目的
WEB-INF/lib下重复引入jakarta.annotation-api相关jar包,和容器自带的版本冲突也会导致注解失效。 - 显式开启注解扫描:如果上述配置都无法解决,在你的
context.xml的<Context>标签上添加annotation-scanning-enabled="true"属性,部分Tomcat 10小版本的全局配置可能会默认关闭应用层的注解扫描。
你用
InitialContext手动查找正常是因为该逻辑直接调用JNDI上下文接口,不依赖注解扫描流程,和注解失效属于两个独立逻辑。Tomcat 9运行正常是因为Tomcat 9对应Java EE 8规范,默认内置了javax.annotation包的注解处理逻辑,且默认开启相关扫描。
内容的提问来源于stack exchange,提问作者dmrsuranga
相关产品推荐
相关产品推荐

