zoukankan      html  css  js  c++  java
  • 二、spring集成ibatis进行数据源事务管理拦截器环境配置

    1、dataSource-applicationContext.xml文件配置理解:(spring1.2.8+ibatis1.5.3)
    1.1)配置数据源

    DriverManagerDataSource:类实现了 SmartDataSource接口。可以使用bean properties来设置JDBC Driver属性,该类每次返回的都是一个新的连接。
    <beans>
        <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
            <property name="driverClassName">
                <value>oracle.jdbc.driver.OracleDriver</value>
            </property>
            <property name="url">
            <value>jdbc:oracle:thin:@...:1521:LIFERPT</value>
            </property>
            <property name="username">
                <value>...</value>
            </property>
            <property name="password">
                <value>...</value>
            </property>
        </bean>
    
        <!--实际生产中是通过配置weblogic的控制域下面的数据源来进行数据库链接
        <bean id="dataSource"
            class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName">
                <value>ReportDB</value>
            </property>
        </bean>
    <!--
    创建SqlMapClient
    使用iBATIS 2.x来映射刚才的那个Account类,则需要创建这样一个SQL map Account.xml
    iBATIS2的配置文件
        <sqlMapConfig>
          <sqlMap resource="example/Account.xml"/>
        </sqlMapConfig>
    iBATIS从CLASSPATH下加载资源,所以必须确保 Account.xml 在CLASSPATH下。 可以使用Spring container中的 SqlMapClientFactoryBean。
     注意iBATIS SQL Map 2.x中,JDBC DataSource 通常由 SqlMapClientFactoryBean 指定,并开启了延迟加载。
    -->
    View Code

    1.2)设置ibatis

    <!--
    SqlMapClientFactoryBean的主要的几个属性:                            
      1 configLocations                            --ibatis的配置文件的地址                         
      2 mappingLocations                           --Ibatis映射文件路径                          
      3 sqlMapClientProperties                     --ibatis的sqlmapclient的属性          
      4 dataSource                                 --数据源                                              
      5 useTransactionAwareDataSource                           --使用spring 的事务包装数据源       
      6 transactionConfigClass                     --事物配置类                              
      7 transactionConfigProperties                --事物配置属性                       
      8 sqlMapClient
    -->
        <bean id="sqlMapClient"
            class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
            <property name="configLocation">
                <value>
                    /WEB-INF/classes/org/bussiness/config/ibatis/SqlMapConfig.xml
                </value>
            </property>
            <property name="dataSource">
                <ref local="dataSource" />
            </property>
        </bean>
    View Code

    1.3)配置视图解析器    

    <!--
        为将返回的viewname映射到对应的jsp上,在servlet context 配置文件中是这么定义的.
        UrlBasedViewResolver将使用JstlView对象来渲染结果,并将handler method返回的modelAndView基础上,加上目录前缀/WEB-INF/jsp/和文件名称后缀.jsp。
    例如return new ModelAndView(kyDataMannualExtract, map);
    结果返回的viewName为kyDataMannualExtract,则对应的实际jsp为/WEB-INF/jsp/kyDataMannualExtract.jsp
    
    当返回的viewName的前缀为forward:时,spring mvc将结果通过forward的方式转到对应的视图,例如forward:helloworld。这也是spring mvc缺省的使用模式。
    当返回的viewName的前缀为redirect:时,spring mvc将结果通过redirect的方式转到对应的视图。例如redirect:helloworld
    -->    
        <bean id="viewResolver"
            class="org.springframework.web.servlet.view.UrlBasedViewResolver">
            <property name="viewClass"
                value="org.springframework.web.servlet.view.JstlView" />
            <property name="prefix" value="/jsp/" />
            <property name="suffix" value=".jsp" />
        </bean>
    View Code

    1.4)配置spring的简单url拦截器

    <!--
        SimpleUrlHandlerMapping 是Spring的一种拦截器,用于在XML文件中配置以拦截url,它是以map映射的方式进行拦截。映射是从前台urls到具体后台的beans。
    同时支持到bean实例和bean名称的映射,后者要求非单实例控制。urlMap适用于映射到bean引用,而mappings适用于映射到bean的名字。
    -->
        <bean id="urlMapping"
            class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="mappings">
                <description>这里添加URL和处理bean的映射</description>
                <props>
                    <prop key="usherAction.do">usherAction</prop>
                    <prop key="personalAction.do">personalAction</prop>
                    <prop key="organizeAction.do">organizeAction</prop>
                    <prop key="nationalAction.do">nationalAction</prop>
                    <prop key="genQueryAction.do">genQueryAction</prop>
                    <prop key="engineLoadAction.do">engineLoadAction</prop>
                </props>
            </property>
        </bean>
    View Code

    1.5)配置事务管理器

    <!--
        DataSourceTransactionManager类是PlatformTransactionManager接口的一个实现,用于处理单JDBC数据源。它将从指定DataSource取得的JDBC连接绑定到当前线程,
    因此它也支持了每个数据源对应到一个线程DataSourceTransactionManager类支持定制隔离级别,以及对SQL语句查询超时的设定。事务模块的配置,我们抽象出Service层,
    也是为了方便事务操作,可能一组业务需要操作多个DAO,那么显然不能在DAO层做事务,而在业务层做事务是非常合适的,也符合逻辑,我们使用Spring提供的
    DataSourceTransactionManager来配置事务管理器:
    -->
        <bean id="ibatisTransactionManager"
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource">
                <ref local="dataSource" />
            </property>
        </bean>
        <bean id="paraMethodResolver"
            class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
            <property name="paramName">
                <value>action</value>
            </property>
        </bean>
    View Code

    1.6)spring进行事务管理配置

    配置事务模板,模板bean被设置成abstract bean,保证不会被初始化  lazy-init:表示在请求的时候才会被加载属于懒加载
    配置:ServiceAop(TransactionProxyFactoryBean)这个事务代理工厂bean是为了将业务层交给spring进行事务管理
        <bean id="ServiceAop" lazy-init="true" abstract="true"
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
            <!--设置事务属性-->
            <property name="transactionAttributes">
                <props>
                    <!--所有以insert开头的方法,采用required的事务策略,//propagation推广-->
                    <prop key="insert*">PROPAGATION_REQUIRED</prop>
                    <prop key="update*">PROPAGATION_REQUIRED</prop>
                    <!--所有以get开头的方法,采用required的事务策略,并且只读-->
                    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
                    <prop key="check*">PROPAGATION_REQUIRED,readOnly</prop>
                </props>
            </property>
        </bean>
    View Code

    1.7)国际化处理

    <!--
        Spring目前提供了两个MessageSource的实现:ResourceBundleMessageSource和StaticMessageSource。
    它们都继承NestingMessageSource以便能够处理嵌套的消息。StaticMessageSource很少被使用,但能以编程的方式向消息源添加消息。
    ResourceBundleMessageSource会用得更多一些。备注:ApplicationContext实现了MessageSource接口
    下面配置的含义表示:通过ResourceBundle,使用JDK中解析消息的标准方式,来处理任何解析消息的请求。testmess文件中内容为userinfo =cms
    如何测试:
    public static void main(String[] args) {
        MessageSource resources = new ClassPathXmlApplicationContext("beans.xml");
        String message = resources.getMessage("message", null, "Default", null);
        System.out.println(message);
    }
    -->
        <bean id="messageSource"
            class="org.springframework.context.support.ResourceBundleMessageSource">
            <property name="basenames">
                <list>
                    <value>org/properties/testmess</value>
                </list>
            </property>
        </bean>
    </beans>
    View Code

    1.8)映射文件编写

    该文件所在路径:srcorgussinessconfigibatisSqlMapConfig.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE sqlMapConfig 
        PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
    <sqlMapConfig>
         <sqlMap resource="org/bussiness/config/ibatis/oraclesqlmap/TreeSQL.xml"/>
         <sqlMap resource="org/bussiness/config/ibatis/oraclesqlmap/ListReportOrg.xml"/>
         <sqlMap resource="org/bussiness/config/ibatis/oraclesqlmap/PersonalSQL.xml"/>
    </sqlMapConfig>
    View Code

    2、upload-applicationContext.xml

    <beans>
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="defaultEncoding" value="utf-8" />
        </bean>
        <bean id="engineLoadAction" class="org.upload.EngineLoadAction">
            <property name="methodNameResolver">
                <ref bean="paraMethodResolver"/>
            </property>
            <property name="engineService">
                <ref local="engineService"/>
            </property>
            <property name="orgService">
                <ref bean="orgService"/>
            </property>
            <property name="seqService">
                <ref bean="seqService" />
            </property>
            <property name="xmlUpload">
                <value>upload/xmlUpload</value>
            </property>
        </bean>
        <bean id="engineService" class="org.upload.service.EngineService">
            <property name="engineLoadDao">
                <ref local="engineLoadDao"/>
            </property>
            <property name="seqService">
                <ref bean="seqService" />
            </property>
            <property name="personalDao">
                <ref bean="personalDao"/>
            </property>
        </bean>
        <bean id="engineLoadDao" class="org.upload.dao.EngineLoadDao">
            <property name="dataSource">
                <ref bean="dataSource"/>
            </property>
            <property name="sqlMapClient">
                <ref bean="sqlMapClient"/>
            </property>
        </bean>
        <!--AOP事务声明-->
        <bean id="engineServiceAop" parent="ServiceAop">
            <property name="target">
                <ref local="engineService" />
            </property>
        </bean>
    </beans>
    View Code

    3、web.xml文件配置

        <servlet>
            <servlet-name>dispatcherServlet</servlet-name>
            <servlet-class>
                org.springframework.web.servlet.DispatcherServlet
            </servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>
                    /WEB-INF/conf/dataSource-applicationContext.xml,
                    /WEB-INF/conf/upload-applicationContext.xml
                </param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcherServlet</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
    View Code
    细水长流,打磨濡染,渐趋极致,才是一个人最好的状态。
  • 相关阅读:
    关于jpa example使用
    文件下载
    文件夹下的文件根据最后修改时间排序
    前端验证图片是否加载成功
    LocalDate获取当天,本月第一天,本月最后一天,今年第一天,今年最后一天
    将word文档合成一张图片输出
    easyui前端分页与layui前端分页
    Java线程池源码流程图
    hexo发布到gitee和github上及主题优化
    【JVM之美】垃圾收集算法
  • 原文地址:https://www.cnblogs.com/jiarui-zjb/p/8710361.html
Copyright © 2011-2022 走看看