SpringBatch 5-在@EnableBatchProcessing annotation中提供批次“tablePrefix”名称(来自属性文件)

r9f1avp5  于 2023-11-17  发布在  Spring
关注(0)|答案(1)|浏览(165)

在将我的应用程序迁移到SpringBatch 5时,我看到在@EnableBatchProcessing annotation中引入了新的属性来配置dataSource,transactionManager,tablePrefix等。我可以像下面这样在annotation中提供批处理“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,但没有成功。有人能帮忙吗?

nukf8bse

nukf8bse1#

你可以在@EnableBatchProcessingtablePrefix参数中使用Spring's Expression Language(SpEL)。所以现在你有两个选择:
1.您可以直接调用属性。这可以通过以下方式完成:

@EnableBatchProcessing(tablePrefix = "${config.tablePrefix}")
public class BatchConf  {
    // ...
}

字符串
1.您可以通过名称引用ConfigurationProperties bean。bean名称取决于您使用的是@Component还是类似@EnableConfigurationProperties@ConfigurationPropertiesScan的名称。如果您使用后者,则bean名称由<prefix>-<fully qualified name>see relevant Q&A)组成。因此您可以这样做:

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


在这些示例中,我假设配置属性的前缀是config.*,并且ConfigurationProperties类位于名为com.example.demo的包中。
第一种方法的优点是它有点短,但它只是读取属性本身,并跳过配置属性类中设置的任何默认值或转换。第二种方法要求您通过确切的名称找到bean,但也允许您调用任何Java方法。

相关问题