NotWritablePropertyException: свойство Bean 'dataSource' недоступно для записи или имеет недопустимый метод установки

Я реализую Spring Transaction на своем уровне службы приложений.

Я имел в виду пример в учебниках для программного способа реализации весенней транзакции...

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

Я следовал каждому шагу, упомянутому там.... но у меня возникла проблема с созданием bean-компонента в файле xml..

Ошибка:

Исключение в потоке «основной» org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем «transactionManager», определенным в ресурсе пути к классу [database/spring.xml]: ошибка при установке значений свойств; вложенным исключением является org.springframework.beans.NotWritablePropertyException: недопустимое свойство dataSource класса bean-компонента [org.springframework.jdbc.datasource.DataSourceTransactionManager]: свойство bean-компонента dataSource недоступно для записи или имеет недопустимый метод установки. Соответствует ли тип параметра установщика типу возвращаемого значения геттера?

конфигурация системы и приложения: ОС: ubuntu 16.0.4 весенняя версия: - 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

person rahul shalgar 2    schedule 16.04.2018    source источник


Ответы (1)


Имя свойства DataSourceTransactionManager, задающего источник данных, указано в трассировке стека dataSource, а не xxxxxDataSource . ваша конфигурация должна быть следующей

        <bean class="org.springframework.jdbc.datasource.
        DataSourceTransactionManager" id="transactionManager">
         <property name="dataSource" ref="xxxxDataSource"> 
         </property>    
       </bean> 
person biiyamn    schedule 16.04.2018
comment
ОК... понял.... Большое спасибо, biiyamn... Мне потребовалось больше времени, чтобы понять... еще раз спасибо... - person rahul shalgar 2; 16.04.2018