스프링 부팅 EntityManagerFactoryBuilder에 자동 전원이 필요하지 않습니다.
Spring Boot 어플리케이션에서 여러 데이터베이스 연결을 설정하려고 합니다.프라이머리 데이터 소스 구축을 시작했는데 mySqlEntityManagerFactory 메서드에서 다음 오류가 발생합니다.
자동 배선을 할 수 없습니다.EntityManagerFactoryBuilder 콩 없음
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.PersistenceContext;
import javax.sql.DataSource;
import java.util.HashMap;
import java.util.Map;
@Configuration
@Transactional
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = "digital.sheppard.dao",
entityManagerFactoryRef = "entityManager",
transactionManagerRef = "transactionManager")
public class PrimaryDBConfig {
@Bean(name="dataSource")
@Primary
@ConfigurationProperties(prefix = "primary.datasource.mysql")
public DataSource mysqlDataSource() {
return DataSourceBuilder.create().build();
}
@PersistenceContext(unitName = "primary")
@Primary
@Bean(name = "entityManager")
public LocalContainerEntityManagerFactoryBean mySqlEntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder.dataSource(mysqlDataSource()).persistenceUnit("primary").properties(jpaProperties())
.packages("digital.sheppard.model").build();
}
private Map<String, Object> jpaProperties() {
Map<String, Object> props = new HashMap<String, Object>();
props.put("hibernte.ejb.naming_strategy", "org.hibernate.cfg.ImprovedNamingStrategy");
props.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
return props;
}
}
Entity Manager Factory Builder 자동 연결 방법
이 블로그의 코드를 따르려고 합니다.https://raymondhlee.wordpress.com/2015/10/31/configuring-multiple-jpa-entity-managers-in-spring-boot/
도움이 되는 메인 어플리케이션클래스는 다음과 같습니다.
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
@ComponentScan
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
잘못된 Import가 원인입니다.따라서 컨피규레이션클래스에서 간과되는 Import 섹션을 참조해 주십시오.springframework 클래스와 동일한 이름의 하이버네이트 클래스가 있습니다.당연히 봄을 골라야죠.
이 코드를 삭제해야 할 것 같습니다.
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
예외는 다음과 같습니다.public LocalContainerEntityManagerFactoryBean mySqlEntityManagerFactory(EntityManagerFactoryBuilder builder) {
기대했던 것 중 하나만을 필요로 한다EntityManagerFactoryBuilder
.
참조 링크를 확인했는데, 그 코드가 기능할지는 잘 모르겠습니다.
일반적으로 LocalContainerEntityManagerFactoryBean 인스턴스를 생성하여 필요에 따라 초기화합니다.고객님의 경우
LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(mysqlDataSource());
em.setPersistenceUnitName("primary");
em.setPackagesToScan(new String[] { "digital.sheppard.model" });
JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(jpaProperties());
지속성 단위 이름은 에서 정의한 것과 같아야 합니다.persistence.xml
단, Spring JPA를 사용할 때는 파일이 옵션입니다.
봄 이외의 버전에 대해서는, https://stackoverflow.com/a/26814642/776548 를 참조해 주세요.
또한.
- EntityManagerFactory를 직접 초기화하기 때문에 제외해야 합니다.
DataSourceAutoConfiguration.class
. @Primary
는 여러 데이터 소스를 필요로 하는 경우에만 필요합니다.하나뿐인 경우 주석을 제거하고 여러 데이터 소스가 필요할 때 주석을 추가합니다.
매개 변수 이름 변경builder
로.entityManagerFactoryBuilder
JpaBaseConfiguration.class에 존재하는 빈을 주입합니다.
'Data Source Auto Configuration' 제외를 삭제해 보셨습니까?
'@Enable' 사용AutoConfiguration(exclude={DataSourceAutoConfiguration.class})을(를) 사용하면 많은 콩이 생성되지 않습니다.
데이터 소스 사용 시 문제가 발생하여 이 솔루션을 추가하는 것이 올바른 솔루션이 아닐 수 있습니다.
스프링 부트는 클래스 패스에 특정 클래스의 존재를 검출하는 것에 주의해 주세요.maven을 사용하는 경우 모든 종속성의 모든 클래스를 읽는 것입니다.
따라서 이 DataSourceAutoConfiguration.class를 실행하는 것을 검토해 주십시오.
건배.
주 클래스가 "클래스 트리"의 맨 위에 있지 않을 수 있습니다.스프링은 (패키지 규칙에 따라) 메인 클래스부터 모든 클래스를 스캔해야 합니다.
https://www.baeldung.com/spring-component-scanning을 읽어보실 수 있습니다.
봄철 스캔으로 수업을 읽지 않으면 봄철의 맥락에 절대 들어가지 않습니다.
몇 가지 방법: 어플리케이션에 @EnableJpaRepositorys(basePackages = {"your.pkg.here"})를 추가해야 합니다.그러면 Spring Data가 지정된 패키지에서 저장소 클래스를 검색하도록 지시합니다.
여러 데이터 소스에서 @Primary를 삭제하면 문제가 해결되었습니다.
ide 소프트웨어 때문에 발생하였습니다.이러한 옵션을 설정해 주세요.
언급URL : https://stackoverflow.com/questions/33847095/spring-boot-entitymanagerfactorybuilder-not-autowired
'programing' 카테고리의 다른 글
WordPress REST API JWT 토큰을 검증하는 동안 jwt_auth_no_auth_header 오류가 발생했습니다. (0) | 2023.04.01 |
---|---|
전류를 수동으로 설정할 때 useRef() 훅과 함께 사용하는 스크립트 유형은 무엇입니까? (0) | 2023.04.01 |
일식 IDE를 사용한 angularj 설정 (0) | 2023.04.01 |
Oracle 쿼리: 최근 10분 동안 삽입된 테이블에서 데이터를 가져옵니다. (0) | 2023.04.01 |
'string' 유형은 'inherit' | 'initial' | 'unset' | 'fixed' | 'absolute' | 'static' | 'relative' | 'sticky'에 할당할 수 없습니다. (0) | 2023.04.01 |