Search code examples
postgresqlspring-mvcjdbctomcat8

Spring MVC with postgres and tomcat8


I have big issue with connecting my spring mvc application to postgres database using JDBC. I have this exception:

org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: No suitable driver found for jdbc::postgresql://localhost:5432/myapp
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:388)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:437)
at pl.jsoftworks.gymtracker.restapi.TestController.jdbc(TestController.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:618)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:277)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2403)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2392)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.sql.SQLException: No suitable driver found for    jdbc::postgresql://localhost:5432/myapp
at java.sql.DriverManager.getConnection(DriverManager.java:596)
at java.sql.DriverManager.getConnection(DriverManager.java:187)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriverManager(DriverManagerDataSource.java:153)
at org.springframework.jdbc.datasource.DriverManagerDataSource.getConnectionFromDriver(DriverManagerDataSource.java:144)
at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnectionFromDriver(AbstractDriverBasedDataSource.java:155)
at org.springframework.jdbc.datasource.AbstractDriverBasedDataSource.getConnection(AbstractDriverBasedDataSource.java:120)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
... 42 more

I know there is a lot of topics on that matter, but non is working for me :(

I got postgresql driver in the lib directory of tomcat:

 Katalog: c:\apache-tomcat-8.0.14\lib

 2014-11-19  22:40    <DIR>          .
 2014-11-19  22:40    <DIR>          ..
 2014-09-24  21:03            17 351 annotations-api.jar
 2014-09-24  21:03            52 623 catalina-ant.jar
 2014-09-24  21:03           122 569 catalina-ha.jar
 2014-09-24  21:03            71 773 catalina-storeconfig.jar
 2014-09-24  21:03           253 103 catalina-tribes.jar
 2014-09-24  21:03         1 492 249 catalina.jar
 2014-09-24  21:03         2 298 872 ecj-4.4.jar
 2014-09-24  21:03            81 148 el-api.jar
 2014-09-24  21:03           160 117 jasper-el.jar
 2014-09-24  21:03           587 349 jasper.jar
 2014-09-24  21:03            61 051 jsp-api.jar
 2014-11-16  14:15           592 322 postgresql-9.3-1102-jdbc41.jar
 2014-09-24  21:03           244 101 servlet-api.jar
 2014-09-24  21:03             8 971 tomcat-api.jar
 2014-09-24  21:03           695 816 tomcat-coyote.jar
 2014-09-24  21:03           237 352 tomcat-dbcp.jar
 2014-09-24  21:03            68 092 tomcat-i18n-es.jar
 2014-09-24  21:03            41 480 tomcat-i18n-fr.jar
 2014-09-24  21:03            43 631 tomcat-i18n-ja.jar
 2014-09-24  21:03           134 172 tomcat-jdbc.jar
 2014-09-24  21:03            64 952 tomcat-jni.jar
 2014-09-24  21:03            54 501 tomcat-spdy.jar
 2014-09-24  21:03           197 974 tomcat-util-scan.jar
 2014-09-24  21:03           101 324 tomcat-util.jar
 2014-09-24  21:03           198 771 tomcat-websocket.jar
 2014-09-24  21:03            36 640 websocket-api.jar

I added ths code to tomcat conf/context.xml

<Resource name="jdbc/postgres" auth="Container"
          type="javax.sql.DataSource" driverClassName="org.postgresql.Driver"
          url="jdbc:postgresql://127.0.0.1:5432/myapp"
          username="gtclient" password="zaqwsx" maxActive="20" maxIdle="10" maxWait="-1"/>

and this go into my web.xml

<resource-ref>
    <description>postgreSQL Datasource example</description>
    <res-ref-name>jdbc/postgres</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

here is my servlet bean cfg:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.postgresql.Driver"/>
    <property name="url" value="jdbc::postgresql://localhost:5432/myapp"/>
    <property name="username" value="gtclient"/>
    <property name="password" value="zaqwsx"/>
</bean>

Do You guys have any idea what Im doing wrong? I would be grateful for any help


Solution

  • Just a wild guess here:

    In your datasource bean you have connection string as jdbc::postgresql://localhost:5432/myapp. It should probably be jdbc:postgresql://localhost:5432/myapp (only a single colon after jdbc).