java.sql.SQLException: Connection is read-only 问题产生的原因及解决办法

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 com.segi.uhomecp.charging.api.accrualBasis.dao.BillAccrualBasisCycleMapper.insertBatch-Inline
### The error occurred while setting parameters
### Cause: java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed
; SQL []; Connection is read-only. Queries leading to data modification are not allowed; nested exception is java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed
	at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:106)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
	at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
	at com.sun.proxy.$Proxy17.insert(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:278)
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:79)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:40)
	at com.sun.proxy.$Proxy23.insertBatch(Unknown Source)
...

只读权限,一般如果报了这个错,是项目中事务配置文件的问题。

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="save*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>
			<tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="register*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="insert*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="create*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="proccess*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="register*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="handler*"  propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="add*"  propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="load*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="onApplicationEvent*"  propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="generateSequence*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
			<tx:method name="doNew*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception" />
			<tx:method name="selectNew*" propagation="REQUIRES_NEW" rollback-for="java.lang.Exception" />
			<tx:method name="*" read-only="true" />
		</tx:attributes>
</tx:advice>

 

因为事务是配置在service层,因此检查了我service层接口的代码,发现方法名是query开头的,service调用的query方法根本就没有事务。

问题原因找到了,解决办法也很简单,修改接口名称(跟配置文件中匹配即可)

 

根据提供的引用内容,出现"Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Could not retrieve transation read-only status server"的错误通常是由于无法获取JDBC连接引起的。这可能是由于以下原因之一导致的: 1. 数据库连接配置错误:请确保数据库连接的URL、用户名和密码正确,并且数据库服务器正在运行。 2. 数据库连接池问题:如果您正在使用连接池管理数据库连接,请确保连接池配置正确,并且连接池中有足够的可用连接。 3. 数据库服务器问题:如果数据库服务器出现故障或无法响应,可能会导致无法获取连接的错误。请检查数据库服务器的状态。 解决此问题的一种常见方法是检查数据库连接配置并确保其正确性。您可以尝试以下步骤来解决此问题: 1. 检查数据库连接配置是否正确,包括URL、用户名和密码。 2. 确保数据库服务器正在运行,并且可以通过网络访问。 3. 如果您正在使用连接池,请检查连接池配置并确保连接池中有足够的可用连接。 4. 检查数据库服务器的日志文件以获取更多详细信息,可能会提供有关连接问题的线索。 5. 如果问题仍然存在,请尝试重新启动应用程序和数据库服务器,以确保没有任何临时问题导致连接问题。 请注意,具体的解决方法可能因您使用的数据库和应用程序框架而异。如果您能提供更多关于您的环境和配置的信息,我可以为您提供更具体的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值