Spring Boot / Batch с несколькими классами @Configuration, не создающими экземпляр компонента (или загружающими свойства) - PullRequest
0 голосов
/ 15 февраля 2019

Итак, во-первых, извинения, если это похоже на другие проблемы - я посмотрел, попробовал предложенные решения, и никто не решил проблемы.Сначала обработанный код ...

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) В журнале отображается вызов трассировки для «Создание DocFetcher», но не для «Создание репо», и не отображается отладка состояния «Репо».

Что разочаровывает, так какв соответствии с тем, что я знаю и понимаю, это должно быть таким.Что я упускаю и / или неправильно понимаю?

1 Ответ

0 голосов
/ 15 февраля 2019

Убедитесь, что файл BatchConfigurer.java должен находиться в том же пакете, что и файл MainApplication.java .

или

Импортируйте BatchConfigurer.java в файл MainApplication.java .

Проверьте это изображение для справки

...