【问题标题】:java.util.Date bean of type could not be found找不到类型的 java.util.Date bean
【发布时间】:2019-11-12 20:02:49
【问题描述】:

Spring Boot 应用程序在运行时失败并出现以下错误:

***************************
APPLICATION FAILED TO START
***************************
Description:

Parameter 0 of constructor in com.bla.Application.Domain.SomeJavaClass required a bean of type 'java.util.Date' that could not be found.

Action:

Consider defining a bean of type 'java.util.Date' in your configuration.

我正在使用:

  1. Spring Boot (v1.5.8.RELEASE)
  2. STS4 IDE
  3. Java 8
  4. Linux Ubuntu 18

user@host:~$ java -version
openjdk 版本“1.8.0_222” OpenJDK 运行环境(build 1.8.0_222-8u222-b10-1ubuntu1~18.04.1-b10)
OpenJDK 64 位服务器 VM(内部版本 25.222-b10,混合模式)

我完全重新安装了Java,错误仍然一样... 有问题的班级:

Problematic Class 位于领域模型中:

package com.vip.SmartScheduler.Domain;

import java.util.Date;
import java.util.List;

import org.springframework.stereotype.Component;

import com.vip.SmartScheduler.Enum.PeriodUnit;

@Component
public class PeriodContainer {

    private Date periodBeginTimestamp;
    private List<UserStats> agentsWithStatistics;
    private PeriodUnit periodUnit;

    public PeriodContainer(Date periodBeginTimestamp, List<UserStats> agents, PeriodUnit periodUnit){
        this.periodBeginTimestamp = periodBeginTimestamp;
        this.agentsWithStatistics = agents;
        this.periodUnit = periodUnit;
    }

    public Date getPeriodBeginTimestamp() {
        return periodBeginTimestamp;
    }

    public void setPeriodBeginTimestamp(Date periodBeginTimestamp) {
        this.periodBeginTimestamp = periodBeginTimestamp;
    }

    public List<UserStats> getAgentsWithStatistics() {
        return agentsWithStatistics;
    }

    public void setAgentsWithStatistics(List<UserStats> agents) {
        this.agentsWithStatistics = agents;
    }

    public PeriodUnit getPeriodUnit() {
        return periodUnit;
    }

    public void setPeriodUnit(PeriodUnit periodUnit) {
        this.periodUnit = periodUnit;
    }

}

【问题讨论】:

  • 显示此类Application.Domain.SomeJavaClass
  • 您的代码在哪里?如果没有违规问题的代码示例,很难说发生了什么。
  • @locus2k - 我认为问题不在于代码本身。我认为这是java配置的问题。代码在其他机器上编译成功。

标签: java spring


【解决方案1】:

问题是你有问题的类有它的构造函数的参数,但你没有为你的参数定义 bean

你可以做几件事:

定义你的 bean

@Configuration
public class MyBeans {

  @Bean
  public Date periodBeginTimestamp() {
    return new Date();
  }

  @Bean
  public List<UserStats> agents() {
    return new ArrayList<UserStats>();
  }

  @Bean
  public PeriodUnit periodUnit() {
    return new PeriodUnit();
  }

}

这将创建必要的 bean 来注入您的参数,但不确定这是否会给您提供您想要填充值的控件。

零参数构造函数

另一种方法是创建一个零参数构造函数,然后有一个方法来设置你需要的东西:

@Component
public class PeriodContainer {

  private Date periodBeginTimestamp;
  private List<UserStats> agentsWithStatistics;
  private PeriodUnit periodUnit;

  public PeriodContainer(){}

  public void setValues(Date periodBeginTimestamp, List<UserStats> agents, PeriodUnit periodUnit){
    this.periodBeginTimestamp = periodBeginTimestamp;
    this.agentsWithStatistics = agents;
    this.periodUnit = periodUnit;
  }

  ...
}

那么你需要它吗:

@Service
public class MyClass {
  @Autowire
  private PeriodContainer container;

  @PostConstruct
  private void init() {
    Date periodBeginTimestamp = getTimeStamp();
    List<UserStats> agents = getUserStatsList();
    PeriodUnit periodUnit = getPeriodUnit();
    container.setValues(periodBeginTimestamp, agents, periodUnit); 
  }
}

【讨论】:

    【解决方案2】:

    看起来您可能还没有创建java.Util.date bean。如果是这样,请按照步骤here 以正确方式注入 Date bean 而不会出错。如果不是这种情况,请添加您的 bean 配置文件(或 maven pom.xmlm 或等效文件)以帮助理解问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-16
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 2018-06-12
      • 2019-04-02
      相关资源
      最近更新 更多