您的位置:首页 > 编程语言 > Java开发

Spring 的 @Transactional

2014-06-26 15:01 99 查看
Spring业务的传达行动 在service类前加上@Transactional,声明这个service一切办法需求业务管理。每一个业务办法开始时都会翻开一个业务。 Spring默许情况下会对运行期破例(RunTimeException)进行业务回滚。这个破例是unchecked 假如遇到checked意外就不回滚。 如何改动默许规矩: 1 让checked破例也回滚:在整个办法前加上 @Transactional(rollbackFor=Exception.class) 2 让unchecked破例不回滚: @Transactional http://www.metabase.cn (notRollbackFor=RunTimeException.class) 3 不需求业务管理的(只查询的)办法:@Transactional(propagation=Propagation.NOT_SUPPORTED) 在整个办法运行前就不会敞开业务 还能够加上:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true),这样就做成一个只读业务,能够提高效率。 各种特点的含义: REQUIRED:业务办法需求在一个容器里运行。假如办法运行时,现已处在一个业务中,那么加入到这个业务,否则自个新建一个新的业务。 NOT_SUPPORTED:声明办法不需求业务。假如办法没有相关到一个业务,容器不会为他敞开业务,假如办法在一个业务中被调用,该业务会被挂起,调用完毕后,原先的业务会康复履行。 REQUIRESNEW:不论是否存在业务,该办法总汇为自个建议一个新的业务。假如办法现已运行在一个业务中,则原有业务挂起,新的业务被创立。 MANDATORY:该办法只能在一个现已存在的业务中履行,业务办法不能建议自个的业务。假如在没有业务的环境下被调用,容器抛出破例。 SUPPORTS:该办法在某个业务规模内被调用,则办法变成该业务的一部分。假如办法在该业务规模外被调用,该办法就在没有业务的环境下履行。 NEVER:该办法绝对不能在业务规模内履行。假如在就抛破例。只有该办法没有相关就任何业务,才正常履行。 NESTED:假如一个活动的业务存在,则运行在一个嵌套的业务中。假如没有活动业务,则按REQUIRED特点履行。它使用了一个独自的业务,这个业务具有多个能够回滚的保留点。内部业务的回滚不会对外部业务形成影响。它只对DataSourceTransactionManager业务管理器起效。 业务圈套-1 清单 1. 使用 JDBC 的简略数据库刺进 view plaincopy to clipboardprint? @Stateless public class TradingServiceImpl implements TradingService { @Resource SessionContext ctx; // http://www.metabase.cn @Resource(mappedName="java:jdbc/tradingDS") DataSource ds; public long insertTrade(TradeData trade) throws Exception { Connection dbConnection = ds.getConnection(); try { Statement sql = dbConnection.createStatement(); String stmt = "INSERT INTO TRADE (ACCT_ID, SIDE, SYMBOL, SHARES, PRICE, STATE)" + "VALUES (" + trade.getAcct() + "','" + trade.getAction() + "','" + trade.getSymbol() + "'," + trade.getShares() + "," + trade.getPrice() + ",'" + trade.getState() + "')"; sql.executeUpdate(stmt, Statement.RETURN_GENERATED_KEYS); ResultSet rs = sql.getGeneratedKeys(); if (rs.next()) { return rs.getBigDecimal(1).longValue(); } else { throw new Exception("Trade Order Insert Failed"); } } finally { if (dbConnection != null) dbConnection.close(); } } }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  service spring checked