我正在使用Spring Boot 2.X应用程序进行Spring Batch,实际上我已经从git中检出了它的现有代码。在运行该应用程序时,由于以下错误而导致失败仅对我自己,而相同的代码对其他人也有效。
s.c.a.AnnotationConfigApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'inputItemReader' defined in file [C:\Users\XYZ\git\main\batch\CBatchProcessing\target\classes\com\main\batchprocessing\batch\reader\InputItemReader.class]: Unsatisfied dependency expressed through **constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.lang.String' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations**: {} Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 2018-10-16 23:23:37.411 ERROR 2384 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPLICATION FAILED TO START *************************** Description: **Parameter 0 of constructor in com.main.batchprocessing.batch.reader.InputItemReader required a bean of type 'java.lang.String' that could not be found.** Action: Consider defining a bean of type 'java.lang.String' in your configuration.
我在下面检查了
码:
import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.batch.core.ExitStatus; import org.springframework.batch.core.StepExecution; import org.springframework.batch.core.StepExecutionListener; import org.springframework.batch.item.file.FlatFileItemReader; import org.springframework.batch.item.file.mapping.JsonLineMapper; import org.springframework.batch.item.file.separator.JsonRecordSeparatorPolicy; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.core.io.FileSystemResource; import org.springframework.stereotype.Component; @Component public class InputItemReader extends FlatFileItemReader<Map<String, Object>> implements StepExecutionListener { @Autowired private InputFileHeaderValidator inputFileHeaderValidator; @Autowired private FileAuditService fileAuditService; private final Logger log = LoggerFactory.getLogger(InputItemReader.class); private java.lang.String inputFilePath; public InputItemReader(String inputFilePath) { setLineMapper(new JsonLineMapper()); setRecordSeparatorPolicy(new JsonRecordSeparatorPolicy()); setResource(new FileSystemResource(inputFilePath)); this.inputFilePath = inputFilePath; } }
由于您不提供公共默认构造函数,而是添加了自己的非默认构造函数,因此实例化将失败。我建议您将输入文件路径定义为属性,例如@Value("${inputFilePath}")。如果您需要在bean中进行进一步的初始化,请定义一个void方法,并对其进行注释@PostConstruct并在其中进行初始化。
@Value("${inputFilePath}")
@PostConstruct