今天开发遇到一个特别蛋疼的问题,在代码执行过程报错
Connection is read-only. Queries leading to data modification are not allowed
的问题,百度发现可能是service写的方法和事务配置写着read-only的方法名重复,Javaweb项目是spring-jdbc.xml,例:
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="batch*" propagation="REQUIRED" />
<tx:method name="file*" propagation="REQUIRED" />
<tx:method name="get*" propagation="REQUIRED" read-only="true" />
<tx:method name="count*" propagation="REQUIRED" read-only="true" />
<tx:method name="find*" propagation="REQUIRED" read-only="true" />
<tx:method name="list*" propagation="REQUIRED" read-only="true" />
<tx:method name="query*" propagation="REQUIRED" read-only="true" />
<tx:method name="*" read-only="true"/>
</tx:attributes>
</tx:advice>
但是仔细检查自己的代码,发现并没有与带有read-only配置的方法名开发的开发在报错的类中
最后经过一下午的尝试之后才发现,就是在Service层获取数据,并且要对数据进行修改的时候,
不仅不能用read-only开头的方法名,还要讲你自己写的方法名标注上去,如代码中的
“<tx:method name="file*" propagation="REQUIRED" />”
可能是因为他默认自带read-only除非特别说明。