@Transactional saveAll не работает для таблицы во втором источнике данных Spring JPA - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть 2 источника данных, DS1, DS2.В одном сервисе @Transactional мне нужно получить значения из двух таблиц и обновить их.

Пример фрагмента

    @Service
    public class MyService {
    @Autowired
    ds1Repository ds1Repository; // from data source 1 (DB Name - DB1) MYSQL
    @Autowired
    ds2Repository ds2Repository; // from data source 2 (DB Name - DB2) MYSQL

    @Transactional (javax.Transactional)
    public void processUpdates() {
        // Able to get the result set from both the data sources
        List<Data1> ds1Data = ds1Repository.findAll();
        List<Data2> ds2Data = ds1Repository.findAll();

        // modified the collections ds1Data & ds2Data

        // This is getting updated
        ds1Repository.saveAll(ds1Data);

        // This update is not heppening and no exception thrown
        ds2Repository.saveAll(ds2Data);
    }
}

Я пробовал следующие wys:

  1. Я настроил оба источника данных, которые работают нормально, в состоянии читать данные из обеих баз данных
  2. После поиска попытался ChainedTransactionManager, определив настраиваемые имена диспетчера транзакций для обоих источников данных и использовал @Transactional(value = "chainedTransactionManager") поверх сервиса.Все равно не сработало.

Может кто-нибудь помочь мне с тем, что было в коде?почему данные только на источнике данных 2 не сохраняются?

1 Ответ

0 голосов
/ 02 марта 2019
  • У вас есть 2 источника данных, что означает, что у вас будет 2 компонента TransactionManager
  • Теперь, когда вы используете @Transactional без указания имени, он будет работать со стандартным TransactionManager
  • , которыйозначает, что только транзакция по умолчанию будет принята после того, как processUpdate () завершит

Предложение

  • Я не знаю, есть ли у вас требование для управления распределенными транзакциями, если нет, топросто используйте независимый @Transactional для saveAll () с соответствующим именем TransactionManager
...