java - 不可写属性异常 : Bean property 'dataSource' is not writable or has an invalid setter method

标签 java spring beancreationexception

我正在我的应用程序服务层中实现 Spring Transaction..

我指的是关于实现 Spring 事务的编程方式的教程点示例...

https://www.tutorialspoint.com/spring/programmatic_management.htm

我遵循了那里提到的每一步......但是在 xml 文件中创建 bean 时遇到了问题......

错误:

线程“main”org.springframework.beans.factory.BeanCreationException中出现异常:创建类路径资源[database/spring.xml]中定义的名为“transactionManager”的bean时出错:设置属性值时出错;嵌套异常是 org.springframework.beans.NotWritablePropertyException:bean 类 [org.springframework.jdbc.datasource.DataSourceTransactionManager] 的无效属性“dataSource”:Bean 属性“dataSource”不可写或具有无效的 setter 方法。 setter 的参数类型与 getter 的返回类型是否匹配?

系统和应用程序配置: 操作系统:ubuntu 16.0.4 Spring 版本:- 5.0.3 Tomcat :9 JDK:1.9
IDE:Eclipse Oxygen 3

如果有人能给我解决方案,这对我将非常有帮助......

<?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

       <!-- ********************* Initialization for Inventory database -->

         <bean id="dataSource"
            class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql://localhost:3306/myDatabase" />
            <property name="username" value="root" />
            <property name="password" value="root" />
        </bean>

        <!--*********************  Initialization for TransactionManager -->
        <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
          <property name="dataSource" ref="dataSource"></property>    
       </bean> 

    </beans>


public class MyService implements InventoryServiceIface{

    private MyDAO dao;

    private PlatformTransactionManager transactionManager;

    public void setTransactionManager(PlatformTransactionManager transactionManager) {

        this.transactionManager = transactionManager;
    }

    public void setDAO(MyDAO dao) {

        this.dao = dao;
    }


    public Student saveStudent(Student tudent) throws ServiceException{

              validate(Student); // validate the data inside party object 

              TransactionStatus status = beginTransaction(); // begin database transaction

              try 
              {
                  rollbackTransaction();
                  Student =  dao.saveStudent(student); 
              }
              catch(ServiceException e)
              {
                   rollbackTransaction(status);
                   throw e;
              }
              catch(Exception e)
              {
                   rollbackTransaction(status);
                   throw new ServiceException(e);
              }

               commitTransaction(status);

          return student;
    }

    public TransactionStatus beginTransaction()

    {
        System.out.println("TRANSACTION BEGINS....");
        return transactionManager.getTransaction(new DefaultTransactionDefinition());

    }

    public void rollbackTransaction(TransactionStatus status)

    {
        System.out.println("ROLL BACK....");
        transactionManager.rollback(status);

    }

    public void commitTransaction(TransactionStatus status)

    {
        System.out.println("TRANSACTION COMMITTED....");
        transactionManager.commit(status);

    }

}// End of Class

最佳答案

设置数据源的 DataSourceTransactionManager 的属性名称是在堆栈跟踪 dataSource 中写入的,而不是 xxxxxDataSource 。你的配置应该如下

        <bean class="org.springframework.jdbc.datasource.
        DataSourceTransactionManager" id="transactionManager">
         <property name="dataSource" ref="xxxxDataSource"> 
         </property>    
       </bean> 

关于java - 不可写属性异常 : Bean property 'dataSource' is not writable or has an invalid setter method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49857403/

相关文章:

java - 如何在 JPA 和 Hibernate 中保存列表的列表(List<List<String>> 列表)

java - 为什么 TestRestTemplate 会忽略 404 客户端错误?

java - 为什么 NoUniqueBeanDefinitionException : No qualifying bean of type is defined: expected single matching bean but found 2

eclipse - org.springframework.beans.factory.BeanCreationException : Error creating bean with name

java - 无法安装Java JDK

java - 使用mockito测试DriverManager.getConnection

java - 如何使用 Spring Data 更新 Mongodb 中的整数数组元素?

java - Apache Wink 中的 WevDav 示例项目抛出不支持的编码异常

java - 什么时候在 java 中使用 Enum 类?