'populate enum fields with application.properties and java configuration

with spring xml configuration, it is possible to define the following in app context xml to populate the status field in the TestEnum:

app context xml

    <bean id="blue" class="com.example.demo.test.TestEnum" factory-method="valueOf">
        <property name="status" value="${testnum.blue.status}"/>
        <constructor-arg>
            <value>BLUE</value>
        </constructor-arg>
    </bean>
    <bean id="red" class="com.example.demo.test.TestEnum" factory-method="valueOf">
        <property name="status" value="${testnum.red.status}"/>
        <constructor-arg>
            <value>RED</value>
        </constructor-arg>
    </bean>

enum class


public enum TestEnum {
    
    BLUE,
    RED;
    
    private String status;
    
    public String getStatus() {
        return status;
    }
    
    public void setStatus(String status) {
        this.status = status;
    }
}

mystatus.properties

testnum.blue.status=good
testnum.red.status=bad

Is this possible with spring boot using application.properties + java configuration without xml?



Solution 1:[1]

Yes, a simple environment configuration class (annotated with @ConfigurationProperties for example), will map and do the conversion of your enum automatically.

Example:

@Configuration
@Validated
@ConfigurationProperties(prefix = "my.property.path")
public class TestConfiguration{

    public enum TestEnum {
        BLUE, RED
    }

    @NotNull
    private TestEnum type;

    public TestConfiguration() {
    }

    public @NotNull TestEnum getType() {
        return this.type;
    }

    public void setType(@NotNull TestEnum type) {
        this.type = type;
    }
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Mickaël B.