如何在非web 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'

我看到SQL从我创建的JPA存储库中回显,但没有事务提交到数据库。我试着把东西转移到一个服务中,把东西变成@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。然而,它仍然没有得到承诺。

Spring Boot将在配置JPA时自动创建事务管理器。签出JpaBaseConfiguration类中的方法transactionManager

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

因此,在SpringBeans上使用@Transactional将正确工作

最新更新