我的应用程序使用spring和jpa,我有两个配置文件:
的AppConfig:
@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = { "com.test.api" })
@EnableJpaRepositories("com.test.api.repository")
@PropertySource("classpath:application.properties")
public class AppConfig {
}
WebAppConfig:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "com.test.webservice" })
public static class WebAppConfig extends WebMvcConfigurerAdapter {
}
几乎可以正常工作,但有时会引发异常:Caused by: java.lang.IllegalStateException: No transactional EntityManager available
即使我只选择记录(不创建,更新或删除数据。)
如果我将注释:@ComponentScan(basePackages = { "com.test.api" })
移动到类WebAppConfig并删除:@ComponentScan(basePackages = { "com.test.webservice" })
则异常消失,但是当服务器启动和spring bean重复时,spring上下文会加载很多次。
或者如果我使用entityManager.getEntityManagerFactory().createEntityManager().unwrap(Session.class)
代替entityManager.unwrap(Session.class)
,那么异常也会消失。
我该如何解决?
答案 0 :(得分:0)
删除WebAppConfig上的ComponentScan,并在AppConfig上的ComponentScan注释中添加该包,这样可以解决您的问题。