hiberna-validator 首次调用性能优化

 

spring集成hibernate-validator后,使用校验器第一次进行校验时,由于需要初始化导致第一次调用耗时过长,rpc中校验很可能导致调用超时,所以下面使用启动时初始化来解决

spring集成hibernate-validator配置:

 <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="providerClass"  value="org.hibernate.validator.HibernateValidator"/>
        <!--不设置则默认为classpath下的 ValidationMessages.properties-->
        <!--<property name="validationMessageSource" ref="validatemessageSource"/>-->
    </bean>

 

扫描路径下的class ,启动时执行初始化方法

  /**
     * jsr-349校验器
     */
    @Autowired
    private LocalValidatorFactoryBean localValidatorFactoryBean;



/**
     * valid预加载
     */
    @PostConstruct
    public void valideBoost(){
        scanFrom("需要扫描的包名");
        scanFrom("com.xxx.order.trade.export.req");

    }

    /**
     * 启动加速!!!
     * @param basePackage
     */
    private void scanFrom(String basePackage){
        int count=0;
        ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
        final String resourcePattern = "/**/*.class";
        String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + ClassUtils.convertClassNameToResourcePath(basePackage)
                + resourcePattern;
        try {
            Resource[] resources = resourcePatternResolver.getResources(pattern);
            MetadataReaderFactory readerFactory = new CachingMetadataReaderFactory(resourcePatternResolver);
            for (Resource resource : resources) {
                if (resource.isReadable()) {
                    MetadataReader reader = readerFactory.getMetadataReader(resource);
                    //扫描到的class
                    String className = reader.getClassMetadata().getClassName();
                    Class<?> clazz = Class.forName(className);
                    localValidatorFactoryBean.getConstraintsForClass(clazz);
                    count++;
                }
            }
        } catch (Exception e) {
            log.error("扫描包异常basePackage:{},e:{}",basePackage,e);
        }
        log.info("validator预加载:package:{},总数:{}",basePackage,count);
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值