java - 使用 @Resource 注释替换 JNDI 查找

标签 java

我使用此代码通过 jndi 查找来访问数据库连接。

Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource datasource = (DataSource)envContext.lookup("TestDB");
Connection connection = datasource.getConnection();

一切正常。后来我用注释替换了它,用下面的代码做同样的事情。

@Resource(name="TestDB")
DataSource datasource;

methodName(){
if(datasource!=null){
Connection connection = datasource.getConnection();}
else{
   System.out.println("Datasource is null");
     }
    }

但我得到“数据源为空”。我也尝试过 @Resource(lookup="TestDB") 但仍然得到“DataSource is null”。 为什么数据源为空?

最佳答案

我的问题如以下评论所述:https://stackoverflow.com/a/19530417/1494996

使用InitialContext进行查找有效,而使用@Resourse进行查找则无效。一旦我将 @Resource 声明从常规 java 类移至 servlet 类,一切就开始工作了。容器(在我的例子中是 Tomcat 8)仅检查众所周知的组件的注释

关于java - 使用 @Resource 注释替换 JNDI 查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18910010/

相关文章:

java - org.springframework.mail.MailAuthenticationException : Authentication failed; nested exception is javax. mail.AuthenticationFailedException:;

Java:当我开始从kafka主题读取时如何从当前偏移量读取

java - 为什么以下 Vector 代码完全损坏?

java - 更新主键而不创建重复行?

java - 在 scala/java 中编写 OCaml 解析器的最佳方法是什么?

java - 将 javaRDD 保存为 XML 文件

java - 如何在Java中返回二叉树中最频繁的元素

java - Bean 验证不适用于多个 Bean 类

java - 速度和 log4J 的误差

java - 可能永远不会发生的重新排序