如何在非Web Spring Boot应用程序中获得事务管理器?

时间:2014-10-26 16:23:06

标签: spring spring-boot

有一种快速简便的方法可以让ComamandLineRunner应用程序拥有一个事务管理器吗?我有以下设置:

@EnableAutoConfiguration(exclude={WebMvcAutoConfiguration.class})

spring.main.web_environment=false

在application.properties中。当我运行代码时:

ConfigurableApplicationContext context = application.run();
context.close();

我明白这一点:

2014-10-26 11:00:59.956  INFO 4900 --- [           main] j.LocalContainerEntityManagerFactoryBean     : Closing JPA EntityManagerFactory for persistence unit 'default'

我看到我已经从JPA Repository中发出了SQL回显,但是没有事务提交给db。我已经尝试将事物转移到服务中,将事情变成@Transactional等等。我似乎并没有让一个人突然出现。

更新1: 如果重要,我使用的是1.2.0.M2。我怀疑@EnableAutoConfiguration仍然没有做到这一点。调试输出具有:

JpaBaseConfiguration#entityManagerFactory
  - @ConditionalOnMissingBean (types: org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; SearchStrategy: all) found no beans (OnBeanCondition)

JpaBaseConfiguration#entityManagerFactoryBuilder
  - @ConditionalOnMissingBean (types: org.springframework.boot.autoconfigure.orm.jpa.EntityManagerFactoryBuilder; SearchStrategy: all) found no beans (OnBeanCondition)

JpaBaseConfiguration#jpaVendorAdapter
  - @ConditionalOnMissingBean (types: org.springframework.orm.jpa.JpaVendorAdapter; SearchStrategy: all) found no beans (OnBeanCondition)

JpaBaseConfiguration#transactionManager
  - @ConditionalOnMissingBean (types: org.springframework.transaction.PlatformTransactionManager; SearchStrategy: all) found no beans (OnBeanCondition)

application.properties有一个spring.datasource设置,Hibernate正在使用正确的方言。我创建了一个@Service类,其方法标记为@Transactional。但它仍然没有被提交。

1 个答案:

答案 0 :(得分:0)

Spring Boot将在配置JPA时自动创建事务管理器。查看课程JpaBaseConfiguration中的方法transactionManager

请注意,此设置与应用程序是否为Web应用程序无关。

因此在Spring Bean上使用@Transactional将正常工作