有一种快速简便的方法可以让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。但它仍然没有被提交。
答案 0 :(得分:0)
Spring Boot将在配置JPA时自动创建事务管理器。查看课程JpaBaseConfiguration中的方法transactionManager
。
请注意,此设置与应用程序是否为Web应用程序无关。
因此在Spring Bean上使用@Transactional
将正常工作