编程式事务:
public static PlatformTransactionManager getTransactionManager() { return transactionManager; } @Resource(name="dsTransactionManager") public void setTransactionManager(PlatformTransactionManager transactionManager) { ContractManageServiceImpl.transactionManager = transactionManager; }public boolean save(String reason,String attach,String operator,String mainId,String process,String incident){ HtxxStop bo = new HtxxStop(); boolean flag = false; try{ final CMInstance instance = new CMInstance(reason,attach,operator,mainId,process,incident,bo.getOperateTime(),bo.getRemoved()); TransactionTemplate tt = new TransactionTemplate(transactionManager); flag = tt.execute(new TransactionCallback<Boolean>() { boolean flag = true; public Boolean doInTransaction(TransactionStatus status) { try{ JdbcTemplate jt = dbUtil.getJdbcTemplate(); instance.action(jt); }catch(Exception e){ e.printStackTrace(); status.setRollbackOnly(); flag = false; } return flag; } }); }catch(Exception e){ } return flag; }
/** */package com.wonders.stpt.contractManage.instance;import org.springframework.jdbc.core.JdbcTemplate;/** * @ClassName: CMInstance * @Description: TODO(这里用一句话描述这个类的作用) * @author zhoushun * @date 2013-6-13 上午11:03:13 * */public class CMInstance { private String reason, attach, operator, mainId, process, incident,operateTime,removed; private static final String insertSql = "insert into ht_xx_stop t " + "(t.id,t.reason,t.attach,t.operator,t.operate_time,t.main_id,t.removed)values(sys_guid(),?,?,?,?,?,?)"; private static final String updateSql1 = "update ht_xx h set h.contract_name = h.contract_name || '<font color=''red''>(此合同异常终止)</font>' , h.flag='99',h.removed=1 where h.id = ?"; private static final String updateSql2 = "update incidents i set i.processname=? ,i.status = '33' where i.processname = ? and i.incident = ?"; public CMInstance(String reason,String attach,String operator,String mainId,String process,String incident,String operateTime,String removed){ this.reason = reason; this.attach = attach; this.operator = operator; this.mainId = mainId; this.process = process; this.incident = incident; this.operateTime = operateTime; this.removed = removed; } public void action(JdbcTemplate jt) throws Exception{ int n0 = jt.update(insertSql,new Object[]{reason,attach,operator,operateTime,mainId,removed}); int n1 = jt.update(updateSql1,new Object[]{mainId}); int n2 = jt.update(updateSql2,new Object[]{process+"(删除)",process,incident}); if(n0 > 0 && n1 > 0 && n2>0){ }else{ throw new Exception("update failed"); } }}
声明式事务
@Transactional(value = "stfb-txManager",propagation=Propagation.REQUIRED,rollbackFor=Exception.class)@Service("coccMain")
<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <description> Schedule Application </description> <!-- =================================================================== --> <!-- Context Define 123 --> <!-- =================================================================== --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>classpath:database.properties</value> </list> </property> </bean> <context:component-scan base-package="com.wonders" /> <!-- =================================================================== --> <!-- Data Source Define (jdbc & jndi) --> <!-- =================================================================== --> <!-- JDBC Configuration --> <bean id="stfb" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${hibernate.connection.driver_class.stfb}" /> <property name="url" value="${hibernate.connection.url.stfb}" /> <property name="username" value="${hibernate.connection.username.stfb}" /> <property name="password" value="${hibernate.connection.password.stfb}" /> </bean> <bean id="stptinc" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${hibernate.connection.driver_class}" /> <property name="url" value="${hibernate.connection.url}" /> <property name="username" value="${hibernate.connection.username}" /> <property name="password" value="${hibernate.connection.password}" /> </bean> <!-- <bean id="stptdemo" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${hibernate.connection.driver_class.new}" /> <property name="url" value="${hibernate.connection.url.new}" /> <property name="username" value="${hibernate.connection.username.new}" /> <property name="password" value="${hibernate.connection.password.new}" /> </bean>--> <!--<bean id="stptdemo" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName"> <value>${hibernate.connection.driver_class.new}</value> </property> <property name="url"> <value>${hibernate.connection.url.new}</value> </property> <property name="username"> <value>${hibernate.connection.username.new}</value> </property> <property name="password"> <value>${hibernate.connection.password.new}</value> </property> <property name="maxActive"> <value>255</value> </property> <property name="maxIdle"> <value>2</value> </property> <property name="maxWait"> <value>120000</value> </property> </bean> --> <bean id="stptdemo" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${hibernate.connection.driver_class.new}"/> <property name="jdbcUrl" value="${hibernate.connection.url.new}"/> <property name="user" value="${hibernate.connection.username.new}"/> <property name="password" value="${hibernate.connection.password.new}"/> <!--此处继续增加c3p0属性--> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。--> <property name="acquireIncrement"> <value>${jdbc.pool.c3p0.acquire_increment}</value> </property> <!--连接池中保留的最大连接数。--> <property name="maxPoolSize" value="${jdbc.pool.c3p0.max_size}" /> <!--连接池中保留的最小连接数。--> <property name="minPoolSize" value="${jdbc.pool.c3p0.min_size}" /> <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --> <property name="maxIdleTime" value="${jdbc.pool.c3p0.max_idle_time}" /> <!--定义所有连接测试都执行的测试语句。在使用连接测试的情况下这个一显著提高测试速度。注意: 测试的表必须在初始数据源的时候就存在。Default: null--> <property name="preferredTestQuery" value="${jdbc.pool.c3p0.preferred_test_query}" /> <!--每60秒检查所有连接池中的空闲连接。Default: 0 --> <property name="idleConnectionTestPeriod" value="${jdbc.pool.c3p0.idle_connection_test_period}" /> <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 <property name="acquireRetryAttempts">30</property>--> <!--两次连接中间隔时间,单位毫秒。Default: 1000 <property name="acquireRetryDelay">1000</property>--> <!--连接关闭时默认将所有未提交的操作回滚。Default: false <property name="autoCommitOnClose">false</property> --> </bean> <!-- JNDI Configuration <bean id="stptinc" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="jdbc/stptinc"/> </bean> <bean id="stptdemo" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="jdbc/stptdemo"/> </bean> --> <!-- JNDI Configuration tomcat <bean id="stptinc" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/stptinc"/> </bean> <bean id="stptdemo" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="java:comp/env/jdbc/stptdemo"/> </bean>--> <!-- =================================================================== --> <!-- SessionFactory(For Hibernate)/ManagerFactory(For JPA) Define --> <!-- ONLY ONE OF THEM SHOULD BE USED --> <!-- =================================================================== --> <!-- class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" spring 2.5之后继承的工厂类 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="stptdemo" /> <property name="configLocation" value="classpath:hibernate.cfg.xml" /> <property name="packagesToScan"><!-- 自动扫描注解 --> <list> <value>com.wonders.*</value> </list> </property> <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"></property> <property name="lobHandler" ref="${jdbc.handler}" /> </bean> <bean id="sessionFactory2" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> <property name="dataSource" ref="stptinc" /> <property name="configLocation" value="classpath:hibernate.cfg.xml" /> <property name="packagesToScan"><!-- 自动扫描注解 --> <list> <value>com.wonders.*</value> </list> </property> <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration"></property> <property name="lobHandler" ref="${jdbc.handler}" /> </bean> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean id="hibernateTemplate2" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory" ref="sessionFactory2"></property> </bean> <!--<bean id = "jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate"> <property name = "dataSource" ref="dataSource"/> </bean> <bean id = "jdbcTemplate2" class = "org.springframework.jdbc.core.JdbcTemplate"> <property name = "dataSource" ref="dataSource2"/> </bean> --> <bean id = "stfb_jdbcTemplate" class = "org.springframework.jdbc.core.JdbcTemplate"> <property name = "dataSource" ref="stfb"/> </bean> <bean id="oracleLobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler"> <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor" /> </bean> <bean id="defaultLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler"> </bean> <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor" lazy-init="true" /> <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean> <bean id="txManager2" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory2"/> </bean> <bean id="dsTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="stptdemo" /> <qualifier value="stptdemo"/> <!-- “限定符” --> </bean> <bean id="dsTransactionManager2" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="stptinc" /> <qualifier value="stptinc"/> </bean> <bean id="stfb-txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="stfb"/> </bean> <tx:annotation-driven transaction-manager="txManager" proxy-target-class="true"/> <tx:annotation-driven transaction-manager="txManager2" proxy-target-class="true"/> <tx:annotation-driven transaction-manager="stfb-txManager" proxy-target-class="true"/> <!-- <aop:aspectj-autoproxy />有一个proxy-target-class属性,默认为false, 表示使用JDK动态代理织入增强,当配置 为<aop:aspectj-autoproxy proxy-target-class="true" />时, 表示使用CGLib动态代理技术织入增强。不过即使proxy-target-class设置为false, 如果目标类没有声明接口,则 Spring将自动使用CGLib动态代理。 --> <!-- jdk 动态代理 必须有接口实现--> <aop:aspectj-autoproxy/> <!-- 强制使用cglib 代理 针对类--> <!-- <aop:aspectj-autoproxy proxy-target-class="true" />--></beans>
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow