spring4和mybatis3整合

来源:互联网 发布:程序员开发软件 编辑:程序博客网 时间:2024/05/19 05:30

整合环境:

spring:4.2.4.RELEASE

mybatis:3.3.0


由于整合过程遇到很多问题,故在此记录整合配置,方便下次查阅,希望对各位同学有参考价值。


<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"default-autowire="byName" default-lazy-init="true"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:cache="http://www.springframework.org/schema/cache"xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsdhttp://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-4.2.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"><!-- 启用注解 --><context:annotation-config /><!-- 启动组件扫描,排除@Controller组件,该组件由SpringMVC配置文件扫描 --><context:component-scan base-package="com.wy2.work"><!-- <context:exclude-filter type="regex" expression="com.wy2.work.web.*" /> --><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /></context:component-scan><!-- 属性配置 --><bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">       <property name="ignoreResourceNotFound" value="true"></property>     <property name="ignoreUnresolvablePlaceholders" value="true"></property>     <property name="systemPropertiesMode" value="OVERRIDE"></property><property name="locations">  <list>                   <value>classpath:webconfig.properties</value>                 <value>classpath:dbconfig.properties</value>            </list>          </property>  </bean>   <!-- 配置事务管理器 -->    <bean id="txManager"        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource"></property>    </bean>        <!-- 定义个通知,指定事务管理器 -->    <tx:advice id="txAdvice" transaction-manager="txManager">        <tx:attributes>            <tx:method name="delete*" propagation="REQUIRED" read-only="false"                rollback-for="java.lang.Exception" />            <tx:method name="save*" propagation="REQUIRED" read-only="false"                rollback-for="java.lang.Exception" />            <tx:method name="insert*" propagation="REQUIRED" read-only="false"                rollback-for="java.lang.Exception" />            <tx:method name="update*" propagation="REQUIRED" read-only="false"                rollback-for="java.lang.Exception" />            <tx:method name="load*" propagation="SUPPORTS" read-only="true"/>            <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>            <tx:method name="search*" propagation="SUPPORTS" read-only="true"/>            <tx:method name="select*" propagation="SUPPORTS" read-only="true"/>            <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>        </tx:attributes>    </tx:advice>        <aop:config>        <!-- 配置一个切入点 -->        <aop:pointcut id="serviceMethods" expression="execution(* com.wy2.work.serviceimpl.*ServiceImpl.*(..))" />        <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" />    </aop:config><!-- 配置数据源, 整合其他框架, 事务等. -->   <!-- 阿里 druid数据库连接池 --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">           <!-- 数据库基本信息配置 -->         <property name="url" value="${url}" />           <property name="username" value="${username}" />           <property name="password" value="${password}" />           <property name="driverClassName" value="${driverClassName}" />           <property name="filters" value="${filters}" />      <!-- 最大并发连接数 -->         <property name="maxActive" value="${maxActive}" />         <!-- 初始化连接数量 -->         <property name="initialSize" value="${initialSize}" />         <!-- 配置获取连接等待超时的时间 -->         <property name="maxWait" value="${maxWait}" />         <!-- 最小空闲连接数 -->         <property name="minIdle" value="${minIdle}" />      <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->         <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" />         <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->         <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" />           <property name="validationQuery" value="${validationQuery}" />           <property name="testWhileIdle" value="${testWhileIdle}" />           <property name="testOnBorrow" value="${testOnBorrow}" />           <property name="testOnReturn" value="${testOnReturn}" />           <property name="maxOpenPreparedStatements" value="${maxOpenPreparedStatements}" />         <!-- 打开removeAbandoned功能 -->         <property name="removeAbandoned" value="${removeAbandoned}" />         <!-- 1800秒,也就是30分钟 -->         <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" />         <!-- 关闭abanded连接时输出错误日志 -->            <property name="logAbandoned" value="${logAbandoned}" /></bean>        <!--Mybatis 配置Session工厂 注意:org.mybatis.spring.SqlSessionFactoryBean 不要用默认名称:sqlSessionFactory -->    <bean id="sqlSessionFactoryA" class="org.mybatis.spring.SqlSessionFactoryBean">        <property name="dataSource" ref="dataSource"></property>        <!-- 加载mybatis.cfg.xml文件 -->        <property name="configLocation" value="classpath:mybatis/mybatis-cfg.xml"></property>        <!-- 自动扫描需要定义类别名的包,将包内的JAVA类的类名作为类别名 -->        <!-- <property name="typeAliasesPackage" value="com.wy2.work.entities.hibernate"></property> -->        <!-- mapper扫描 -->        <property name="mapperLocations" value="classpath:mybatis/*/*.xml"></property>    </bean>        <!-- 自动扫描所有的Mapper接口与文件 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.wy2.work.mybatisdao"></property><property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryA"></property></bean>     <!-- <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg ref="sqlSessionFactory" /></bean>  -->               <!-- spring jdbcTemplate -->    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource" /></bean><!-- <bean id="nativeJdbcExtractor"class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"lazy-init="true" /><bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler"lazy-init="true"><property name="nativeJdbcExtractor" ref="nativeJdbcExtractor" /></bean> --><!-- 异步线程池 -->  <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"><property name="corePoolSize" value="3" />  <property name="maxPoolSize" value="10" /><property name="queueCapacity" value="10" /><property name="keepAliveSeconds" value="300" /><property name="rejectedExecutionHandler">       <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" />      </property>    </bean><!-- 属性读取器 -->     <bean id="propertiesManager" class="com.wy2.core.web.spring.commons.PropertiesManager"><property name="items"><map><entry key="file.configId" value="${file.configId}" />        <entry key="userSessionName" value="${userSessionName}" />    <entry key="userInitPassword" value="${userInitPassword}" />        <entry key="manage.pagesize" value="${manage.pagesize}" /><entry key="productName" value="${productName}" /><entry key="productVersion" value="${productVersion}" /><entry key="productAuthor" value="${productAuthor}" /><entry key="productRelease" value="${productRelease}" /></map></property></bean>    <aop:aspectj-autoproxy proxy-target-class="true"/>                  <import resource="springcache.xml"/></beans>


如果报以下错误,可 能是org.mybatis.spring.SqlSessionFactoryBean的Id使用的sqlSessionFactory,改名就好了。相应要配置扫描器中的bean名称

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource [spring-mybatis.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'maxActive'; nested exception is java.lang.NumberFormatException: For input string: "${maxActive}"    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305)    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301)    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:835)    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537)    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)    at com.cetc.di.db.secretkeydb.test.SecretKeyTest.<init>(SecretKeyTest.java:23)    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)    at java.lang.reflect.Constructor.newInstance(Constructor.java:422)    at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:195)    at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:244)    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)    at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:241)    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'maxActive'; nested exception is java.lang.NumberFormatException: For input string: "${maxActive}"    at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:596)    at org.springframework.beans.AbstractNestablePropertyAccessor.convertForProperty(AbstractNestablePropertyAccessor.java:603)    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:204)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1527)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1486)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226)    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)    ... 33 moreCaused by: java.lang.NumberFormatException: For input string: "${maxActive}"    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)    at java.lang.Integer.parseInt(Integer.java:569)    at java.lang.Integer.valueOf(Integer.java:766)    at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:194)    at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:113)    at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:464)    at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:437)    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:195)    at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:576)    ... 39 more



1 0
原创粉丝点击