JNDI @Resource 注解

JNDI @Resource annotation

在 servlet 和过滤器中 classes 我可以通过注解初始化 DataSource 变量

 @Resource(name = "jdbc/testDB")
    protected DataSource ds;

但是它如何通过注释在基本 class 中初始化? 通常抛出 NullPointerException

public class AddAuto {
        @Resource(name = "jdbc/testDB")
        private DataSource ds;
}

你的容器是什么?

如果是tomcat,资源名称应该是这样的

@Resource(name = "java:/comp/env/jdbc/testDB")
    protected DataSource ds;

我不知道其他容器,但 JBoss 与 Tomcat 相同,GlassFish 作为您的值。

我还建议旧的查找,这对调试有很大帮助

void init(){
DataSource ds=(DataSource)InitialContext.doLookup("java:/comp/env/jdbc/testDB");
}

容器仅检查 servlet、过滤器等知名组件内部的注释。您应该将 class 转换为某个组件:

  • Web 组件(servlet、过滤器、Web 容器侦听器)
  • EJB(tomcat 不支持)
  • CDI 豆

或者您可以使用非 Java EE 解决方案,例如 spring