工程中默認使用聲明式事務,事務控制在service層,規則定義在transaction.xml文件中
* 以select、query、get等開頭的方法為只讀事務
* 以insert、create、save、do等開頭的方法走事務
所以當控制臺報Connection is read-only錯誤時就要注意下service中方法開頭了
```
Caused by: java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
```
transaction.xml文件內容
```
<!-- Spring 通知配置 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="select*" read-only="true"/>
<tx:method name="query*" read-only="true"/>
<tx:method name="get*" read-only="true"/>
<tx:method name="load*" read-only="true"/>
<tx:method name="list*" read-only="true"/>
<tx:method name="insert*" read-only="false" propagation="REQUIRED" rollback-for="Throwable" />
<tx:method name="create*" read-only="false" propagation="REQUIRED" rollback-for="Throwable" />
<tx:method name="save*" read-only="false" propagation="REQUIRED" rollback-for="Throwable" />
<tx:method name="submit*" read-only="false" propagation="REQUIRED" rollback-for="Throwable" />
<tx:method name="update*" read-only="false" propagation="REQUIRED" rollback-for="Throwable" />
<tx:method name="modify*" read-only="false" propagation="REQUIRED" rollback-for="Throwable" />
<tx:method name="del*" read-only="false" propagation="REQUIRED" rollback-for="Throwable" />
<tx:method name="remove" read-only="false" propagation="REQUIRED" rollback-for="Throwable" />
<tx:method name="do*" read-only="false" propagation="REQUIRED" rollback-for="Throwable" />
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- Spring 事務切面配置 -->
<aop:config>
<aop:pointcut id="serviceOperation"
expression="execution(* org.walkframework.base.mvc.service.*.*.*(..)) or execution(* org.walkframework.base.mvc.service.*.*.*.*(..)) or execution(* com.asiainfo.walk.*.mvc.service.*.*.*(..)) or execution(* com.asiainfo.walk.*.mvc.service.*.*.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />
</aop:config>
```
**注意:** 當數據庫是mysql時,如果發現方法開頭也對,代碼任何地方也沒問題,但事務始終就是不生效時,這時就要注意下表的存儲引擎類型了,MyISAM是不支持事務的,可考慮改成InnoDB類型
- walk簡介
- 核心模塊
- walk-data
- IData
- EntityHelper
- walk-cache
- 緩存管理器
- 緩存對象
- 緩存注解
- walk-batis
- 單表操作
- 批量操作
- 列表/分頁查詢
- 所有方法列表
- sql熱部署
- 二級緩存
- 數據庫方言
- 其他使用技巧
- 實體類生成工具
- walk-mq
- 隊列管理器
- 隊列對象
- 訂閱/發布管理器
- 訂閱器
- 發布器
- walk-shiro
- 用戶認證/授權
- url動態授權/回收
- 分布式會話
- 無狀態會話支持
- walk-base
- 前端基礎框架
- 公共頁面
- 自定義標簽
- 自定義函數
- 組件及工具
- 后端基礎框架
- 基礎結構
- 表單校驗
- 數據導入
- 數據導出
- 上傳下載
- 靜態參數加載器
- 靜態參數翻譯器
- 實體類翻譯器
- sql翻譯器
- 自定義翻譯器
- 靜態參數校驗器
- 分布式任務
- 增刪改查代碼生成器
- walk-restful
- 請求報文
- 返回報文
- 節點翻譯器
- api代碼生成
- walk-activiti
- 接口封裝
- 模型管理
- 流程圖展示
- 集成方法
- walk-console
- 在線會話管理
- 靜態參數表緩存管理
- 緩存管理
- 隊列管理
- 發布/訂閱管理
- walk-boot
- 常用功能
- 持久層操作
- 分布式緩存
- 分布式會話
- 分布式任務
- 前端常用功能
- 后端常用功能
- 工作流封裝
- 多數據源支持
- 關于讀寫分離
- 常用工具類
- 代碼生成工具
- SpringCloud集成
- 阿里edas平臺支持
- 其他
- 開發規約
- 環境要求
- 工程示例
- 工程結構
- web工程
- API工程
- 后臺任務
- 常見問題
- 事務不生效
- 分布式任務不生效
- 事務鎖
- 變更歷史