如何在外部类上加载@ConfigurationProperties?

时间:2018-01-29 13:44:39

标签: java spring spring-boot

如果bean类来自外部库(例如我自己的公共库),我如何使用@ConfigurationProperties填充该bean?

示例:来自公共图书馆:

package com.my.commons.person;

import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotNull;

@Validated
public class CommonPerson {
    private @NotNull String name;
    private @NotNull String age;

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getAge() { return age; }
    public void setAge(String age) { this.age = age; }
}

实施项目:

package com.my.api;

@SpringBootApplication
public class MainApp extends SpringBootServletInitializer {
    @Bean
    @ConfigurationProperties("commons.person")
    public CommonPerson person() {
        return new CommonPerson();
    }
}

application.properties(也仅在实现项目中):

commons.person.name=Dummy
commons.person.age=30

结果:

  由于验证异常,

应用程序启动失败。   o.s.b.b.PropertiesConfigurationFactory:对象中的字段错误   ' commons.person'在字段'名称':被拒绝的值[null] ...

顺便说一句:如果我将CommonPerson直接移动到实现项目中,代码将按预期工作。只有当班级来自外部时才会起作用......

根据文档,这应该工作: @ConfigurationProperties on thirdparty classes

我用maven加载我的commons包:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath/>
</parent>
<dependencies>
    <dependency>
        <groupId>com.my.commons</groupId>
        <artifactId>person-commons</artifactId>
        <version>1.0.0</version>
    </dependency>
</dependencies>

2 个答案:

答案 0 :(得分:0)

正如@davidxxx和其他人所指出的,代码本身是正确的。

我的问题可能是IDE的一些缓存问题。我刚刚取出pom.xml中的公共图书馆,保存并阅读。这在某种程度上引发了IDE内部的清理,mvn clean install没有(因为我以前曾多次运行过这些maven目标)。

答案 1 :(得分:0)

尝试使用... @EnableConfigurationProperties批注启用配置属性支持,这可能会有所帮助。

一些示例和用法说明: 12