Я перехожу с 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
Миграция Spring Boot 3.3. Невозможно разрешить ссылку на компонент jpaSharedEM_entityManagerFactory ⇐ JAVA
Программисты JAVA общаются здесь
1771425758
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79818320/spring-boot-3-3-migration-cannot-resolve-reference-to-bean-jpasharedem-entityma[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия