2015-11-25 3 views
1

Ниже мой частичный трассировки стека:весна загрузки configurationproperties ошибка

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) 
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813) 
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) 
    ... 91 more 
Caused by: org.springframework.validation.BindException: org.springframework.boot.bind.RelaxedDataBinder$RelaxedBeanPropertyBindingResult: 6 errors 
Field error in object 'responsys' on field 'contactList': rejected value [null]; codes [NotNull.responsys.contactList,NotNull.contactList,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [responsys.contactList,contactList]; arguments []; default message [contactList]]; default message [may not be null] 
Field error in object 'responsys' on field 'endpoint': rejected value [null]; codes [NotNull.responsys.endpoint,NotNull.endpoint,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [responsys.endpoint,endpoint]; arguments []; default message [endpoint]]; default message [may not be null] 
Field error in object 'responsys' on field 'retryDelaysInSeconds': rejected value [null]; codes [NotNull.responsys.retryDelaysInSeconds,NotNull.retryDelaysInSeconds,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [responsys.retryDelaysInSeconds,retryDelaysInSeconds]; arguments []; default message [retryDelaysInSeconds]]; default message [may not be null] 
Field error in object 'responsys' on field 'username': rejected value [null]; codes [NotNull.responsys.username,NotNull.username,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [responsys.username,username]; arguments []; default message [username]]; default message [may not be null] 
Field error in object 'responsys' on field 'maxBatchSize': rejected value [0]; codes [Min.responsys.maxBatchSize,Min.maxBatchSize,Min.int,Min]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [responsys.maxBatchSize,maxBatchSize]; arguments []; default message [maxBatchSize],1]; default message [Minumum value is 1 and it disables batching completely] 
Field error in object 'responsys' on field 'password': rejected value [null]; codes [NotNull.responsys.password,NotNull.password,NotNull.java.lang.String,NotNull]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [responsys.password,password]; arguments []; default message [password]]; default message [may not be null] 
    at org.springframework.boot.bind.PropertiesConfigurationFactory.validate(PropertiesConfigurationFactory.java:350) 

Ниже мой @ConfigurationProperties класс:

@Configuration 
@ConfigurationProperties(prefix="responsys") 
public class ResponsysConfig { 

    @NotNull 
    private String username; 

    @NotNull 
    private String password; 

    @NotNull 
    private String endpoint; 

    @NotNull 
    private String contactList; 

    @NotNull 
    private float expireTasksAfterHours; 

    @NotNull 
    @Max(value = 200, message = "Responsys API maximum batch size is 200") 
    @Min(value = 1, message = "Minumum value is 1 and it disables batching completely") 

    private int maxBatchSize; 

    @NotNull 
    private int batchAggregationTimeInMS; 

    @NotNull 
    private String retryDelaysInSeconds; 


    private int[] retriesInSecondsInt; 

    private String folderName; 
    .... 
    .... 

Ниже мой application.properties файл:

responsys.username=xxxx 
responsys.password=xxxx 
responsys.endpoint=xxxx 
responsys.contactList=xxxx 
responsys.retriesInSeconds=xxxx,xxx 
responsys.expireTasksAfterHours=xx 
responsys.maxBatchSize=xx 
responsys.batchAggregationTimeInMS=xxxx 

У меня есть тот же файл application.properties в src/main/resources и src/test/resources. Но загруженность контекста приложения не работает в модульных тестах, но при запуске основного приложения она не прерывается.

Я также вижу, что, когда я исполняю gradle build, META-INF создается в сборки/классов/основной, но не создается в сборки/классов/тестирования. \

Может кто-то помочь мне с этим исключением?

+0

'src/test/resource' без' s' в конце? – chrylis

+0

@chrylis: это была опечатка. Исправлена. – riship89

ответ

0

Чтобы очистить воздух от @ConfigurationProperties в сочетании с @Configuration, потребуются сеттеры и геттеры в вашем компоненте, добавьте их, и эта ошибка пойдет.

Или же использовать @value аннотацию меньшего кода шума, как:

@Configuration 
public class ResponsysConfig { 

    @NotNull 
    @Value("${responsys.username}") 
    private String username; 

... 


} 

Вот еще некоторые ссылки, просто для информации:

https://stackoverflow.com/questions/33795586/spring-boot-how-to-get-key-value-on-application-properties/33795916#33795916

http://www.javacodegeeks.com/2014/09/using-configurationproperties-in-spring-boot.html

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

+0

У меня есть сеттеры и геттеры в моем классе. И я не хочу использовать аннотацию «@» Value, так как весенняя загрузка поддерживает «@» ConfigurationProperties – riship89

Смежные вопросы