我用的是 spring + springmvc + mybatis +mysql. <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="add*&q…
org.springframework.dao.TransientDataAccessResourceException: ### Error updating database. Cause: java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed ### The error may involve defaultParameterMap ### T…
看了下mysql-connector-5.1.40版本中,如果设置failoverReadOnly=true (即默认值,参考链接),当mysql连接failover时,会根据jdbc连接串将当前连接的readOnly值设置为true (第8行代码) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 private synchronized void switchCurrentConnectionTo(int hostIndex, MySQLConn…
java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed 追查原因,查看切片事务配置如下: 查看源码: 初始化阶段-Step1:解析到xml配置,在RuleBasedTransactionAttribute中设置query*开发的方法的readOnly值为true save等方法设置为fase: 运行阶段-Step1:(切片事务运行的逻辑大概简单说下:就…
Connection is read-only. Queries leading to data modification are not allowed 描述:框架注入时候,配置了事物管理,权限设置的只读模式 解决方法不是什么把它删了,删了就没安全防护了,肯定不是对的方法. 解决方案一: 如果调用的service中的方法使用了修改,添加功能,并且继承了父类,那么需要将自己的service更新方法的名称添加到这个里边 <tx:method name="mygetOrder" pr…
因为我再spring 中使用了AOP进行事务管理,有如下配置 <tx:advice id="txAdvice" transaction-manager="transactionManager"> <!-- 定义事务传播属性 --> <tx:attributes> <tx:method name="insert*" propagation="REQUIRED" /> <tx:…
出现这个问题的原因是默认事务只有只读权限,因此要添加下面的每一个add*,del*,update*等等. 分别给予访问数据库的权限. 方法名的前缀有该关键字设置了read-only=true,将其改为read-only=false即可: <tx:method name="get*" propagation="REQUIRED" read-only="false"/>…
问题分析: 实际开发项目中,进行insert的时候,产生这个问题是Spring框架的一个安全权限保护方法,对于方法调用的事物保护,一般配置如下: <!-- 事务管理 属性 --> <tx:advice id="transactionAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*"…
mysql> show full processlist; #查看问题的线程!!!! 找到异常进程的ID 然后kill 掉: mysql> kill xxxxxxx; #xxxxxx是ID号 然后再次执行update执作,问题解决!!…
update tableA a,(select a.netbar_id,sum(a.reward_amt) reward_amt from tableB a group by a.netbar_id) b set a.transfer_amt=b.reward_amt where a.netbar_id=b.netbar_id; 执行该语句时要注意,因为 select a.netbar_id,sum(a.reward_amt) reward_amt from tableB a group by…