Ich versuche, ein Problem mit zwei Datenquellen zu lösen. Ich las viele Text im Internet und machte einfache Lösung basierend aufKeine qualifizierende Bean des Typs [javax.persistence.EntityManagerFactory] definiert: erwartete einzelne übereinstimmende Bean, aber gefunden 2
Ich habe zwei „config Klassen“ gemacht, wie folgt aus:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "ResultEntityManagerFactory",
transactionManagerRef = "ResultEntityTransactionManager",
basePackages = "com.migr.result.repositories"
)
public class ResultTablesConfig {
@Autowired
@Qualifier("orclAdapter")
JpaVendorAdapter jpaVendorAdapter;
@Bean(name="ResultEntityDataSource")
@ConfigurationProperties(prefix = "datasource.migr.result")
public DataSource declReaconDS() {
return new DataSource();
}
@Bean(name = "ResultEntityManager")
public EntityManager entityManager() {
return entityManagerFactory().createEntityManager();
}
@Bean(name = "ResultEntityManagerFactory")
public EntityManagerFactory entityManagerFactory() {
LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
lef.setDataSource(declReaconDS());
lef.setJpaVendorAdapter(jpaVendorAdapter);
lef.setPackagesToScan("com.migr.result.tables.*");
lef.setPersistenceUnitName("ResultEntityPersistenceUnit");
lef.afterPropertiesSet();
return lef.getObject();
}
@Bean(name = "ResultEntityTransactionManager")
public PlatformTransactionManager transactionManager() {
return new JpaTransactionManager(entityManagerFactory());
}
}
und eine andere, praktisch gleich - SourceTablesConfig
. einzige Unterschied ist, @Bean
Namen (sie beginnen alle mit "Source") und Repositorys Mapping, wie folgt aus:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "SourceEntityManagerFactory",
transactionManagerRef = "SourceEntityTransactionManager",
basePackages = "com.migr.source.repositories"
)
public class SourceTablesConfig {
...............
@Bean(name = "SourceEntityManagerFactory")
public EntityManagerFactory entityManagerFactory(){
LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
lef.setDataSource(declReaconDS());
lef.setJpaVendorAdapter(jpaVendorAdapter);
lef.setPackagesToScan("com.migr.source.tables.*");
lef.setPersistenceUnitName("SourceEntityPersistenceUnit");
lef.afterPropertiesSet();
return lef.getObject();
}
Meine Leistungen simle sind:
@Service
public class CatalogsSourceService {
@Autowired
CatalogsSourceRepository catalogsrepository;
.......
}
wo CatalogsSourceRepository extends JpaRepository<Catalogs, Long>
Mein „Haupt "Klasse:
@RestController
@RequestMapping("/")
public class Main {
@Autowired
CatalogsSourceService source_serv;
@Autowired
CatalogsResultService result_serv;
@RequestMapping
public Object index() {
Map<String,List> results = new HashMap<>();
results.put("First", source_serv.findAll());
results.put("Second", source_serv.findAll());
return results;
}
es w orked perfekt, wenn ich nur eine DataSource hatte, , aber jetzt wird es mit Fehler beendet: expected single matching bean but found 2: SourceEntityManagerFactory,ResultEntityManagerFactory
Ich verstehe nicht, warum es passiert. Meine Lösung sieht praktisch so aus, wie in obigem Link erwähnt, aber er bekommt keinen solchen Fehler.
werde ich für jede Hilfe
PS sehr dankbar sein. vergaß meine "AppConfig":
@Configuration
@ComponentScan(basePackages = { "com.migr" })
public class AppConfig {
@Bean(name="orclAdapter")
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
jpaVendorAdapter.setShowSql(true);
jpaVendorAdapter.setDatabase(Database.ORACLE);
return jpaVendorAdapter;
}
@Bean
public HibernateExceptionTranslator hibernateExceptionTranslator() {
return new HibernateExceptionTranslator();
}
}