首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Struts2 + Spring + JDBC 事務配置:無需 Hibernate 的完整方案

     編輯:程式設計綜合問答

核心原理

Spring 事務管理透過 PlatformTransactionManager 介面實現,JDBC 環境使用 DataSourceTransactionManager,無需 Hibernate。

配置步驟

  1. 資料源 (DBCP/HikariCP/C3P0):
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb"/>
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
</bean>
  1. 事務管理器:
<bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
  1. 啟用註解驅動:
<tx:annotation-driven transaction-manager="transactionManager"/>
  1. Service 層加 @Transactional:
@Service
public class UserService {
    @Autowired private JdbcTemplate jdbcTemplate;

    @Transactional
    public void transfer(String from, String to, double amount) {
        jdbcTemplate.update("UPDATE account SET balance=balance-? WHERE name=?", amount, from);
        jdbcTemplate.update("UPDATE account SET balance=balance+? WHERE name=?", amount, to);
    }
}
  1. Struts2 整合 Spring:struts2-spring-plugin,Action 由 Spring 管理,注入 Service。

XML 宣告式事務 (替代註解)

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="transfer" propagation="REQUIRED" rollback-for="Exception"/>
        <tx:method name="*" propagation="REQUIRED" read-only="true"/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <aop:pointcut id="serviceMethods" expression="execution(* com.example.service.*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods"/>
</aop:config>

常見坑

  • MyISAM 不支援事務,必須用 InnoDB。
  • @Transactional 僅對 public 方法生效,內部呼叫不觸發代理。
  • 預設只回滾 RuntimeException,需 rollbackFor = Exception.class 捕獲受檢異常。
  • 資料源未設定 autoCommit=false (Spring 會自動處理)。

參考資源

Spring JDBC 事務配置完整範例

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved