Частичное принятие или откат транзакции - PullRequest
0 голосов
/ 30 сентября 2019

У меня возникла проблема с транзакциями, настроенными в моем коде. Ниже приведен код с транзакциями, которые записывают данные в БД.

Writer.java

class Writer {

    @Inject
    private SomeDAO someDAO;

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void write(){
        this.batchWrite();

    }


    private void batchWrite () {

        try {
            someDAO.writeToTable1(true);
        } catch(Exception ex) {
            someDAO.writeToTable1(false);
        }

        someDAO.writeToTable2();

    }
}

SomeDAO.java

class SomeDAO {

    @Inject
    private JdbcTemplate JdbcTemplate;

    public void writeToTable1(boolean flag) {
        // Writes data to table 1 using jdbcTemplate
        jdbcTemplate.update();
    }


    pulic void writeToTable2() {
        // Writes data to table 2 using jdbcTemplate
        jdbcTemplate.update();
    }

}

Здесь данные должным образом сохраняются в таблице 1, но иногда таблица пропускается.

Я не уверен, как это происходит, поскольку обе таблицы были записаны в одной транзакции.

Либо транзакция частично фиксирует данные, либо частично откатывается.

Я сомневаюсь, что в классе SomeDAO я внедряю объект JdbcTemplate, который создает новое соединение вместо использования существующего соединения транзакции.

Может кто-нибудь помочь мне здесь?

1 Ответ

0 голосов
/ 30 сентября 2019

Попробуйте связать bean-компонент Transaction Manager с вашим jdbcTemplate внутри @Transactional:

    //Create a bean
    @Bean
    public PlatformTransactionManager txnManager() throws Exception {
        return new DataSourceTransactionManager(jdbcTemplate().getDataSource());
    }

И затем используйте этот диспетчер транзакций в @Transactional ("txnManager").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...