<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
把这句话换成
driver=com.mysql.jdbc.Driver
#2
我试了一下,没什么用啊,跪求大神的指点
#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>
<!-- 配置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
再补充一点,用了v2.c3p0,又用了MapperScannerConfigurer干脆就把数据库连接那里写死得了
#1
driver=com.mysql.driver.Driver
把这句话换成
driver=com.mysql.jdbc.Driver
把这句话换成
driver=com.mysql.jdbc.Driver
#2
我试了一下,没什么用啊,跪求大神的指点
#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>
<!-- 配置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
再补充一点,用了v2.c3p0,又用了MapperScannerConfigurer干脆就把数据库连接那里写死得了