• Spring与Mybatis配置问题


    Spring和Mybatis的整合,主要借助于Spring的依赖注入和控制反转来简化Mybatis的配置,使用两个配置文件【注:此种配置文件网上已经有很多】

    spring.xml:

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans" 
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     4     xmlns:context="http://www.springframework.org/schema/context"
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     6             http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     7             http://www.springframework.org/schema/context    
     8             http://www.springframework.org/schema/context/spring-context-3.1.xsd">
     9     
    10     <context:property-placeholder location="classpath:jdbc.properties" system-properties-mode="NEVER"/>
    11     <!-- 自动扫描 -->
    12     <context:component-scan base-package="com.zhu.test.service"></context:component-scan>        
    13 </beans>

    配置很简单,先使用<context:property-placeholder/>标签引入外部资源文件,再采用包扫描的方式加载com.zhu.test.service包下的所有类,因为其中的业务逻辑类使用了Spring注解,Spring会将其封装成bean供使用。

    spring-mybatis.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans" 
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     4     xmlns:tx="http://www.springframework.org/schema/tx"
     5     xmlns:aop="http://www.springframework.org/schema/aop"
     6     xmlns:context="http://www.springframework.org/schema/context"
     7     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     8             http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     9             http://www.springframework.org/schema/tx 
    10             http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    11             http://www.springframework.org/schema/context    
    12             http://www.springframework.org/schema/context/spring-context-3.1.xsd 
    13             http://www.springframework.org/schema/aop 
    14             http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
    15     
    16     <!-- 配置数据源 -->
    17     <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    18         <!-- <property name="driverClassName" value="${driver}" /> -->
    19         <property name="url" value="${url}" />
    20         <property name="username" value="${username}" />
    21         <property name="password" value="${password}" />
    22         <!-- 初始化时建立物理连接的个数 -->
    23         <property name="initialSize" value="0" />
    24         <!-- 最大连接池数量 -->        
    25         <property name="maxActive" value="20" />    
    26         <!--minIdle: 最小空闲连接-->   
    27         <property name="minIdle" value="0" />
    28         <!-- 获取连接时最大等待时间 -->        
    29         <property name="maxWait" value="60000" />
    30         <!-- 用来检测连接是否有效的sql,要求是一个查询语句 -->
    31         <property name="validationQuery" value="${validationQuery}" />
    32         <!-- 是否申请连接时执行validationQuery检测连接是否有效 -->
    33         <property name="testOnBorrow" value="false" />
    34         <property name="testOnReturn" value="false" />
    35         <property name="testWhileIdle" value="true" />
    36         <property name="timeBetweenEvictionRunsMillis" value="60000" />
    37         <property name="minEvictableIdleTimeMillis" value="25200000" />
    38         <property name="removeAbandoned" value="true" />
    39         <property name="removeAbandonedTimeout" value="1800" />
    40         <property name="logAbandoned" value="true" />
    41         <property name="filters" value="mergeStat" />
    42     </bean>
    43     
    44     <!-- <context:annotation-config></context:annotation-config>  --> 
    45     
    46     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    47         <property name="dataSource" ref="dataSource" />
    48         <property name="mapperLocations" value="classpath:com/zhu/test/mapping/*.xml" />
    49     </bean>
    50     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    51         <property name="basePackage" value="com.zhu.test.dao" />
    52         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> 
    53     </bean>    
    54     
    55     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    56         <property name="dataSource" ref="dataSource" />
    57     </bean>
    58     <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
    59         <tx:attributes>
    60             <tx:method name="add*" propagation="REQUIRED" />
    61             <tx:method name="append*" propagation="REQUIRED" />
    62             <tx:method name="insert*" propagation="REQUIRED" />
    63             <tx:method name="save*" propagation="REQUIRED" />
    64             <tx:method name="update*" propagation="REQUIRED" />
    65             <tx:method name="modify*" propagation="REQUIRED" />
    66             <tx:method name="edit*" propagation="REQUIRED" />
    67             <tx:method name="delete*" propagation="REQUIRED" />
    68             <tx:method name="remove*" propagation="REQUIRED" />
    69             <tx:method name="repair" propagation="REQUIRED" />
    70             <tx:method name="delAndRepair" propagation="REQUIRED" />
    71 
    72             <tx:method name="get*" propagation="SUPPORTS" />
    73             <tx:method name="find*" propagation="SUPPORTS" />
    74             <tx:method name="load*" propagation="SUPPORTS" />
    75             <tx:method name="search*" propagation="SUPPORTS" />
    76             <tx:method name="datagrid*" propagation="SUPPORTS" />
    77 
    78             <tx:method name="*" propagation="SUPPORTS" />
    79         </tx:attributes>
    80     </tx:advice>
    81     <aop:config>
    82         <aop:pointcut id="transactionPointcut" expression="execution(* com.zhu.test.service..*Impl.*(..))" />
    83         <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" />
    84     </aop:config>
    85             
    86 </beans>
    View Code

    该文件所做的工作是配置druid数据源,mybatis的Mapper扫描,扫描指定包下的所有mapper,如此便不用逐条加载mapper了,然后是Spring的事务管理。

    不过,在配置Spring和Mybatis整合时出现了一些问题,记录之:

    ①一直报错

    说白了,就是没找到com.zhu.test.dao包,这个问题折腾了一天多时间,百思不得解,最后无奈从别处复制粘贴,改一下路径和包名,结果就奇迹般的好了,最后终于找到了问题所在,截图为鉴【下次直接全部替换就不会有这样的问题了】:

    1   [com.alibaba.druid.pool.DruidDataSource] - create connection error
    2   java.sql.SQLException: Access denied for user 'Dada'@'localhost' (using password: YES)
    3     at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
    4     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878)
    5     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814)
    6     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871)
    7     at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1694)
    8     at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1215)

    很显然,该错误说明没使用资源文件中的配置连接数据库,相反却使用了本机名不带密码访问数据库,关键在于spring.xml文件中的这句<context:property-placeholder location="classpath:jdbc.properties"/>,<context:property-placeholder />有一个system-properties-mode属性,默认为ENVIRONMENT,会先去系统变量中寻找,修改之<context:property-placeholder location="classpath:jdbc.properties" system-properties-mode="NEVER"/>,值NEVER表示不去寻找系统变量中的值,问题便解决了【参考自http://www.oschina.net/question/873438_234580】。

    另外,关于<context:property-placeholder />:

     1【来自http://blog.csdn.net/ws_blog/article/details/46986051
    <context:property-placeholder 2 location="属性文件,多个之间逗号分隔" 3 file-encoding="文件编码" 4 ignore-resource-not-found="是否忽略找不到的属性文件" 5 ignore-unresolvable="是否忽略解析不到的属性,如果不忽略,找不到将抛出异常" 6 properties-ref="本地Properties配置" 7 local-override="是否本地覆盖模式,即如果true,那么properties-ref的属性将覆盖location加载的属性,否则相反" 8 system-properties-mode="系统属性模式,默认ENVIRONMENT(表示先找ENVIRONMENT,再找properties-ref/location的),NEVER:表示永远不用ENVIRONMENT的,O VERRIDE类似于ENVIRONMENT" 9 order="顺序" 10/>

    另外附上比较详细的讲解,参考自http://blog.csdn.net/Rickesy/article/details/50791534

  • 相关阅读:
    ****阿里云使用+快速运维总结(不断更新)
    Linux 标准目录结构
    linux awk命令
    反射型 DDoS 攻击的原理和防范措施
    容器平台选型的十大模式:Docker、DC/OS、K8S 谁与当先?
    谈谈数据库的跨机房容灾-网易云
    前端 支持 超大上G,多附件上传
    java 支持 超大上G,多附件上传讨论
    java 支持 超大上G,多附件上传分享
    java 支持 超大上G,多附件上传功能
  • 原文地址:https://www.cnblogs.com/NaLanZiYi-LinEr/p/5790661.html
Copyright © 2020-2023  润新知