SpringBoot 启动的时候提示 Field *** in *** required a bean named 'entityManagerFactory' that could not be found.
错误截图
后面发现原来和入口类代码有关。
//@SpringBootApplication(scanBasePackages = {"org.jzc.odata.cboard","org.jzc.odata.cboard.odataservice","com.sdl.odata.api.service","com.sdl.odata.api.service.ODataService"}) @EnableAutoConfiguration(exclude = {HibernateJpaAutoConfiguration.class , DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class }) @Configuration @Import({ ODataDataSourceConfiguration.class, ODataServiceConfiguration.class }) @ComponentScan @RestController @ComponentScan(basePackages = {"org.jzc.odata.cboard","org.jzc.odata.cboard.odataservice","com.sdl.odata.api.service","com.sdl.odata.api.service.ODataService"}) public class ServiceContainer {
其中
@EnableAutoConfiguration(exclude = {HibernateJpaAutoConfiguration.class , DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class })
这段的解释如下,
参考
https://stackoverflow.com/questions/45350546/entitymanagerfactory-not-found-in-springboot
也就是说,不去掉@EnableAutoConfiguration 和里面exclude 包含对EntityManagerFactory 的注释的话,EntityManagerFactory是不会被实例化的,这样肯定就不能发现entityManagerFactory的Bean了。
那么解决方案就是把这段注释掉,重新编译打包
//@SpringBootApplication(scanBasePackages = {"org.jzc.odata.cboard","org.jzc.odata.cboard.odataservice","com.sdl.odata.api.service","com.sdl.odata.api.service.ODataService"}) //@EnableAutoConfiguration(exclude = {HibernateJpaAutoConfiguration.class // , DataSourceAutoConfiguration.class, // DataSourceTransactionManagerAutoConfiguration.class }) @Configuration @Import({ ODataDataSourceConfiguration.class, ODataServiceConfiguration.class }) @ComponentScan @RestController @ComponentScan(basePackages = {"org.jzc.odata.cboard","org.jzc.odata.cboard.odataservice","com.sdl.odata.api.service","com.sdl.odata.api.service.ODataService"}) public class ServiceContainer {
再运行,成功了!