Я пытаюсь заставить Spring Transaction Management работать в моем новом приложении Spring Boot + MyBatis.Spring Transaction Management не работает с Spring Boot + MyBatis?
До сих пор мне удалось получить все, что работает с минимальными проблемами - это просто правильное функционирование аннотации @Transactional
. В настоящее время все операторы фиксируются немедленно независимо от того, аннотирован или нет метод.
Spring Boot делает так много конфигурации шаблонов для вас, что трудно найти недостающее звено.
Мои build.gradle
содержит следующие зависимости:
compile("org.springframework.boot:spring-boot-starter-amqp")
compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.0.0")
compile("mysql:mysql-connector-java:5.1.38")
Мои application.properties
содержит следующую конфигурацию источника данных:
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/my_db
spring.datasource.username=my_user
spring.datasource.password=my_pass
Простой пример метода в компоненте, который не действует, как ожидается, является таким, как следует:
@Transactional
public void performTransactionTest() throws Exception {
Person person = new Person();
person.setPersonId(123);
personMapper.insert(person);
throw new Exception("This should force a rollback!");
}
Исключение получается, но запись уже вставлена.
В настоящее время не существует документации по конфигурации транзакций для Spring Boot AND MyBatis вместе, но, насколько я понимаю, она должна в основном подключаться, как это было бы сделано вручную в приложении Spring + MyBatis, и где оно не работает, t - мы можем настроить его дальше. С тем, что я попытался следующие конфигурации в моей applicationContext.xml
не повезло:
<tx:annotation-driven proxy-target-class="true" transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
</bean>
Я могу подтвердить, что даже без какого-либо из указанных выше конфигураций DataSourceTransactionManager сконфигурирован с тем же DataSource, который использует SqlSession MyBatis Картостроители.
Любая помощь или идеи, которые могут подтолкнуть меня в правильном направлении, были бы весьма полезны. Если вам нужна дополнительная информация, я рад предоставить ее!
Заранее благодарен!
Xandel
Аннотирование частных методов не приносит пользы. см. http://stackoverflow.com/q/7085271/217324 –
Редактировать вопрос - я могу подтвердить, что проблема все еще существует с помощью общедоступного метода. – Xandel
также проверенные исключения не вызывают откат по умолчанию. –