Менеджер транзакций источника данных Spring не откатывается
<!-- Data source definition -->
<bean id="dataSourceWebsube"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url.websube}"
p:username="${jdbc.username.websube}" p:password="${jdbc.password.websube}" />
<bean id="jdbcTemplateWebsube" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSourceWebsube" />
</bean>
<!-- Transaction manager, actually this one is useless since the Transaction Manager Bean is already called transactionManager -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSourceWebsube" />
</bean>
public class Test
{
@Transactional
public static void testTranscational(JdbcTemplate jdbcTmpl)
{
String sql = null;
sql = "INSERT INTO NBSM.INT_RTLNOUTBOUND_PRODUCTS(BASEPRODUCTCODE)VALUES(1)";
jdbcTmpl.update(sql);
throw new RuntimeException();
}
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("application-context.xml");
JdbcTemplate jdbcTmpl = (JdbcTemplate) ctx.getBean("jdbcTemplateWebsube");
testTranscational(jdbcTmpl);
}
}
Привет,
Я пытаюсь проверить возможности Spring по управлению транзакциями, но не могу заставить его работать. Я пытался решить это часами, но не повезло.
Выше вы можете увидеть соответствующие определения config xml и тестовый класс dao. Даже когда я использую уровень отладки для регистрации, нет никакого следа механизма отката.
Любая помощь будет принята с благодарностью
1 ответ
Именно из-за Spring AOP можно только:
- а) работа над Spring управляемым бобом
- б) работа не на статических методах
- c) учитывается только в том случае, если вызван Spring AOP Proxy (вам нужно вызывать компонент из другого компонента, но не из самого себя)
а) и б) ваши ошибки, вам нужно это исправить. - чтобы преодолеть проблему в) я решительно заменил Spring AOP на размах компиляции AspectJ.
Если я прав, даже обработка транзакции (по @Transational
не должен работать.
Должен быть проверен кем-то еще:
я никогда не видел @Transactional
в комбинации с JdbcTemplate
Поэтому я сомневаюсь, что это работает вообще. - Но могу я ошибаться.