Spring Boot 3.3-Migration. Der Verweis auf die Bean jpaSharedEM_entityManagerFactory kann nicht aufgelöst werdenJava

Java-Forum
Anonymous
 Spring Boot 3.3-Migration. Der Verweis auf die Bean jpaSharedEM_entityManagerFactory kann nicht aufgelöst werden

Post by Anonymous »

Ich migriere von Spring Boot 2.7 auf Spring Boot 3.3.13. Das bedeutet, dass ich sogar von Hibernate 5 auf Hibernate 6 migriere.
Ich habe beim Starten meiner Spring-Anwendung ein lästiges Problem mit der Konfiguration meiner Datenbankkonfigurationsklassen.
Dies ist eine meiner Datenbankkonfigurationsklassen, die ich auf Spring Boot 2.7 hatte (ich habe sinnvolle Paketnamen zensiert):

Code: Select all

package ***.datasource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;

import jakarta.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import java.util.HashMap;

/**
*
* Data source configuration for Anag Database.
*
*/

@Configuration
@ConditionalOnProperty(prefix = "spring.anag.datasource", name = "url")
public class AnagSourceConfiguration {

@Value("${spring.anag.hibernate.hbm2ddl.auto:validate}")
private String hibernateHbm2ddlAuto;

@Value("${hibernate.dialect}")
private String hibernateDialect;

@Bean(name = "anagDataSource")
@ConfigurationProperties("spring.anag.datasource")
public DataSource anagDataSource() {return DataSourceBuilder.create().build();
}

@Bean(name = "anagEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean anagEntityManagerFactory() {
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(anagDataSource());
em.setPackagesToScan("***.entity.anag");
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
final HashMap properties = new HashMap();
properties.put("hibernate.hbm2ddl.auto", hibernateHbm2ddlAuto);
properties.put("hibernate.dialect", hibernateDialect);
em.setJpaPropertyMap(properties);
return em;
}

@Bean(name = "anagTransactionManager")
public PlatformTransactionManager jpaTransactionManager(EntityManagerFactory anagEntityManagerFactory) {
return new JpaTransactionManager(anagEntityManagerFactory);
}
}
Es gelingt mir, etwas für die Migration zu aktualisieren: Ich habe jede Javax-Verwendung durch Jakarta ersetzt, mit Ausnahme der DataSource-Klasse, da es anscheinend kein Jakarta-Gegenstück gibt. Dann habe ich den Hibernate-Dialekt zu den Eigenschaften hinzugefügt und „jdbc-url“ durch „url“ im ConditionalProperty-Namen ersetzt. Habe das Gleiche natürlich auch mit der Yaml-Datei gemacht.
Dann ist das meine Repository-Konfigurationsklasse:

Code: Select all

package ***.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@Configuration
@EnableJpaRepositories(
basePackages = "***.repositories.anag",
entityManagerFactoryRef = "anagEntityManagerFactory",
transactionManagerRef = "anagTransactionManager"
)
public class AnagRepositoriesConfig {
}
Ich glaube nicht, dass ich hier etwas ändern muss.
Jetzt erhalte ich diesen Fehler, wenn ich meine Bewerbung starte:

Code: Select all

Error creating bean with name 'delegatorFilter' defined in file [C:\\Users\\***\\config\\DelegatorFilter.class]: Unsatisfied dependency expressed through constructor parameter 2: Error creating bean with name 'userDelegationService' defined in file [C:\\**\\service\\UserDelegationService.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'userAccountDelegationRepository' defined in **.repositories.anag.UserAccountDelegationRepository defined in @EnableJpaRepositories declared on AnagRepositoriesConfig: Cannot resolve reference to bean 'jpaSharedEM_anagEntityManagerFactory' while setting bean property

Parameter 0 of constructor in **.service.UserDelegationService required a bean named 'anagEntityManagerFactory' that could not be found.\r\n\r\n\r\nAction:\r\n\r\nConsider defining a bean named 'anagEntityManagerFactory' in your configuration
Dieser Teil ist ziemlich seltsam: Der Verweis auf die Bean „jpaSharedEM_anagEntityManagerFactory“ kann nicht aufgelöst werden. Es scheint ein seltsamer Verkettungsname mit jpaSharedEm_ und meiner Bean anagEntityManagerFactory zu sein. Warum sucht Spring nach diesem Bohnennamen? Ich muss einige Namenskonfigurationen ändern?
Ich glaube nicht, dass das Problem von meinem UserAccountDelegationRepository abhängt. Dies ist nur das erste Repository, auf das Spring beim Start der Anwendung traf. Ich habe die Bestelldeklaration von Repositorys im Dienst geändert und dieses Problem tritt auch bei anderen Repositorys auf.
Ist jemand auf dieses Problem gestoßen? Ich sehe, dass es hier einige Fragen zu demselben Problem gibt, aber ich habe keine relevante Antwort gefunden. Ich habe alle Best Practices für die Migration auf Spring Boot 3 befolgt. Es gibt kein Javax mehr im Code und ich habe sogar alle Abhängigkeiten entfernt. Kann mir jemand helfen?
Dies ist meine Yaml-Konfiguration zur Anag-Datenquelle:

Code: Select all

spring:
anag:
datasource:
url: "jdbc:mysql://xxxxxxxx:3306/anag?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&tinyInt1isBit=false&useSSL=false"
driver-class-name: com.mysql.cj.jdbc.Driver
username: xxxxxxxx
password: xxxxxxxx
hibernate:
hbm2ddl:
auto: validate

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post