Tomcat JDBC数据源查找在Spring应用程序中失败



JDBC JNDI查找在我的应用程序上启动Spring后开始失败。

  1. tomcat上的JDBC数据源设置是正确的,因为它不是spring应用程序能够使用相同的设置进行连接
  2. 尝试在应用程序的spring配置中初始化JNDIFactoryBean
<beans>
<bean id="myDb" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/myDb"/>
<property name="lookupOnStartup" value="true"/>
<property name="proxyInterface" value="javax.sql.DataSource"/>
</bean>
</beans>
  1. 还尝试在应用程序的web.xml中添加资源ref
<resource-ref> 
<res-ref-name>jdbc/myDb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth> 
<res-sharing-scope>Shareable</res-sharing-scope> 
</resource-ref> 
</web-app>
  1. 自从发布这个线程以来,还尝试了spring-config.xml中的'jee:jndi lookup'
<jee:jndi-lookup expected-type="javax.sql.DataSource" id="myDb" jndi-name="java:comp/env/jdbc/myDb"/>

JDBC JNDI数据源设置

CATALINA_HOME/conf/server.xml

<GlobalNamingResources>
......
<Resource auth="Container" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" maxIdle="5" maxTotal="25" name="jdbc/myDb" password="ABDC" type="javax.sql.DataSource" url="jdbc:sqlserver://myServer:1233;databaseName=myDBdbdev" username="myUser"/>
</GlobalNamingResources>

CATALINA_HOME/conf/context.xml

<context>
<ResourceLink global="jdbc/myDb" name="jdbc/myDb" type="javax.sql.DataSource"/>
...
</context>

错误堆栈跟踪

javax.naming.NameNotFoundException:Name[jdbc/myDb]未绑定到此上下文。找不到[jdbc]。在org.apache.naming.NamingContext.ulookup(NamingContext.java:833(org.apache.naming.NamingContext.ulookup(NamingContext.java:174(org.apache.namening.SelectorContext.ulookup(SelectorContext.java:163(位于的javax.naming.InitialContext.ulookup(未知源(com.abc.myapp.db.DataSourceFactory.createPool(DataSourceFactory.java:126(网址:com.abc.myapp.db.DataSourceFactory.init(DataSourceFactory.jav

获取数据源的代码

InitialContext ctx = new InitialContext();
ds = (DataSource)ctx.lookup("jdbc/myDb");

我刚刚发现以下代码有助于正确获取数据源:

InitialContext ctx = new InitialContext();
ds = (DataSource)ctx.lookup("java:comp/env/jdbc/myDb")

最新更新