考虑在配置中定义*类型的Bean

时间:2019-03-13 13:21:16

标签: java spring

我不了解此错误或解决此错误的任何步骤。建议采取的措施对我来说意义不大。我看到这样的问题问了很多,但我仍然不了解潜在的问题。

我得到的错误是:

Description:
Parameter 0 of constructor in com.yrc.mcc.core.batch.listener.ChunkSizeListener required a bean of type 'java.io.File' that could not be found.**

Action:
Consider defining a bean of type 'java.io.File' in your configuration.

我班的内容:

@Component
public class ChunkSizeListener extends StepListenerSupport<Object, Object> {

    private FileWriter fileWriter;

    public ChunkSizeListener(File file) throws IOException {
        fileWriter = new FileWriter(file, true);
    }

    @Override
    public ExitStatus afterStep(StepExecution stepExecution) {
        try {
            fileWriter.close();
        } catch (IOException e) {
            System.err.println("Unable to close writer");
        }
        return super.afterStep(stepExecution);
    }

    @Override
    public void beforeChunk(ChunkContext context) {
        try {
            fileWriter.write("your custom header");
            fileWriter.flush();
        } catch (IOException e) {
            System.err.println("Unable to write header to file");
        }
    }
}

2 个答案:

答案 0 :(得分:1)

很明显!

  

从Spring 4.3开始,如果有一个类,它被配置为Spring   bean,只有一个构造函数,Autowired注释可以是   省略,Spring将使用该构造函数并注入所有必要的   依赖性

因此,在您的情况下,spring希望将Type File的bean(不是您的情况)作为bean,因此,您可以做的就是更新代码,向类中添加默认构造函数,如下所示:

@Component
public class ChunkSizeListener extends StepListenerSupport<Object, Object> {

    private FileWriter fileWriter;

    public ChunkSizeListener() {
        // not sure if you should keep the super() or not
        super();
    }

    public ChunkSizeListener(File file) throws IOException {
        fileWriter = new FileWriter(file, true);
    }

    @Override
    public ExitStatus afterStep(StepExecution stepExecution) {
        try {
            fileWriter.close();
        } catch (IOException e) {
            System.err.println("Unable to close writer");
        }
        return super.afterStep(stepExecution);
    }

    @Override
    public void beforeChunk(ChunkContext context) {
        try {
            fileWriter.write("your custom header");
            fileWriter.flush();
        } catch (IOException e) {
            System.err.println("Unable to write header to file");
        }
    }
}

答案 1 :(得分:0)

您有一个Spring bean(因为它有一个Axis.set_tick_params批注),它带有一个以dotnet ef migrations add SomeMigration --startup-project ../path/to/Api/project 作为参数的构造函数。

当Spring要创建该bean的实例时,它将寻找另一个必需类型的Spring bean(在这种情况下为@Component)来调用构造函数。

由于您的应用程序上下文中没有所需类型的Spring Bean,因此会出现此错误消息。

如错误消息所暗示的那样,在Spring应用程序上下文中添加File对象,这很可能不是适合您的情况的正确解决方案。

例如,您可以将构造函数更改为此:

File

然后您将需要一个Spring属性源,该源定义了“ filename”属性。

如果您的应用程序是Spring Boot应用程序,则只需在File中插入一行:

public ChunkSizeListener(@Value("${filename}") String filename) throws IOException {
    fileWriter = new FileWriter(new File(filename), true);
}