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

时间:2022-02-25 04:33:46
首先看配置文件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


6 个解决方案

#1


driver=com.mysql.driver.Driver
把这句话换成
driver=com.mysql.jdbc.Driver

#2


引用 1 楼 t15137830 的回复:
driver=com.mysql.driver.Driver
把这句话换成
driver=com.mysql.jdbc.Driver

我试了一下,没什么用啊,跪求大神的指点

#3


看下你的target里面是否有jdbc.properties这个文件

#4


错误提示没找到${driver}属性,有可能没读到配置,可以先注释掉${driver},看是否{url}也读取不到
<!-- 配置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>

#5


非常感谢大家的支持,问题我发现了,原来是数据库连接池的问题,用的是v2.c3p0,就尽量不要使用MapperScannerConfigurer这个插件,要不然会一直报连接异常,最好办法是用常用的数据库连接池比如:德鲁伊的就很好,兼容性非常棒

#6


引用 5 楼 u012060033 的回复:
非常感谢大家的支持,问题我发现了,原来是数据库连接池的问题,用的是v2.c3p0,就尽量不要使用MapperScannerConfigurer这个插件,要不然会一直报连接异常,最好办法是用常用的数据库连接池比如:德鲁伊的就很好,兼容性非常棒

再补充一点,用了v2.c3p0,又用了MapperScannerConfigurer干脆就把数据库连接那里写死得了

#1


driver=com.mysql.driver.Driver
把这句话换成
driver=com.mysql.jdbc.Driver

#2


引用 1 楼 t15137830 的回复:
driver=com.mysql.driver.Driver
把这句话换成
driver=com.mysql.jdbc.Driver

我试了一下,没什么用啊,跪求大神的指点

#3


看下你的target里面是否有jdbc.properties这个文件

#4


错误提示没找到${driver}属性,有可能没读到配置,可以先注释掉${driver},看是否{url}也读取不到
<!-- 配置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>

#5


非常感谢大家的支持,问题我发现了,原来是数据库连接池的问题,用的是v2.c3p0,就尽量不要使用MapperScannerConfigurer这个插件,要不然会一直报连接异常,最好办法是用常用的数据库连接池比如:德鲁伊的就很好,兼容性非常棒

#6


引用 5 楼 u012060033 的回复:
非常感谢大家的支持,问题我发现了,原来是数据库连接池的问题,用的是v2.c3p0,就尽量不要使用MapperScannerConfigurer这个插件,要不然会一直报连接异常,最好办法是用常用的数据库连接池比如:德鲁伊的就很好,兼容性非常棒

再补充一点,用了v2.c3p0,又用了MapperScannerConfigurer干脆就把数据库连接那里写死得了