有没有一种快速简便的方法可以让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
将正确工作