maintestfortransactionawaredatasourceproxy.java
来自「随书光盘:精通Sping 2.0 的随书源代码」· Java 代码 · 共 60 行
JAVA
60 行
package org.springframework.samples;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.generic.GenericBeanFactoryAccessor;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.support.JdbcUtils;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallbackWithoutResult;
import org.springframework.transaction.support.TransactionTemplate;
/**
*
* @author worldheart
*
*/
public class MainTestForTransactionAwareDataSourceProxy {
private static final Log log = LogFactory.getLog(MainTestForTransactionAwareDataSourceProxy.class);
public static void main(String[] args) {
ListableBeanFactory cbf = new ClassPathXmlApplicationContext("ac4.xml");
GenericBeanFactoryAccessor gbfa = new GenericBeanFactoryAccessor(cbf);
TransactionTemplate tt = gbfa.getBean("transactionTemplate");
//如果将dataSource替换成dataSourceTarget,
//则即使status.setRollbackOnly()执行了,last_name还是被更新了
final DataSource ds = gbfa.getBean("dataSource");
tt.execute(new TransactionCallbackWithoutResult(){
@Override
protected void doInTransactionWithoutResult(TransactionStatus status) {
Connection conn = null;
Statement stat = null;
try{
conn = ds.getConnection();
stat = conn.createStatement();
log.info(stat.executeUpdate(
"update owners set last_name = 'Luo' where telephone = '16068008'"));
//标识事务回滚
status.setRollbackOnly();
}catch(SQLException exec){
log.error(exec);
} finally{
JdbcUtils.closeStatement(stat);
JdbcUtils.closeConnection(conn);
}
}
});
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?