【问题标题】:Spring Boot/Batch with multiple @Configuration classes not instantiating bean (or loading properties)具有多个 @Configuration 类的 Spring Boot/Batch 不实例化 bean(或加载属性)
【发布时间】:2019-02-14 23:51:08
【问题描述】:

首先,如果这似乎与其他问题相似,我们深表歉意 - 我已经查看并尝试了建议的解决方案,但没有一个解决问题。首先是净化后的代码...

package com.mine.batchMain;
@SpringBootApplication
@Configuration
public class MyApplication implements CommandLineRunner {
//...
public static void main(String[] args) {
//....
}
}

package com.mine.batchMain;
//...
import com.min.batchMain.firstSteps.FirstStepConfigHolder;
//...

@Configuration 
@EnableBatchProcessing
public class BatchConfigurer {
//....
@Autowired
private FirstStepConfigHolder firstStep;
//...
@Bean
public Step defineFirstStep() {
return stepBuilder.get("First Step")
.chunk<MyPOJO, MyPOJO>(batchSize)
.readerfirstStep.fetcher())
.writer(firstStep.extracter())
.listener(firstStep.listen())
.build();
}
//....
}

package com.mine.batchMain.firstSteps;
//...
import com.mine.batchMain.common.MyRepo;
import com.mine.batchMain.firstSteps.DocFetcher;
//...

@Configuration
@EnableJPARepositories
public class FirstStepConfigHolder {
//....
@Value("${myapp.dbUrl}")
String dbUrl;
@Value("${myapp.dbSchema}")
String dbSchema;
@Value("${myapp.dbUser}")
String dbUser;
@Value("${myapp.encDbPass}")
String encryptDbPass;
@Value("${myapp.dbDriver}")
String dbDriver;
@Value("${myapp.maxDocSize}")
String maxDocSize;
@Value("${myapp.maxNumDocs}")
String maxNumDocs;

@Bean
public DocFetcher fetcher() {
    log.trace("Creating DocFetcher.")
    return new DocFetcher(myDb());
}
@Bean
public MyRepo myDb() {
    log.trace("Creating repo.");
    MyRepo retDb = new MyRepo(myDataSource());
    retDb.setMaxNumDocs(Integer.valueOf(maxNumDocs));
    retDb.setMaxDocSize(Integer.valueOf(maxDocSize));
    log.debug("Confirming db class state:"+retDb.toString());
    return retDb;
}
private DataSource myDataSource() {
    DriverManagerDataSource retDs = new DriverManagerDataSource(dbUrl, dbUser, decrypt(encryptDbPass));
    retDs.setDriverClassName(dbDriver);
    return retDs;
}

}

问题/症状如下: 1) MyRepo 没有选择 maxDocSize 和 maxNumDocs。 (日志显示默认值) 2) Logging 显示对“Creating DocFetcher”的跟踪调用,而不是对“Creating repo.”的跟踪调用,也没有显示 Repo 状态的调试。

这是令人沮丧的,据我所知和理解,它应该把它们捡起来。我遗漏了什么和/或理解不正确?

【问题讨论】:

    标签: spring spring-boot configuration spring-batch


    【解决方案1】:

    确保您的 BatchConfigurer.java 文件应与您的 MainApplication.java 文件位于同一包中。

    或者,

    在您的 MainApplication.java 文件中导入 BatchConfigurer.java

    查看此图片以供参考

    【讨论】:

    • 是的。我已经编辑了代码以显示包关系。
    • 不是问题,只需在您的 MyApplication 文件中添加 @ComponentScan(basePackages = { "com.mine"}) 它肯定会工作。
    • 我已经这样做了。没有结果。此外,根据文档,由于所有内容都在同一个包下,a) ComponentScan 应该默认选择所有内容。 b) 我什至不需要显式声明 ComponentScan。
    猜你喜欢
    • 2022-01-14
    • 2021-03-01
    • 2018-01-16
    • 2020-05-03
    • 1970-01-01
    • 2014-03-22
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多