<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-autowire="byName">
<!-- Configurer that replaces ${...} placeholders with values from a properties
file -->
<!-- (in this case, JDBC-related settings for the dataSource definition
below) -->
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:spring/jdbc.properties</value>
</list>
</property>
</bean>
<bean id="dataSourceMysql" class="com.atomikos.jdbc.AtomikosDataSourceBean"
init-method="init" destroy-method="close">
<property name="uniqueResourceName" value="${mysql.uniqueResourceName}" />
<property name="xaDataSourceClassName" value="${mysql.xaDataSourceClassName}" />
<property name="xaProperties">
<props>
<prop key="user">${mysql.user}</prop>
<prop key="password">${mysql.password}</prop>
<prop key="URL">${mysql.url}</prop>
</props>
</property>
<property name="poolSize" value="${mysql.poolSize}" />
</bean>
<bean id="dataSourceOracle" class="com.atomikos.jdbc.AtomikosDataSourceBean"
init-method="init" destroy-method="close">
<property name="uniqueResourceName" value="${oracle.uniqueResourceName}" />
<property name="xaDataSourceClassName" value="${oracle.xaDataSourceClassName}" />
<property name="xaProperties">
<props>
<prop key="user">${oracle.user}</prop>
<prop key="password">${oracle.password}</prop>
<prop key="URL">${oracle.url}</prop>
</props>
</property>
<property name="poolSize" value="${oracle.poolSize}" />
</bean>
<!-- Construct Atomikos UserTransactionManager, needed to configure Spring -->
<bean id="atomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager"
init-method="init" destroy-method="close">
<!-- when close is called, should we force transactions to terminate or
not? -->
<property name="forceShutdown" value="${transactionManager.forceShutdown}" />
</bean>
<!-- Also use Atomikos UserTransactionImp, needed to configure Spring -->
<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp">
<property name="transactionTimeout" value="${transactionManager.transactionTimeout}" />
</bean>
<!-- Configure the Spring framework to use JTA transactions from Atomikos -->
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager">
<ref bean="atomikosTransactionManager" />
</property>
<property name="userTransaction">
<ref bean="atomikosUserTransaction" />
</property>
</bean>
<bean id="txManager"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager">
<ref bean="transactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="save*">PROPAGATION_REQUIRED, +AuaException</prop>
</props>
</property>
</bean>
<bean id="studentOracleDao" class="com.aua.dao.oracle.StudentDao" />
<bean id="studentMysqlDao" class="com.aua.dao.mysql.StudentDao" />
<bean id="studentService" parent="txManager">
<property name="target">
<bean class="com.aua.service.impl.StudentService" />
</property>
</bean>
</beans>
简单来说就是 单一的逻辑单元处理一系列事物。 *** 作一系列数据时,如有一条不合适或取消,所有数据均会到最初状态,即回滚。说的比较抽象,我给你举个小例子你就明白了。
例如 ATM 机。
用户把钱从一个银行账号转账至另一个银行账号,这种 *** 作不能被部分完成。
如转的过程中 1卡钱被相应扣除,2卡在存中,这时机器出现故障,转账被取消。取消的同时,即要事物回滚,回到1卡原有的状态。
明白了吗
事务管理对于一系列数据库 *** 作进行管理。一个事务包含一个或多个SQL语句,是逻辑管理的工作单元(原子单元)。
一个事务开始于第一次执行的SQL语句,结束于Commit
或
Rollback
或
DDL语句。
注意:其中Commit,
Rollback是显示的提交事务,而DDL语句是隐式的提交事务的。DDL语句的 *** 作是没有办法回滚的。
事务处理(TRANSACTION)是由一个或多个SQL语句序列结合在一起所形成的一个逻辑处理单元。事务处理中的每个语句都是完成整个任务的一部分工作,所有的语句组织在一起能够完成某一特定的任务。DBMS在对事务处理中的语句进行处理时,是按照下面的约定来进行的,这就是“事务处理中的所有语句被作为一个原子工作单位,所有的语句既可成功地被执行,也可以没有任何一个语句被执行”。DBMS负责完成这种约定,即使在事务处理中应用程序异常退出,或者是硬件出现故障等各种意外情况下,也是如此。在任何意外情况下,DBMS都负责确保在系统恢复正常后,数据库内容决不会出现“部分事务处理中的语句被执行完”的情况。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)