gpt4 book ai didi

java - 防止 Spring 容器对提供的 Bean 执行注入(inject)

转载 作者:行者123 更新时间:2023-11-30 02:33:54 25 4
gpt4 key购买 nike

我的目标是将 Spring Batch 与不同的 DataSource 实例分别用于我的 ItemWriterJobRepository,这应该可以工作 like this .

不幸的是,Spring 容器在稍后阶段注入(inject)主数据源,我可以通过调试器确认这一点。这是我的配置:

@RunWith(SpringJUnit4ClassRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@SpringBootTest(classes = { BatchTest.DatabaseConfig.class, BatchTest.BatchTestConfig.class })
public class BatchTest {

@Configuration
static class DatabaseConfig {

@Bean
@Primary
@ConfigurationProperties("spring.datasource")
public DataSource primaryDataSource() {
return DataSourceBuilder.create()
.build();
}

@Bean
@ConfigurationProperties("spring.secondaryDatasource")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create()
.build();
}
}

@Configuration
@EnableBatchProcessing
static class BatchTestConfig {

@Bean()
BatchConfigurer configurer(@Qualifier("secondaryDataSource") DataSource dataSource) {
return new DefaultBatchConfigurer(dataSource);
}
}
}

我认为这是由于定义的setter注入(inject)

package org.springframework.batch.core.configuration.annotation;

@Component
public class DefaultBatchConfigurer implements BatchConfigurer {

@Autowired(required = false)
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.transactionManager = new DataSourceTransactionManager(dataSource);
}
}

所以现在我想知道上面提到的 SO 响应如何在我的情况下起作用或者更确切地说不起作用。我可以以某种方式禁用所提供的 bean 上的附加 setter 注入(inject)吗?

最佳答案

尝试重写 DefaultBatchConfigurer#setDataSource 并将限定符添加到 setDataSource 方法:

    @Bean()
BatchConfigurer configurer(@Qualifier("secondaryDataSource") DataSource dataSource) {
return new DefaultBatchConfigurer(dataSource) {

@Autowired(required = false)
public void setDataSource(@Qualifier("secondaryDataSource") DataSource dataSource) {
super.setDataSource(dataSource);
}
};
}

我同意这有点奇怪,但 Spring Batch 有这样的限制也很奇怪。

您甚至可以尝试在没有任何注释的情况下进行覆盖。我不记得 Spring 是否也在类层次结构中搜索注释。

关于java - 防止 Spring 容器对提供的 Bean 执行注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43614849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com