在 Spring Boot 应用程序中查找 JNDI 数据源失败
Posted
技术标签:
【中文标题】在 Spring Boot 应用程序中查找 JNDI 数据源失败【英文标题】:Failed to look up JNDI DataSource In Spring Boot Application 【发布时间】:2017-02-07 22:04:32 【问题描述】:我已经为使用外部 tomcat 的 Spring Boot 应用程序的 JNDI 数据源连接完成了下面提到的配置。
Tomcat 的 server.xml 配置类似
<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>
仍然得到像
这样的异常org.springframework.jdbc.datasource.lookup.DataSourceLookupFailureException: 使用名称查找 JNDI 数据源失败 'java:comp/env/jdbc/MyPostgres'
(没有给出完整的堆栈跟踪)
那么解决方案是什么或为什么我会收到此异常。
别想着用嵌入式tomcat服务器来做spring boot。 请帮帮我。
【问题讨论】:
以正确的方式为 spring boot 定义了 application.properties,如 spring.datasource.jndi-name=java:comp/env/jdbc/MyPostgresDB 仍然出现异常(在原始帖子中是拼写错误抱歉) 【参考方案1】:应该是
spring.datasource.jndi-name=java:comp/env/jdbc/MyPostgresDB
根据您在上面的定义中所写的内容。
【讨论】:
抱歉,和你说的完全一样,我发错了,但还是报错 在尝试回答更多问题之前,请阅读How do I write a good answer?。【参考方案2】:我们应该在 server.xml 的 Resource 标签中添加 factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 并确保在扩展 SpringBootServletInitializer 类的类中设置 JndiDatasource
详细答案请参考here
【讨论】:
链接不存在以上是关于在 Spring Boot 应用程序中查找 JNDI 数据源失败的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring Boot Mongodb 中使用聚合框架按计数查找组
Mongodb 查找各组中最新的并在 Spring boot 中实现
Spring Boot - JPA 或 SQL 查询在连接表中查找最常见的项目?
Swagger (Springfox) 仅查找 Controller @RequestBody (Spring Boot) 中使用的模型