Я ищу, используя @Transactional
по одному из методов Сервиса. Однако, когда возникает исключение, транзакция не возвращается. Я пробовал то же самое с @Transactional(rollbackFor=Exception.class)
. Мой код выглядит следующим образом: -@Transactional для любых Исключений весной
@Override
@Transactional(rollbackFor=Throwable.class)
public boolean addUser(User user) throws Exception{
boolean userAdded = userDao.addUser(user);
boolean userRegistrationRecorded = userDao.recordUserRegistraionDetails(user);
return true;
}
Я прочитал много постов и каждый говорит, что Spring обрабатывает только RuntimeException
с и не проверила Exception
s кроме RmiException
. Мне нужно решение, которое работает для любого типа Exception
. Кто-то предложил мне написать собственную аннотацию, где другие предложили иметь TransactionManager
как часть файла applicationContext.xml
. Подробное решение, безусловно, поможет мне.
Кстати, я использую весну JdbcTemplate
. Странная вещь, которую я наблюдаю, - это то, что Exception
s, поднятые весной, являются RuntimeException
s, транзакция не возвращается. Я пытаюсь поднять Exception
, добавив то же самое User
в вышеуказанном сценарии.
Мой applicationContext.xml выглядит следующим образом: -
<context:component-scan base-package="org.chaperone.services.security.*" />
<context:annotation-config />
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="propertyPlaceholderConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="searchSystemEnvironment" value="true" />
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="${DATABASE_URL}" />
<property name="username" value="${DATABASE_USER_NAME}" />
<property name="password" value="${DATABASE_PASSWORD}" />
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
редактировать свой вопрос, чтобы добавить новую информацию –
поделиться контекста приложения и сервлет контекстные файлы –
'@ Transactional' без' 'и правильно определенный' PlatformTransactionManager' ничего не сделает. Аннотация - это всего лишь метаданные, если вы не указываете что-либо для работы с аннотацией, это почти бесполезно. Что касается отката, пожалуйста, уточните, какую базу данных вы используете, поскольку существуют базы данных (или типы таблиц), которые даже не поддерживают транзакции. –