springmvc连接数据库时,报连接失败了

首先看配置文件applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- 扫描注解所在的包 -->       
    <context:component-scan base-package="cn.jzh"></context:component-scan> 
    <!-- 加载jdbc配置 -->
   <bean class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
           <property name="location" value="classpath:jdbc.properties"></property>
   </bean>
   <!-- 配置datasource -->
   <bean id ="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
           <property name="driverClass" value="${driver}"></property>
           <property name="jdbcUrl" value="${url}"></property>
           <property name="user" value="${name}"></property>
           <property name="password" value="${pass}"></property>
   </bean>
    <!-- 配置sqlsessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="mapperLocations" value="classpath:cn/jzh/mapper/*Mapper.xml"></property>
    </bean>
   <!-- 3.配置MapperScannerConfigurer,用于扫描指定包下的Mapper接口,
         生成代理对象的id为Mapper接口名第一个字母小写(userinfoMapper) --> 
   <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
           <property name="basePackage" value="cn.jzh.mapper"></property>
           <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
   </bean>
   <!-- 声明事务 -->
   <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
           <property name="dataSource" ref="dataSource"></property>
   </bean>
   <tx:advice id="txAdvice" transaction-manager="transactionManager">
           <tx:attributes>
               <tx:method name="*" propagation="REQUIRED"/>
           </tx:attributes>
   </tx:advice>
   <aop:config>
           <aop:pointcut expression="execution(* cn.jzh.service.*.*(..))" id="myPointcut"/>
           <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"/>
   </aop:config>

再看jdbc.properties配置文件

driver=com.mysql.driver.Driver
url=jdbc:mysql://127.0.0.1:3306/springmvc
name=root
pass=root

再看springmvc.xml配置文件

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context.xsd">
      <!-- 扫面注解 -->
      <context:component-scan base-package="cn.jzh"></context:component-scan>
      <!-- 映射器和处理器 -->
      <mvc:annotation-driven></mvc:annotation-driven>
      <!-- 视图解析 -->
      <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
          <property name="prefix" value="/WEB-INF/view/"></property>
          <property name="suffix" value=".jsp"></property>
      </bean>
</beans>

再看看web.xml的配置文件:

<context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <filter>
      <filter-name>encoding</filter-name>
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>encoding</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  <servlet>
      <servlet-name>springmvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:springmvc.xml</param-value>
      </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>

再看controller层:

@Controller
@RequestMapping("/user")
public class UserController {
    @Resource(name="userService")
    private UserService service;
 
    @RequestMapping("/list")
    public String list(Model model){
        List<User> list = service.getAll();
        model.addAttribute("list",list);
        return "list";
    }
}

index.jsp的页面就这一句话:

<a href="user/list">用户列表显示</a>

另外:(1)项目启动的时候,没有报错;
(2)如果把连接数据库那一块直接写死,即把jdbc.properties文件里面的内容直接写在那里就可以直接连接上去了
(3)jdbc.properties配置文件是没问题的,我在另一个项目里面测试了是可以直接使用的,每一行末尾没有加空格
(4)我在网上查了后,在jdk/jre/lib/exc(貌似是这个路径)文件夹下添加了mysql-connector-java-5.1.40.jar,发现还是没用,索性就又删除了
附:报错示例:

java.lang.ClassNotFoundException: ${driver}
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1291)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at com.mchange.v2.c3p0.DriverManagerDataSource.ensureDriverLoaded(DriverManagerDataSource.java:143)
    at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:173)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
    at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870)
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
2018-09-10 10:15:01,126 [C3P0PooledConnectionPoolManager[identityToken->1b607sx9x1hmebr7ojt0vu|462f8574]-HelperThread-#1] DEBUG [com.mchange.v2.resourcepool.BasicResourcePool] - An exception occurred while acquiring a poolable resource. Will retry.
java.sql.SQLException: No suitable driver
    at java.sql.DriverManager.getDriver(DriverManager.java:315)
    at com.mchange.v2.c3p0.DriverManagerDataSource.driver(DriverManagerDataSource.java:285)
    at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:175)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
    at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1870)
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
2018-09-10 10:15:02,064 [C3P0PooledConnectionPoolManager[identityToken->1b607sx9x1hmebr7ojt0vu|462f8574]-HelperThread-#0] WARN  [com.mchange.v2.c3p0.DriverManagerDataSource] - Could not load driverClass ${driver}
java.lang.ClassNotFoundException: ${driver}
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1291)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at com.mchange.v2.c3p0.DriverManagerDataSource.ensureDriverLoaded(DriverManagerDataSource.java:143)
    at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:173)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:220)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:206)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:203)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1138)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1125)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
    at com.mchange.v2.reso

最终解决方案:

       用的是v2.c3p0,就尽量不要使用MapperScannerConfigurer这个插件,要不然会一直报连接异常,最好办法是用常用的数据库连接池比如:德鲁伊的就很好,兼容性非常棒,用了v2.c3p0,又用了MapperScannerConfigurer干脆就把数据库连接那里写死得了

猜你喜欢

转载自blog.csdn.net/u012060033/article/details/82621879