I am using Spring Java Based configuration for configure multiple database with Spring Data. In the configuration file, i am creating two data source for MySQL and MSSQL-Server. When trying to inject dependency to the entity manager using @Resource annotation i am getting following exception:
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) Following is my Code:
@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; } I am also trying to use @Qualifier annotation as suggest i this link, but still getting error. Using 2 beans of the same type: javax.sql.DataSource in Spring