Миграция Spring Boot 3.3. Невозможно разрешить ссылку на компонент jpaSharedEM_entityManagerFactoryJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Миграция Spring Boot 3.3. Невозможно разрешить ссылку на компонент jpaSharedEM_entityManagerFactory

Сообщение Anonymous »

Я перехожу с Spring Boot 2.7 на Spring Boot 3.3.13. Это означает, что я перехожу даже с Hibernate 5 на Hibernate 6.
Когда я запускаю приложение Spring, у меня возникает неприятная проблема с настройкой классов конфигурации моей базы данных.
Это один из моих классов конфигурации базы данных, который у меня был в Spring Boot 2.7 (я подверг цензуре разумные имена пакетов):
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);
}
}

Мне удалось кое-что обновить для миграции: я заменил каждое использование javax на jakarta, исключая класс DataSource, поскольку кажется, что аналога jakarta не существует. Затем я добавил в свойства диалект Hibernate и заменил «jdbc-url» на «url» в имени ConditionalProperty. Конечно, сделал то же самое с файлом yaml.
Затем это класс конфигурации моего репозитория:
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 {
}

Я не думаю, что мне нужно что-то здесь менять.
Теперь при запуске приложения у меня возникает эта ошибка:
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

Эта часть довольно странная: невозможно разрешить ссылку на компонент jpaSharedEM_anagEntityManagerFactory. Кажется странным имя объединения jpaSharedEm_ и моего bean-компонента anagEntityManagerFactory. Почему Spring ищет это имя компонента? Мне нужно изменить конфигурацию имени?
Я не думаю, что проблема зависит от моего UserAccountDelegationRepository. Это всего лишь первый репозиторий, который встретил Spring при запуске приложения. Я изменил объявление порядка репозиториев на сервисе и встречаю эту проблему даже для других репозиториев.
Кто-нибудь сталкивался с такой проблемой? Я вижу, что здесь есть вопросы по этой же проблеме, но я не нашел подходящего ответа. Я применил все лучшие методы для перехода на Spring Boot 3. В коде больше нет Javax, и я даже удалил все зависимости. Может ли кто-нибудь мне помочь?
Это моя конфигурация yaml для источника данных anag:
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


Подробнее здесь: https://stackoverflow.com/questions/798 ... m-entityma
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»