亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

詳解MySQL與Spring的自動提交(autocommit)

瀏覽:35日期:2023-02-06 09:07:26
1 MySQL的autocommit設置

MySQL默認是開啟自動提交的,即每一條DML(增刪改)語句都會被作為一個單獨的事務進行隱式提交。如果修改為關閉狀態,則執行DML語句之后要手動提交 才能生效。查詢當前會話的自動提交是否開啟:

mysql> show variables like ’autocommit’;+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit | ON |+---------------+-------+

查詢全局的自動提交是否開啟:

mysql> show global variables like ’autocommit’;+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit | ON |+---------------+-------+

通過修改autocommit變量可以關閉和開啟操作

關閉當前會話的自動提交模式mysql> set autocommit=0; mysql> show variables like ’autocommit’;+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit | OFF |+---------------+-------+ 全局的autocommit還是開啟狀態mysql> show global variables like ’autocommit’;+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit | ON |+---------------+-------+ 關閉全局的autocommitmysql> set global autocommit=0; mysql> show global variables like ’autocommit’;+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit | OFF |+---------------+-------+

如果想要MySQL服務重啟之后仍能生效,需要設置系統環境變量。MySQL5.7 在cnf配置文件中[mysqld]下面設置autocommit的值。

[mysqld]...autocommit=0Spring中對自動提交的控制

MySQL的JDBC驅動包 mysql-connector-java 會給會話的connection默認開啟自動提交,譬如 mysql-connector-java-8.0.22版本的代碼:

//com.mysql.cj.protocol.a.NativeServerSession.java private boolean autoCommit = true;

常用的數據庫連接池 如HikariCP,druid等,默認也是開啟自動提交,會將connection的自動提交設置都改為true。druid在初始化DataSource的時候設置connection的autocommit為true。代碼如下:

com.alibaba.druid.pool.DruidAbstractDataSource.java protected volatile boolean defaultAutoCommit = true; ... public void initPhysicalConnection(Connection conn, Map<String, Object> variables, Map<String, Object> globalVariables) throws SQLException { if (conn.getAutoCommit() != defaultAutoCommit) { //將connection的autocommit設置為true conn.setAutoCommit(defaultAutoCommit); } ... }

HikariCP 初始化DataSource的默認配置 中autocommit也是true:

com.zaxxer.hikari.HikariConfig.java public HikariConfig() { ... isAutoCommit = true; }

對于事務管理器PlatformTransactionManager管理的顯式事務(譬如@Transactional注解聲明)在 開啟事務時會關閉自動提交模式。 代碼如下:

@Overrideprotected void doBegin(Object transaction, TransactionDefinition definition) {DataSourceTransactionObject txObject = (DataSourceTransactionObject) transaction;Connection con = null;try { ........// Switch to manual commit if necessary. This is very expensive in some JDBC drivers,// so we don’t want to do it unnecessarily (for example if we’ve explicitly// configured the connection pool to set it already).if (con.getAutoCommit()) {txObject.setMustRestoreAutoCommit(true);if (logger.isDebugEnabled()) {logger.debug('Switching JDBC Connection [' + con + '] to manual commit');}//關閉自動提交模con.setAutoCommit(false);} .......}catch (Throwable ex) { .......}}總結

MySQL的autocommit模式默認是打開狀態,為了防止手動的DML操作導致失誤,生產環境可以設置為默認關閉的狀態。一般的jdbc 連接池默認都是開啟狀態,而且是可配置的。顯式事務下會設置成關閉狀態,單純的修改數據庫環境的autocommit不會對代碼的行為產生影響。

以上就是詳解MySQL與Spring的自動提交(autocommit)的詳細內容,更多關于MySQL 自動提交(autocommit)的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
主站蜘蛛池模板: 97视频免费在线观看 | 国产三级a三级三级午夜 | 亚洲欧美在线看 | 精品欧美高清不卡在线 | 日本肥老妇色xxxxx日本老妇 | 欧美kkk4444在线观看 | 久久视屏这里只有精品6国产 | 中国一级做a爱片免费 | 91亚洲欧美| 天码毛片一区二区三区入口 | 一级国产交换配乱淫 | 国产精品一区伦免视频播放 | 久久精品国产在爱久久 | 国产在线精品一区二区三区不卡 | 国产小片 | 久久久久爽亚洲精品 | 国产午夜在线观看视频播放 | 你懂的国产精品 | 在线看免费观看韩国特黄一级 | 窝窝女人体国产午夜视频 | 99精彩视频在线观看 | 久久精品高清 | 国产成人午夜精品免费视频 | 失禁h啪肉尿出来高h健身房 | aa级毛片毛片免费观看久 | 国产日韩一区二区三区在线播放 | 国产欧美一区二区三区在线看 | 国产精品成久久久久三级 | 日本欧美韩国一区二区三区 | 国产精品所毛片视频 | 热99re久久国超精品首页 | 精品日本一区二区三区在线观看 | 国产后式a一视频 | 国产精品1区2区 | 国产午夜精品久久久久小说 | 在线播放第一页 | 中国美女隐私无遮挡免费视频 | 2017天天爽夜夜爽精品视频 | 能在线观看的一区二区三区 | 国产手机精品视频 | 国产欧美一区二区三区免费 |