我已经为使用外部tomcat的Spring Boot Application的JNDI DataSource连接做了下面提到的配置。
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.propertiesspring.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 DataSource &#39;的java:comp / env的/ JDBC / MyPostgres&#39;
(完全Stacktrace没有给出每个给定的位置)
那么解决方案是什么或为什么我得到这个例外。
不要为嵌入式tomcat服务器提供弹簧启动的想法。 请帮帮我。
答案 0 :(得分:1)
我们应该添加factory =&#34; org.apache.tomcat.jdbc.pool.DataSourceFactory&#34;在server.xml的Resource标签中,确保在扩展SpringBootServletInitializer类的类中设置JndiDatasource
如需精心解答,请参阅here
答案 1 :(得分:-1)
应该是
spring.datasource.jndi名=的java:comp / env的/ JDBC / MyPostgres的 DB 强>
来自您在定义中的上述内容。