当前位置: 首页 > 知识库问答 >
问题:

但是不能重写bean@primary Spring注释

葛哲彦
2023-03-14
<!-- Datasource configuration -->
<beans:bean id="dataSource" name="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">      
   <beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
   <beans:property name="url" value="" />
   <beans:property name="username" value="" />
   <beans:property name="password" value="" /> 
</beans:bean>
@ImportResource(dispatcher-servlet.xml)

    @Bean
    @Primary
    public EmbeddedDatabase dataSource() {
        EmbeddedDatabaseBuilder databaseBuilder = new EmbeddedDatabaseBuilder();
        databaseBuilder.setName("testDB");
        databaseBuilder.setType(EmbeddedDatabaseType.H2);

        return databaseBuilder.build();
    }
@ContextConfiguration(classes = config.class)
@WebAppConfiguration
// Test

[信息]用不同的定义重写bean“data source”的bean定义:替换[Root bean:class[null];scope=;abstract=false;lazyinit=false;autowiremode=3;dependencycheck=0;autowirecandide=true;primary=true;factorymethodname=config;factorymethodname=dataSource;initmethodname=null;destroymethodname=(inefenced);在...中定义[Generic andidate=true;primary=false;factorybeanname=null;factorymethodname=null;initmethodname=null;destroymethodname=null;在URL[dispatcher-servlet.xml]中定义]


似乎忽略了@primary注释。
为什么?解决办法是什么?

共有1个答案

陶柏
2023-03-14

我不确定混合不同的配置类型是个好主意。如果我读到这种配置,我可能会挣扎,相信我,我实际上做了很多。

但是,作为您问题的答案,XML优先于注释。因此,尝试在XML中声明bean,或者只在应用程序中使用注释。

您可以尝试使用@qualifier注释。也许像这样:

@Bean
@Qualifier("my_qualifier")
public EmbeddedDatabase dataSource() {
    EmbeddedDatabaseBuilder databaseBuilder = new EmbeddedDatabaseBuilder();
    databaseBuilder.setName("testDB");
    databaseBuilder.setType(EmbeddedDatabaseType.H2);

    return databaseBuilder.build();
}

并使用以下方法注入:

@Autowired
@Qualifier("my_qualifier")
EmbeddedDatabase database;

但我仍然不确定它是否有效。

附言。如果尚未设置自动批注扫描,则应将其添加到XML中。从你提到的评论来看,它是过时的,但它不是。

<context:component-scan base-package="your.base.package" />
 类似资料:
  • 我按照本教程在Java中配置Spring批处理作业。它通过使用一个接口为多个数据源做准备,然后由每个数据源实现该接口。 这是我目前所掌握的: PostgreSQLConfig.java jobconfig.java 通过对我的MySQLConfig使用注释,我希望使用MySQLConfig bean。相反,我得到的是:

  • 在这件事上有困难。。。 使用XLS,一切都能100%正常工作(我在我的ASP.NET应用程序上使用NPOI): 需求发生了变化,新的Excel模板使用了XLSX的功能,因此它现在是<代码>模板。xlsx。我一直在使用NPOI 2.0,我看到它支持XLSX(使用XSSF而不是HSSF)。我这样更改了代码(这里只显示了差异-其他内容都是一样的): 在工作簿的第行抛出异常。写入(ms) : 我可能做错了

  • 我的配置如下所示: 在应用程序上下文启动期间,我会在日志中收到如下内容: [INFO][]重写bean“ReconficationJob”的bean定义:替换[Generic bean:class[org.springframework.batch.core.configuration.xml.SimpleFlowFactoryBean];scope=;abstract=false;lazyIni

  • 我试图在测试配置中使用@primary声明的测试期间覆盖Spring bean。一个声明位于src/main/java路径中,另一个声明位于src/test/java路径中。 从日志来看: o.s.b.f.s.DefaultListableBeanFactory-用不同的定义重写bean“SQS ConnectionFactory”的bean定义:替换[根bean:class[null];scop

  • 我从以下来源下载了应用程序https://github.com/springframeworkguru/spring5-mvc-rest/tree/vendor-api,但Mapstruct遇到了问题。 我认为在Intellij注释中@mapper不为mapper创建bean。我没有改变John GitHub的代码。你知道吗?我试图将生成的路径源更改为目标,但这没有帮助,谢谢你的帮助。

  • 在JavaEE6中,有一个内置的bean类型可供注入,如