【问题标题】:Tomcat - Spring DataSource JNDI not found but it existsTomcat - 未找到 Spring DataSource JNDI 但它存在
【发布时间】:2014-04-24 02:50:18
【问题描述】:

我有一些问题要让 JndiDataSourceLookup 与 tomcat 一起工作...
我克隆了一个 tomcat,它的所有配置和应用程序从一个 vm 到另一个。 原始安装工作正常,但是当我尝试启动新安装时,它失败了:

Caused by: javax.naming.NameNotFoundException: Name [jdbc/sipreDs] is not bound in this Context. Unable to find [jdbc].

所以我尝试进行一些调试并将我的工厂方法编写为:

@Bean
@SneakyThrows
public DataSource dataSource(){
    Context context = new InitialContext();
    NamingEnumeration<NameClassPair> names = context.list("java:comp/env/jdbc");
    System.out.println("========================================");
    System.out.println("           CONTEXT JNDI");
    System.out.println("========================================");
    while (names.hasMore()){
        NameClassPair name = names.next();
        System.out.println(name.getName());
    }
    System.out.println("=========================================");
    final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
    dsLookup.setResourceRef(true);
    return dsLookup.getDataSource("jdbc/sipreDs");
}

输出是:

========================================
       CONTEXT JNDI
========================================
sipreDs
=========================================

数据源在conf/context.xml文件中定义:

 <Resource name="jdbc/sipreDs" auth="Container" type="javax.sql.DataSource"
           maxActvive="100" maxIdle="30" maxWait="10000"
           username="sipre" password="sipre" driverClassName="org.gjt.mm.mysql.Driver"
           url="jdbc:mysql://localhost:3306/sipre"/>

为什么它使用普通的jndi打印数据源但使用spring会抛出异常?

【问题讨论】:

    标签: java spring tomcat datasource jndi


    【解决方案1】:

    试试下面的

    Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");
    return (DataSource) envCtx.lookup("jdbc/sipreDs");
    

    您似乎在查找上下文和数据源时使用了 jdbc

    【讨论】:

    • 你的意思是之前的代码在Spring中不起作用?我在 Spring 3+ 中多次编写过类似的代码,并在 Tomcat 7 中运行应用程序没有任何问题
    • 直接使用 JNDI 上下文就可以了,Spring 也一样,但是会抛出异常……而且之前,在我复制 tomcat 安装之前,该安装的代码可以工作……
    • 已解决!它有效,问题是mysql用户,我忘了创建它,但是Spring异常让我感到困惑......谢谢!
    猜你喜欢
    • 2012-02-29
    • 2015-03-18
    • 2015-09-11
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 2016-02-14
    • 1970-01-01
    相关资源
    最近更新 更多