मैं स्प्रिंग डेटा के साथ एकाधिक डेटाबेस कॉन्फ़िगर करने के लिए स्प्रिंग जावा आधारित कॉन्फ़िगरेशन का उपयोग कर रहा हूं। कॉन्फ़िगरेशन फ़ाइल में, मैं और MSSQL-Server
के लिए दो data source
बना रहा हूं। जब @Resource
एनोटेशन मैं निम्नलिखित अपवाद हो रही है का उपयोग करते हुए इकाई के प्रबंधक को निर्भरता इंजेक्षन करने की कोशिश कर:संसाधन एनोटेशन: प्रकार की कोई योग्यता बीन [javax.sql.DataSource] परिभाषित नहीं है: अपेक्षित एकल मिलान बीन लेकिन 2
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] is defined: expected single matching bean but found 2: mysql_datasource,secure_datasource
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1016)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:904)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:815)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:743)
के बाद मेरी कोड है:
@Bean(name="secure_datasource")
public DataSource dataSource(){
try{
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl(environment.getProperty("sc.db.url"));
dataSource.setDriverClass(environment.getProperty("sc.db.driver.class"));
dataSource.setUser(environment.getProperty("sc.db.username"));
dataSource.setPassword(environment.getProperty("sc.db.password"));
dataSource.setIdleConnectionTestPeriod(60);
dataSource.setMaxPoolSize(10);
dataSource.setMaxStatements(7);
dataSource.setMinPoolSize(1);
return dataSource;
}catch(Exception ex){
throw new RuntimeException(ex);
}
}
.................
@Bean(name="mysql_datasource")
public DataSource dataSource(){
try{
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setJdbcUrl(environment.getProperty("db.url"));
dataSource.setDriverClass(environment.getProperty("db.driver.class"));
dataSource.setUser(environment.getProperty("db.username"));
dataSource.setPassword(environment.getProperty("db.password"));
dataSource.setIdleConnectionTestPeriod(60);
dataSource.setMaxPoolSize(100);
dataSource.setMaxStatements(50);
dataSource.setMinPoolSize(10);
return dataSource;
}catch(Exception ex){
throw new RuntimeException(ex);
}
}
.......
@Resource(value="mysql_datasource")
@Bean(name="entity_manager_factory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource){
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setPersistenceProviderClass(HibernatePersistenceProvider.class);
factoryBean.setPackagesToScan(environment.getProperty("package.scan"));
factoryBean.setJpaVendorAdapter(jpaVendorAdapter);
return factoryBean;
}
मैं भी रूप में @Qualifier
एनोटेशन उपयोग करने के लिए कोशिश कर रहा हूँ मैं इस लिंक का सुझाव , लेकिन अभी भी त्रुटि हो रही है। Using 2 beans of the same type: javax.sql.DataSource in Spring
मैंने @ प्राथमिक निर्देश जोड़ा लेकिन जब मैं लेनदेन प्रबंधक बना देता हूं, तो उनके दोनों सत्र कारखानों प्राथमिक डेटासोर्स का उपयोग करते हैं। क्या डेटासॉक्ट्री का उपयोग करने के लिए विशेष रूप से सत्रफैक्टरी को बताने का कोई तरीका है? – Sakib
हमें शायद पता लगाने के लिए आपके कोड का थोड़ा सा पता होना चाहिए, जैसा कि आप उपरोक्त कोड में देख सकते हैं, सत्र प्रबंधक लेनदेन प्रबंधक निर्माण पर निर्दिष्ट है। –