当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot应用程序中查找JNDI数据源失败

邢英奕
2023-03-14

我已经为使用外部Tomcat的Spring Boot应用程序的JNDI数据源连接进行了bellow提到的配置。

         <GlobalNamingResources>
            <!-- Editable user database that can also be used by
                 UserDatabaseRealm to authenticate users
            -->

            <Resource name="jdbc/MyPostgresDB" 
              global="jdbc/MyPostgresDB" 
              auth="Container" 
              type="javax.sql.DataSource" 
              driverClassName="org.postgresql.Driver" 
              url="jdbc:postgresql://localhost:5432/postgres" 
              username="postgres" 
              password="postgres" 

              maxActive="100" 
              maxIdle="20" 
              minIdle="5" 
              maxWait="10000"/>

context.xml类似

        <Context>

            <!-- Default set of monitored resources -->
            <WatchedResource>WEB-INF/web.xml</WatchedResource>

            <ResourceLink name="jdbc/MyPostgresDB"
                        global="jdbc/MyPostgresDB”
                        auth="Container"
                        type="javax.sql.DataSource" />

为spring boot定义了Application.Properties

spring.datasource.jndi-name=java:comp/env/jdbc/MyPostgres

更新了web.xml,如

        <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">

    <resource-ref>
        <description>JNDI LookUp</description>
        <res-ref-name>jdbc/MyPostgresDB</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个答案

皇甫喜
2023-03-14

我们应该在server.xml的Resource标记中添加factory=“org.apache.tomcat.jdbc.pool.DataSourceFactory”,并确保在扩展SpringBootServletInitializer类的类中设置JndiDatasource

详细答案请参阅此处

 类似资料:
  • 我正在使用嵌入式Jetty 9.2,并试图设置一个需要通过JNDI访问的Oracle数据源。我相信我已经正确地设置了这个,但是它不起作用,尽管花了一天的大部分时间在网上搜索。有人能帮忙吗? 以下是我的启动代码: 这是我的jetty-env.xml(在我的战争的WEB-INF目录中): 这是我的web.xml参考资料: 我得到两个错误。当我启动服务器时,我得到 JAVAlang.IllegalSta

  • 我试图从运行在WebSphere7上的web应用程序中调用SAP web服务。 客户机是从WSDL生成的,我使用JNDI查找来查找服务。查找失败,出现。 网状物xml: JNDI查找: 例外情况: 我已经使用来显示所有的名称,但是我看不到。 有许多JDBC资源也可以通过JNDI访问。这些在垃圾堆中可见,工作正常。 我忘了什么吗?

  • 我在weblogic中创建了一个名为jdbc/myds的oracle数据源。

  • 如果有人能帮助我纠正代码中的问题,我将不胜感激。不知道我哪里错了。 当前我的persistence.xml包含

  • 我的代码无法使用JNDI查找JDBC资源。我得到以下异常: [根异常是javax.naming.nameNotFoundException:context:ppp-14415node01cell/nodes/ppp-14415node01/servers/server1,name:jdbc/admincob:未找到名称admincob中的第一个组件。[根异常是org.omg.cosnaming.n

  • 在查找jdbc数据源的JNDI连接时,我遇到以下错误: javax。命名。ConfigurationException:无法完成“java:”名称上的JNDI操作,因为服务器运行时无法将该操作的线程与任何J2EE应用程序组件关联。当使用“java:”名称的JNDI客户端未在服务器应用程序请求的线程上执行时,可能会出现这种情况。确保J2EE应用程序不会在静态代码块或该J2EE应用程序创建的线程中对“