二、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 指定,并开启了延迟加载。
-->
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>
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>
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>
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>
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>
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>
1.8)映射文件编写
该文件所在路径:src\org\bussiness\config\ibatis\SqlMapConfig.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>
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>
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>
二、spring集成ibatis进行数据源事务管理拦截器环境配置的更多相关文章
- Spring中实现多数据源事务管理
文章转自 https://www.2cto.com/kf/201507/424229.html 前言 由于项目中引入了多个数据源,并且需要对多个数据源进行写操作,那么多数据源的事务管理自然成了不可避 ...
- spring + ibatis 多数据源事务(分布式事务)管理配置方法(转)
spring + ibatis 多数据源事务(分布式事务)管理配置方法(转) .我先要给大家讲一个概念:spring 的多数据源事务,这是民间的说法.官方的说法是:spring 的分布式事务.明白了这 ...
- spring+springmvc+mybatis+oracle+atomikos+jta实现多数据源事务管理
---恢复内容开始--- 在做项目过程中,遇到了需要一个项目中访问两个数据库的情况,发现使用常规的spring管理事务,导致事务不能正常回滚,因此,采用了jta+atomikos的分布式数据源方式 ...
- 事务隔离级别与传播机制,spring+mybatis+atomikos实现分布式事务管理
1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单 ...
- Spring事务隔离级别与传播机制详解,spring+mybatis+atomikos实现分布式事务管理
原创说明:本文为本人原创作品,绝非他处转载,转账请注明出处 1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). ...
- Spring+JTA+Atomikos+mybatis分布式事务管理
我们平时的工作中用到的Spring事务管理是管理一个数据源的.但是如果对多个数据源进行事务管理该怎么办呢?我们可以用JTA和Atomikos结合Spring来实现一个分布式事务管理的功能.了解JTA可 ...
- Spring 简单而强大的事务管理功能
开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...
- java框架之Spring(3)-JDBC模板使用&事务管理
下面内容使用到的 jar 包下载 JDBC模板使用 入门 1.导包,如要导入 Spring 的基本开发包.数据库驱动包.Spring 提供的 JDBC 模板包,如下: 2.测试: @Test publ ...
- Spring学习(五)事务管理
Spring 事务管理: 一.事务概念: 1.什么是事务? 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的 ...
随机推荐
- Spring Security教程之Jsp标签(四)
目录 1.1 authorize 1.2 authentication 1.3 accesscontrollist Spring Security也有对Jsp标签的支持的标签库 ...
- Python:时间日历基本处理
time 模块 提供了处理时间和表示之间转换的功能 获取当前时间戳 时间戳:从0时区的1970年1月1日0时0分0秒,到所给定日期时间的时间,浮点秒数,或者毫秒整数 获取方式: import time ...
- ZOJ4104 Sequence in the Pocket(2019浙江省赛)
思维~ #include<bits/stdc++.h> using namespace std; ; int a[maxn]; int b[maxn]; int N; int main ( ...
- 吴裕雄--天生自然Numpy库学习笔记:NumPy 字符串函数
这些函数在字符数组类(numpy.char)中定义. add() 对两个数组的逐个字符串元素进行连接 multiply() 返回按元素多重连接后的字符串 center() 居中字符串 capitali ...
- Cisco Spectrum Expert(Wave2 AP)
在一些版本中,我们可能会发现,AP16,26或AP17,27,37等支持Spectrum Expert Connect (即SE-Connect),该模式可以让AP将频谱分析所述数据发送到对应的分析仪 ...
- WLC-WLC升级(以2504为例)
1.WLC升级需要按照升级路径来操作,低版本到高版本的跨度太大,往往需要升级到中间版本,有时候还涉及到FUS. 2.我们升级,一般使用的笔记本上运行的TFTP/FTP server. 需要注意:笔记 ...
- 【PAT甲级】1056 Mice and Rice (25 分)
题意: 输入两个正整数N和M(<=1000),接着输入两行,每行N个数,第一行为每只老鼠的重量,第二行为每只老鼠出战的顺序.输出它们的名次.(按照出战顺序每M只老鼠分为一组,剩余不足M只为一组, ...
- 【PAT甲级】1048 Find Coins (25 分)(二分)
题意: 输入两个正整数N和M(N<=10000,M<=1000),然后输入N个正整数(<=500),输出两个数字和恰好等于M的两个数(小的数字尽可能小且输出在前),如果没有输出&qu ...
- redhat 7.6 流量监控命令、软件(3)nethogs 监控进程实时流量
1.解压nethogs tar -zxvpf nethogs_0.8.5.orig.tar.gz 2.直接make,这里报错,提示pcap.h,安装libpcap就可以了 3.如果已经安装,还是报错, ...
- Java的进制转换
十进制转其它进制 其它进制转十进制 A进制转B进制可以将十进制作为中间媒介 Integer.toString(int i, int radix) 返回用第二个参数指定基数表示的第一个参数的字符串表示形 ...