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);
}
}
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 {
}
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
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
Mobile version