2017-08-01 2 views
0

Je suis nouveau au printemps et fait actuellement exactement comme un tutorial youtube. Lorsque je demande la méthode api par GET de PostMan, j'ai eu une erreur bizarre suivante.Impossible d'obtenir la connexion JDBC au printemps

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/SpringRESTFulExample] threw exception [Request processing failed; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'] with root cause 
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720) 
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1420) 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111) 
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77) 
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:619) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:684) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:711) 
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:761) 
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.query(NamedParameterJdbcTemplate.java:192) 
    at springrestful_example.dao.UserDaoImpl.listAllUser(UserDaoImpl.java:30) 
    at springrestful_example.service.UserServiceImpl.listAllUser(UserServiceImpl.java:22) 
    at springrestful_example.controller.UserController.listAllUser(UserController.java:25) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:620) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

Le didacticiel utilise JndiTemplate.lookup pour la connexion. Voilà.

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = "springrestful_example") 
public class WebConfig { 
    @Autowired 
    DataSource dataSource; 

    @Bean 
    public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() { 
     return new NamedParameterJdbcTemplate(dataSource); 
    } 

    @Bean 
    public DataSource getDataSource() throws NamingException{ 
     JndiTemplate jndiTemplate = new JndiTemplate(); 
     DataSource dataSource = (DataSource) jndiTemplate.lookup("java:comp/env/jdbc/springrestful"); 
     return dataSource; 
    } 
} 

Dans server.xml de tomcat v7.0, je fais la configuration suivante comme le tutoriel, sauf le nom de la base de données.

<Context docBase="D:\zwh\WorkSpaces\JavaEE Workspace\SpringRESTFulExample\target\SpringRESTFulExample-0.0.1-SNAPSHOT\" path="/SpringRESTFulExample" reloadable="true"> 
    <Resource 
    auth="Container" 
    driverClassName="com.mysql.jdbc.Driver" 
    maxActive="5" maxIdle="3" 
    name="jdbc/springrestful" 
    passoword="" 
    type="javax.sql.DataSource" 
    url="jdbc:mysql://localhost:3306/springresttest" 
    username="root"/> 

Suis-je manque quelque chose? J'ai déjà fait des recherches à ce sujet pendant trois jours, mais je n'ai trouvé que des choses qui ne sont pas liées au tutoriel. J'ai essayé de changer la version de la dépendance spring-jdbc. Mais n'a pas fonctionné non plus.

+4

Avez-vous ajouté la classe de pilote à votre classpath? – csmckelvey

+0

non, comment et où? –

+0

Je suis sûr que si vous faites une recherche Google pour 'ajouter une classe à classpath', vous trouverez de nombreux exemples et explications. – csmckelvey

Répondre

0

Je résolu mon problème après avoir ajouté mysql-connector-java dépendance à mon pom.xml.

<dependency> 
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
    <version>6.0.6</version> 
</dependency> 
0

Essayez d'ajouter cette dépendances:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-data-jpa</artifactId> 
</dependency> 

<dependency> 
    <groupId>mysql</groupId> 
    <artifactId>mysql-connector-java</artifactId> 
</dependency> 
+0

ajouté mais cela ne fonctionne pas –