2019年3月14日 星期四

Transaction (Spring 4.x 三)


<context:annotation-config />
<context:component-scan base-package="bean, dao, service" />
    
<bean id="ds"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    p:driverClassName="oracle.jdbc.driver.OracleDriver"
    p:url="jdbc:oracle:thin:@127.0.0.1:1521:orcl" p:username="user-name"
    p:password="password" />
    
<bean id="jt" class="org.springframework.jdbc.core.JdbcTemplate"
    p:dataSource-ref="ds" />
    
<bean id="txm" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="ds" />
</bean>
    
<tx:annotation-driven transaction-manager="txm"/>

※事務在第3版就有了,更之前的版本我不知道有沒有,寫在 4 並不代表 4 才有

※@Transaction 要配合<tx:annotation driven transaction-manager="" />,且只能使用在 public,否則不啟作用,也不報錯

※在這裡已經設定 JdbcTemplate,如果在下SQL時,自己用 DriverManagerDataSource 取得 JdbcTemplate 也是不啟作用的

※@Transaction 有個屬性 rollbackFor,不設定時為所有例外都會 rollback,如設定 RuntimeException.class,那只有 RuntimeException 時才會 rollback

※還有一些陷阱,高手已經寫好,可參考看看 

沒有留言:

張貼留言