A component required a bean named'entityManagerFactory'that could not be found.に質問
3342 ワード
に質問
SpringBootがマルチデータソースを統合するプロジェクトをデバッグ中に、例外が起動します.エラーは次のとおりです.
***************************
APPLICATION FAILED TO START
***************************
Description:
A component required a bean named 'entityManagerFactory' that could not be found.
Action:
Consider defining a bean named 'entityManagerFactory' in your configuration.
ぶんせき
ネット上でこのような問題が発生した原因を統計しました.
【原因1】jarパッケージの競合https://blog.csdn.net/babyyaoyao/article/details/81132016この文はpomにあるからです.xmlファイルではspring-boot-starter-data-jpaで2.0.3が指定する.RELEASEにより,このversionを削除すればよいという解決策が得られる.
org.springframework.boot spring-boot-starter-data-jpa 2.0.3.RELEASE
その解釈に異常が発生した原因はhibernateのjarパケットと衝突した可能性がある.【原因2】jarパッケージ破損1)helsonxiao commented on 28 Mar 2018 I had the same error.After deleting all repos under .m2 folder and redownloading. It works.
2)HSamiSari answered Jul 12 2018
I had exact same issue. When I checked maven build log I have realised that there was an error about hibernate packages complaining about "invalid LOC header (bad signature)". I solved by deleting sub directories under .m2\repository\org\hibernate\hibernate-core and recompiling my project. 解決策は、破損したjarを削除し、再ロードすることです.
以上の2つの解決策を試したことがありますが、問題はまだ解決されていません.私の問題が別の状況であることを説明します.
後でコードをよく研究して、コードを調整してみて、やっと原因を見つけました.
DBConfig 1.JAvaファイルで誤ったデータソースの構成方法:
……
private DataSource dataSource1;
/**
* @methodDesc: :( )
*/
@Bean(name = "dataSource1")
@ConfigurationProperties(prefix = "mysql.datasource.test1")
public DataSource createDataSource() {
dataSource1 = DataSourceBuilder.create().build();
return dataSource1;
}
……
@Primary
@Bean(name = "entityManagerFactory1")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {
if(dataSource1 == null) {
createDataSource();
}
return builder.dataSource(dataSource1).properties(getVendorProperties())
.packages("com.example.demo.entity") //
.persistenceUnit("primaryPersistenceUnit").build();
}
解決する
データソースを1つの構成クラスに独立するDataSourceConfigに注入する.JAva:
@Bean(name = "dataSource1")
@Qualifier("dataSource1")
@Primary
@ConfigurationProperties(prefix="mysql.datasource.test1")
public DataSource dataSource1() {
return DataSourceBuilder.create().build();
}
別のプロファイルDBConfig 1.JAvaでは、このデータソースを使用します.
@Autowired
@Qualifier("dataSource1")
private DataSource dataSource1;
@Primary
@Bean(name = "entityManager1")
public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
return entityManagerFactory(builder).getObject().createEntityManager();
}
@Primary
@Bean(name = "entityManagerFactory1")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder.dataSource(dataSource1).properties(getVendorProperties())
.packages("com.example.demo.entity") //
.persistenceUnit("primaryPersistenceUnit").build();
}
問題が解決した.
文章が終わる.