Spring Boot EntityManagerFactoryBuilder не автоуровне
В приложении Spring Boot я пытаюсь настроить несколько соединений с базой данных. Я начал создавать первичный источник данных, но я получаю следующую ошибку в методе mySqlEntityManagerFactory.
Не удалось автоподтвердить. no beans для 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;
}
}
Как я могу autowire EntityManagerFactoryBuilder?
Я пытаюсь выполнить код в этом блоге 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);
}
}
Ответы
Ответ 1
Вы пытались удалить исключение "DataSourceAutoConfiguration"?
Использование '@EnableAutoConfiguration (exclude = {DataSourceAutoConfiguration.class})' предотвращает создание большого количества bean-компонентов.
Если у вас возникла проблема при использовании источника данных и добавлении этого, это ваше решение, возможно, оно не правильное.
Знайте, что весенняя загрузка обнаруживает присутствие определенных классов в classpath. Если вы используете maven, он читает все классы из всех зависимостей.
Поэтому рассмотрите возможность запуска этого DataSourceAutoConfiguration.class;
ура
Ответ 2
Я думаю, что вы должны удалить этот код
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
Ответ 3
Обратите внимание, что ваш основной класс не находится на вершине "дерева классов". Spring должен сканировать все классы, которые являются дочерними (в соответствии с соглашением о пакете), начиная с основного класса.
Может быть, вы бы прочитали https://www.baeldung.com/spring-component-scanning
Если ваши классы не были прочитаны Spring Scan, они никогда не будут в контексте Spring.
Ответ 4
Пара возможностей: Вам необходимо добавить @EnableJpaRepositories (basePackages = {"your.pkg.here"}) в Приложение. Это говорит Spring Data искать ваши классы репозитория в указанном пакете.
Ответ 5
это было вызвано вашим программным обеспечением ide, настроить эти параметры
![введите описание изображения здесь]()