SpringBatch5 - 在 @EnableBatchProcessing 注释中提供批处理“tablePrefix”名称(来自属性文件)

问题描述 投票:0回答:1

在将我的应用程序迁移到 SpringBatch5 时,我发现在 @EnableBatchProcessing 注释中引入了新属性来配置 dataSource 、 transactionManager 、 tablePrefix 等。我可以在注释中提供批量“tablePrefix”,如下所示,效果很好。

@Configuration
@EnableBatchProcessing(dataSourceRef = "dataSourceCon" , transactionManagerRef = 
     "getTransactionManager" , tablePrefix = "ABC_BATCH_")
@RequiredArgsConstructor
public class BatchConf  {

     private final PlatformTransactionManager transactionManager;
     private final @Qualifier("dataSourceCon) DataSource dataSourceCon;
     private final ConfigurationProperties configProperties;    /// this class is annotated with @ConfiguratonProperties and having "tablePrefix" field 

 /// batch job , step   etc         
 }

我将“tablePrefix”值放在属性文件中,我想从那里获取它,而不是直接在代码中配置名称。我尝试通过返回未成功的值来注册具有相同名称的bean。 任何人都可以帮忙吗!

spring-boot spring-batch batch-processing spring-boot-3
1个回答
0
投票

您可以在tablePrefix

@EnableBatchProcessing
参数中使用
Spring的表达式语言
(SpEL)。所以现在你有两个选择:

  1. 您可以直接致电住宿。这可以通过以下方式完成:

    @EnableBatchProcessing(tablePrefix = "${config.tablePrefix}")
    public class BatchConf  {
        // ...
    }
    
  2. 您可以通过名称来引用

    ConfigurationProperties
    bean。 bean 名称取决于您是否使用
    @Component
    还是类似
    @EnableConfigurationProperties
    @ConfigurationPropertiesScan
    的名称。如果您使用后者,则 bean 名称由
    <prefix>-<fully qualified name>
    组成(参见相关 Q&A)。所以你可以做这样的事情:

    @EnableBatchProcessing(tablePrefix = "#{@'config-com.example.demo.ConfigurationProperties'.tablePrefix}")
    public class BatchConf  {
        // ...
    }
    

在这些示例中,我假设您的配置属性的前缀是

config.*
并且您的
ConfigurationProperties
类位于名为
com.example.demo
的包中。

第一种方法的优点是它有点短,但它只是读取属性本身并跳过配置属性类中设置的任何默认值或转换。第二种方法要求您通过确切的名称找到 bean,但也允许您调用任何 Java 方法。

© www.soinside.com 2019 - 2024. All rights reserved.