我正在尝试使用基于Javaconfig的Spring配置。我有两个相同类型的bean,并试图通过限定符自动连接它们。但它似乎不起作用。
这是我的配置类
@Configuration
@EnableAutoConfiguration
@ComponentScan("com.test")
public class BasicConfig {
@Bean(name = "mysqlSource")
@Qualifier("mysqlSource")
public DataSource jdbcTemplateMySql() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/db1?useUnicode=true&characterEncoding=UTF-8");
dataSource.setUsername(mysqlUser);
dataSource.setPassword(mysqlPass);
return dataSource;
}
@Bean(name = "oracleSource")
@Qualifier("oracleSource")
public DataSource jdbcSourceOracle() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
dataSource.setUrl("jdbc:oracle:thin:@lab-scan.tigeritbd.com:1521/evidb.tigeritbd.com");
dataSource.setUsername(oracleUser);
dataSource.setPassword(oraclePass);
return dataSource;
}
}
这两个是我尝试使用autowire的其他类。
@Repository public class TrackingInfiniDBRepo implements DataPutRepo { private NamedParameterJdbcTemplate jdbcTemplate; @Autowired void setJdbcTemplateOracle(@Qualifier("mysqlSource") DataSource dataSource) { jdbcTemplate = new NamedParameterJdbcTemplate(dataSource); } }
@Repository public class OracleDataFetcherRepo implements DataFetcherRepo { private NamedParameterJdbcTemplate jdbcTemplateOracle; @Autowired void setJdbcTemplateOracle(@Qualifier("oracleSource") DataSource dataSource) { jdbcTemplateOracle = new NamedParameterJdbcTemplate(dataSource); } }
但当我通过ConfigurableApplicationContext=SpringApplication启动应用程序时。run(BasicConfig.class)
它会抛出一个异常。
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration.dataSource; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] is defined: expected single matching bean but found 2: mysqlSource,oracleSource
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:703)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:760)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:648)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:311)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:909)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:898)
at com.tigerit.tracking.Application.main(Application.java:21)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private javax.sql.DataSource org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration.dataSource; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] is defined: expected single matching bean but found 2: mysqlSource,oracleSource
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289)
... 15 more
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [javax.sql.DataSource] is defined: expected single matching bean but found 2: mysqlSource,oracleSource
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:970)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:858)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)
... 17 more
我不知道。我试图用谷歌搜索它,但似乎都建议添加Qualifier。但我已经添加了,但没有用。请帮忙。我正在使用Spring 4(当前版本)。
您的数据源之一必须是
@Primary
(参见文档)。
在Springs的最新版本中,我们可以使用注释作为自动连接bean。这将使用bean的类型(或构造函数,如果应用于它的话)自动连接bean。有什么方法可以使用基于bean名称的注释吗?我们在Spring的XML文件中没有注释autowire=“byName”?
问题内容: 我编写了以下Angular指令,该指令将向所有子代添加“必需”属性: 我真的很想称它为“ require-all”,但是如果我重命名它,它将不再起作用。为什么“ requireall”有效而“ require-all”无效? 问题答案: Angular将camelCasing转换为snake- casing,因此您的requireall指令需要重命名为,然后可以在标记中使用(或者如果要
我刚刚开始学习Spring,我面临以下问题。有人能指出我可能做错了什么吗? 线程“main”组织中出现异常。springframework。豆。工厂BeanDefinitionStoreException:IOException解析来自类路径资源[org/pus/learn/src/main/resources/applicationBean.XML]的XML文档;嵌套的例外是java。伊奥。Fi
我有多张谷歌表。所有数据列都具有相同的名称(id、日期、金额),但列数不同:在第1页中,“id”列是A列,在第2页中“id”列可以是C列或任何其他列。 我正在尝试创建一个主工作表,从所有工作表中提取所有数据并按列名排列。尝试使用Query,但它似乎可以与列id(A,B)一起工作,而在我的例子中,id(A,B)正在发生变化。 这是一张样品单
问题内容: MySQL具有方便的功能: 这可用于为应用程序创建简单但非常具体的基于名称的锁。但是,它需要数据库连接。 我有很多情况,例如: 简单地同步此方法是没有意义的,因为,例如,如果在此期间同时为用户B调用了此方法,则用户B无需等待用户A完成操作就可以开始操作,而只需为用户进行操作A和功能X的组合需要等待。 使用MySql锁,我可以执行以下操作: 由于Java锁定基于对象,因此似乎需要创建一个