Spring Boot 无法自动连接,找不到'int'类型的Bean

zdwk9cvp  于 2022-11-23  发布在  Spring
关注(0)|答案(4)|浏览(256)

我尝试从Sping Boot 应用程序中的应用程序属性文件读取数据。
以下代码是我的主类。

@SpringBootApplication(scanBasePackages = "com.fsk.limitservice")
public class LimitServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(LimitServiceApplication.class, args);
    }
}

以下代码是我的控制器类

@RestController
public class LimitsConfigurationController {

    @Autowired
    LimitConfiguration limitConfiguration;

    @GetMapping("/limits")
    public LimitConfiguration retrieveLimitFromConfiguration() {
        return new LimitConfiguration(limitConfiguration.getMinimum(), limitConfiguration.getMaximum());
    }
}

以下代码是我的组件类

@Component
@ConfigurationProperties("limits-service")
public class LimitConfiguration {

    private int minimum;
    private int maximum;

    public LimitConfiguration(int minimum, int maximum) {
        this.minimum = minimum;
        this.maximum = maximum;
    }

    public int getMinimum() {
        return minimum;
    }

    public void setMinimum(int minimum) {
        this.minimum = minimum;
    }

    public int getMaximum() {
        return maximum;
    }

    public void setMaximum(int maximum) {
        this.maximum = maximum;
    }
}

最后,这是我的应用程序属性文件

spring.application.name=limits-service
limits-service.minimum=17
limits-service.maximum=1124

当我单击运行按钮时,我得到以下错误。我如何修复此错误?

uxh89sit

uxh89sit1#

1.将@ConfigurationPropertiesScan添加到限制服务应用程序
1.将@ConstructorBinding添加到限制配置并删除 @Component

i34xakig

i34xakig2#

如果删除构造函数,则不会抛出异常,因为Spring框架使用setter绑定属性,因此必须为每个属性声明setter。
从Spring 2.2开始,可以通过类路径扫描找到@ConfigurationProperties,作为使用@EnableConfigurationProperties@Component的替代方法。要启用扫描,应该将@ConfigurationPropertiesScan添加到应用程序类中。

ht4b089n

ht4b089n3#

您可以移除建构函式,并在字段上加入下列注解:

@Configuration
public class LimitConfiguration {

    @Value("${limits-service.minimum}")
    private int minimum;

    @Value("${limits-service.maximum}")
    private int maximum;

...
}

还有,没有必要做
return new LimitConfiguration(limitConfiguration.getMinimum(),limitConfiguration.getMaximum());
这正在示例化一个新的LimitConfiguration,该配置将不会被Spring容器识别。

mccptt67

mccptt674#

看起来LimitConfiguration类被用作数据传输的目的。

@RestController
@RequestMapping("/limits")
public class LimitsConfigurationController {

    @Value("${limits-service.minimum}")
    private int minimum;

    @Value("${limits-service.maximum}")
    private int maximum;

    @GetMapping
    public LimitConfiguration retrieveLimitFromConfiguration() {
        return new LimitConfiguration(minimum, maximum);
    }
}

LimitConfiguration类应该如下所示

public class LimitConfiguration {

    private int minimum;

    private int maximum;

    // Getters, Setters, No args constructor and 2 args constructor

}

相关问题