You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring编程式事务实现遇Bean创建错误:dataSource属性不可写

解决Spring事务管理器Bean创建时的NotWritablePropertyException问题

看起来你在配置Spring编程式事务的transactionManager Bean时踩了个常见的坑,NotWritablePropertyException的核心原因就是Spring没法找到对应属性的有效setter方法,或者你配置的属性本身就不属于这个Bean类。下面一步步帮你排查和解决:

1. 确认你用对了TransactionManager实现类

首先,不同的事务场景需要对应不同的TransactionManager:

  • 如果你是基于JDBC的事务,必须用org.springframework.jdbc.datasource.DataSourceTransactionManager——这个类明确需要dataSource属性,并且自带setDataSource()方法。
  • 如果你误用了其他实现类(比如JtaTransactionManager),它本身就没有dataSource属性,Spring自然会报错说这个属性不可写。

2. 检查XML配置的正确性

确保你的XML配置里,transactionManager的类和属性引用都正确:

<!-- 首先配置你的数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/your_database"/>
    <property name="username" value="db_user"/>
    <property name="password" value="db_password"/>
</bean>

<!-- 配置正确的TransactionManager -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <!-- 注意属性名是驼峰的dataSource,不是datasource或者DataSource -->
    <property name="dataSource" ref="dataSource"/>
</bean>

3. 排查属性名和setter方法的匹配问题

  • 检查XML里的property name是不是严格对应类的setter方法:比如dataSource对应setDataSource(DataSource ds),如果写成datasource(小写d),Spring会找setDatasource()方法,自然找不到。
  • 如果是你自定义的TransactionManager类,必须手动添加public void setDataSource(DataSource dataSource)方法,Spring依赖setter注入属性。

4. 其他可能的排查方向

  • 如果你用的是Hibernate或MyBatis等ORM框架,对应的TransactionManager是HibernateTransactionManager或SqlSessionFactoryTransactionManager,它们需要的属性是sessionFactory或sqlSessionFactory,而不是dataSource,别搞混了。
  • 可以在代码里打印ApplicationContext的Bean定义,或者用IDE的Spring插件查看Bean的属性列表,确认transactionManager的属性是否包含dataSource。

按照上面的步骤排查,应该能解决这个Bean创建的错误。

内容的提问来源于stack exchange,提问作者rahul shalgar 2

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:24:39