I am getting the following exception while getting datasource through jndi:
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null
Tomcat's server.xml :
<Resource name="jdbc/testdb" auth="Container" type="javax.sql.DataSource"
username="test" password="test1234"
url="*********"
driverClass="oracle.jdbc.driver.OracleDriver"
initialSize="5" maxWait="5000"
maxActive="120" maxIdle="5"
validationQuery="select 1"
poolPreparedStatements="true"/>
Tomcat's Context.xml :
<ResourceLink name="jdbc/testdb" global="jdbc/testdb"
type="javax.sql.DataSource" />
Spring's servlet xml :
<jee:jndi-lookup id="dataSource" jndi-name="jdbc/testdb" resource-ref="true" />
and final Web.xml :
<resource-ref>
<description>Resource reference to database</description>
<res-ref-name>jdbc/testdb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
Could somebody please help me?
Error Stack trace :
Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
尝试driverClassName
而不是driverClass
:
driverClassName="oracle.jdbc.driver.OracleDriver"
I am using Eclipse STS 3.9.3, tomcat 8.5 and Spring Boot 2.0.0.RELEASE
I spent my entire morning about this problem. So, I did a lot of things to solve:
Remove jdbc dependence from my pom.
<!-- dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency-->
Declaration resource TOMCAT_HOME/CONF/server.xml whit factory:
<GlobalNamingResources> ... <Resource name="jdbc/postgres_jndi" auth="Container" type="javax.sql.DataSource" driverClassName="org.postgresql.Driver" url="jdbc:postgresql://xxx.xxx.xx.xxx:5432/db" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" removeAbandonedOnBorrow="true" removeAbandonedOnMaintenance="true" timeBetweenEvictionRunsMillis="10000" removeAbandonedTimeout="60" logAbandoned="true" username="xxx" password="xxxxxx" maxTotal="20" maxIdle="10" maxWaitMillis="-1"/> ... </GlobalNamingResources>
I realized that I was using Eclipse STS. The tomcat resource on server.xml only works after I put the resource declaration in server.xml inside of "Tomcat v8.5 Server at localhost-config" folder in my Server project. Did not work on TOMCAT_HOME/conf folder in server.xml file.
Change my application.yml to:
spring: datasource: platform: postgres jndi-name: java:comp/env/jdbc/postgres_jndi type: javax.sql.DataSource driver-class-name: org.postgresql.Driver jpa: hibernate: ddl-auto: validate database-platform: org.hibernate.dialect.PostgreSQL9Dialect database: POSTGRESQL show-sql: true #Method org.postgresql.jdbc.PgConnection.createClob() is not yet implemented. properties: hibernate: temp: use_jdbc_metadata_defaults: false
I think that you miss java:comp/env/ yours will be like this:
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/testdb" resource-ref="true" />
A application.properties will be like:
spring.datasource.platform= postgres
spring.datasource.jndi-name= java:comp/env/jdbc/postgres_jndi
spring.datasource.type= javax.sql.DataSource
spring.datasource.driver-class-name= org.postgresql.Driver
spring.jpa.hibernate.ddl-auto= validate
spring.jpa.hibernatedatabase-platform= org.hibernate.dialect.PostgreSQL9Dialect
spring.jpa.database= POSTGRESQL
spring.jpa.show-sql= true
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
Define a context.xml file in src/main/webapp/META-INF/context.xml with definition:
<?xml version="1.0" encoding="UTF-8"?> <Context path="/myapp"> <ResourceLink global="jdbc/postgres_jndi" name="jdbc/postgres_jni" type="javax.sql.DataSource"/> </Context>
Put the file postgresql-42.2.2.jar in the TOMCAT_HOME/lib
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.