今天在学习Spring事务的时候,遇到了一个很棘手的问题,代码没有任何问题,就是事务执行不成功,经过多方搜集资料查证,竟然发现是MySQL数据库引擎不支持,我直接原地去世,还有着操作,最终解决,将其分享给大家!!!
引擎类型 | 区别 |
---|---|
InnoDB | 可靠的事务处理引擎,它不支持全文本搜索,支持事务 |
MEMORY | 在功能等同于MyISAM,但由于存储数据在内存(不是磁盘)中,所以速度很快(特别适合于临时表),它使用存储在内存中的内容来创建表,而且数据全部放在内存中 |
MyISAM | 性能极高的引擎,支持全文本搜索,不支持事务处理 |
而小编我也是中招了,由于我的表默认引擎是MyISAM,不支持事务,所以一直不执行成功
我们可以通过执行来查看我们的数据库引擎是什么,ENGINE字段后面即是
show create table tablename
解决:
执行sql语句
alter table 表名 type=INNODB
也许有人执行这一步会爆这样的错误
这是由于在新版本的mysql5.1以后type就不支持了,可以使用ENGINE代替
alter table book ENGINE=INNODB
调整MySQL数据引擎即可
这里给出sping事务的配置文件信息
1、首先引入标签
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
2、我这里是使用注解配置,要指明
<tx:annotation-driven transaction-manager="transactionManager"/>
3、指出事务
<!-- 事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
其他正常配置,如果事务的问题还是解决不了。
那么移步问题