2017-12-13 12 views
1

스프링 유효성 검사가 활성화 된 기존 스프링 부트 응용 프로그램에 Spring Cloud Consul을 추가하려고합니다. 나는 응용 프로그램을 실행할 때까지 그것은 모든 좋은, 그리고 그것은 지금까지 내가 그것을 가지고로 @ValidatedMethodValidationPostProcessor가 추가 유효성 검사 실패를 야기합니다.

주석 등록 정보 빈의 검증에 실패, 여기에 일어나는 내용은 다음과 같습니다

  1. MethodValidationPostProcessor은 속성에 대한 프록시를 생성 콩
  2. CustomBeanValidationPostProcessor 차기와 프록시 필드의 유효성을 검사하려고 다음과 같은 실패 :

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'heartbeatProperties' defined in issues.validation.Application: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanInitializationException: Bean state is invalid: ttlUnit - may not be null; ttlValue - must be greater than or equal to 1; intervalRatio - must be greater than or equal to 0.1 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] 
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] 
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] 
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] 
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] 
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] 
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] 
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] 
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] 
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] 
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] 
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] 
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] 
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE] 
        at issues.validation.Application.main(Application.java:25) [classes/:na] 
    Caused by: org.springframework.beans.factory.BeanInitializationException: Bean state is invalid: ttlUnit - may not be null; ttlValue - must be greater than or equal to 1; intervalRatio - must be greater than or equal to 0.1 
        at org.springframework.validation.beanvalidation.BeanValidationPostProcessor.doValidate(BeanValidationPostProcessor.java:116) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] 
        at org.springframework.validation.beanvalidation.BeanValidationPostProcessor.postProcessAfterInitialization(BeanValidationPostProcessor.java:94) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE] 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:423) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1633) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE] 
        ... 15 common frames omitted 
    
,536,913 https://github.com/bashnesnos/cas-spring-cloud-consul-issue

질문 :

  1. 사람이 어떤 주위에 일을 알고 있다면 특정 빈을위한 MethodValidationPostProcessor을 피하기 위해 여기에 63,210

    문제를 재현 최소 프로젝트?

P. 나는 봄에 대한 티켓도 만들었습니다. https://github.com/spring-projects/spring-boot/issues/11249하지만 커뮤니티에서 해결 방법을 요청하는 것이 더 쉽습니다.

답변

1

CustomBeanValidationProcessor는 Ordered를 구현할 수 있습니다. 그런 다음 순서를 변경하여 이전에 호출 할 수 있습니다. 당신이 HIGHEST_PRECEDENCE에 대한 답을 변경하는 경우

public class CustomBeanValidationPostProcessor extends 
    BeanValidationPostProcessor implements Ordered { 

    @Override 
    public int getOrder() { 
     return HIGHEST_PRECEDENCE; // or another value for a proper order position 
    } 
} 
+0

덕분에, 내가 추측 주위가 작품으로 할 것 같아요 (실제로 CustomBeanValidationProcessor를 실행하기 때문에 나중에 문제가 발생합니다). 우연의 일치로 다른 문제가있을 수 있지만 다른 이야기가 될 것입니다.)) – bashnesnos