gpt4 book ai didi

java - Tomcat - 未找到 Spring DataSource JNDI 但它存在

转载 作者:行者123 更新时间:2023-11-28 23:38:22 25 4
gpt4 key购买 nike

我在使用 tomcat 运行 JndiDataSourceLookup 时遇到了一些问题...
我将一个 tomcat 及其所有配置和应用程序从一个虚拟机克隆到另一个虚拟机。原来的安装工作正常,但是当我尝试启动新安装时它失败了:

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却抛出异常?

最佳答案

尝试以下操作

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

看起来你在查找上下文和数据源时使用了jdbc

关于java - Tomcat - 未找到 Spring DataSource JNDI 但它存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22479100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com