publicinterfaceTransactionDefinition{intPROPAGATION_REQUIRED=0;intPROPAGATION_SUPPORTS=1;intPROPAGATION_MANDATORY=2;intPROPAGATION_REQUIRES_NEW=3;intPROPAGATION_NOT_SUPPORTED=4;intPROPAGATION_NEVER=5;intPROPAGATION_NESTED=6;intISOLATION_DEFAULT=-1;intISOLATION_READ_UNCOMMITTED=1;// same as java.sql.Connection.TRANSACTION_READ_UNCOMMITTED;intISOLATION_READ_COMMITTED=2;// same as java.sql.Connection.TRANSACTION_READ_COMMITTED;intISOLATION_REPEATABLE_READ=4;// same as java.sql.Connection.TRANSACTION_REPEATABLE_READ;intISOLATION_SERIALIZABLE=8;// same as java.sql.Connection.TRANSACTION_SERIALIZABLE;intTIMEOUT_DEFAULT=-1;defaultintgetPropagationBehavior(){returnPROPAGATION_REQUIRED;}defaultintgetIsolationLevel(){returnISOLATION_DEFAULT;}defaultintgetTimeout(){returnTIMEOUT_DEFAULT;}defaultbooleanisReadOnly(){returnfalse;}@NullabledefaultStringgetName(){returnnull;}staticTransactionDefinitionwithDefaults(){returnStaticTransactionDefinition.INSTANCE;}}
@ServicepublicclassTransferService{@AutowiredJdbcTemplate jdbcTemplate;@AutowiredPlatformTransactionManager txManager;publicvoidtransfer(){DefaultTransactionDefinition definition =newDefaultTransactionDefinition();TransactionStatus status = txManager.getTransaction(definition);try{
jdbcTemplate.update("update user set account=account+100 where username='zhangsan'");int i =1/0;
jdbcTemplate.update("update user set account=account-100 where username='lisi'");
txManager.commit(status);}catch(DataAccessException e){
e.printStackTrace();
txManager.rollback(status);}}}
基于TransactionTemplate
@ServicepublicclassTransferService{@AutowiredJdbcTemplate jdbcTemplate;@AutowiredTransactionTemplate tranTemplate;publicvoidtransfer(){
tranTemplate.execute(newTransactionCallbackWithoutResult(){@OverrideprotectedvoiddoInTransactionWithoutResult(TransactionStatus status){try{
jdbcTemplate.update("update user set account=account+100 where username='zhangsan'");int i =1/0;
jdbcTemplate.update("update user set account=account-100 where username='lisi'");}catch(DataAccessException e){
status.setRollbackOnly();
e.printStackTrace();}}});}}
intISOLATION_DEFAULT=-1;intISOLATION_READ_UNCOMMITTED=1;// same as java.sql.Connection.TRANSACTION_READ_UNCOMMITTED;intISOLATION_READ_COMMITTED=2;// same as java.sql.Connection.TRANSACTION_READ_COMMITTED;intISOLATION_REPEATABLE_READ=4;// same as java.sql.Connection.TRANSACTION_REPEATABLE_READ;intISOLATION_SERIALIZABLE=8;// same as java.sql.Connection.TRANSACTION_SERIALIZABLE;