Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 容器对象的并发bean验证(例如列表)_Java_Bean Validation_Hibernate Validator_Jsr380 - Fatal编程技术网

Java 容器对象的并发bean验证(例如列表)

Java 容器对象的并发bean验证(例如列表),java,bean-validation,hibernate-validator,jsr380,Java,Bean Validation,Hibernate Validator,Jsr380,上下文: 已公开RESTAPI并按顺序处理JSON格式输入请求的微服务。已处理的请求被反序列化、验证并放入Kafka主题以供进一步处理 要验证的类的给定示例: // autogenerated from openapi schema using custom templates public class DataPayload { @NotNull @Size(min=1, max=100) private String description; @Valid @Siz

上下文: 已公开RESTAPI并按顺序处理JSON格式输入请求的微服务。已处理的请求被反序列化、验证并放入Kafka主题以供进一步处理


要验证的类的给定示例:

// autogenerated from openapi schema using custom templates
public class DataPayload {

  @NotNull
  @Size(min=1, max=100)
  private String description;

  @Valid
  @Size(max=1024)
  private List<DataLine> dataLines; 

  // getters, setters, etc.

  public static class DataLine {
    // lots of fields to be validated..
  }
}
有没有人知道验证
列表数据线
如何以最小的努力并行化


到目前为止,我有几个(明显的)选择:

  • 从列表中手动并行运行
    validator.validate(dataLine)
    以及不带数据线的验证数据负载
    validator.validate(withoutdataline(DataPayload))
  • 与第一个选项类似,但在验证组方面有一些技巧
  • (不确定是否可能)。并行运行容器对象验证的自定义
    ConstraintValidator
    开放性问题-如何将嵌套/级联验证委托给默认机制?

  • 尽管选项是可行的,但我想知道是否有更聪明、更优雅的方法来解决这个问题。

    我觉得定制验证器是解决这个问题的方法。但我真的看不出并行验证有什么帮助。1024个项目并不多。我们已经尝试了第一个选项,在我们的情况下,它的工作速度提高了约2.5倍。我们没有进行深入的调查,但可能是因为深度级联。您是否在类似负载下尝试了生产代码中的第一个选项?因为虽然对于单个输入请求,它可能会运行得更快,但它也会使JVM充满线程,这使得并发进程接收到的资源更少。它显示出了预期的更高的吞吐量。我们有一些限制,目前输入REST API请求的处理是顺序的,因此当时只有一个活动请求需要处理。我觉得定制验证器是实现这一点的方法。但我真的看不出并行验证有什么帮助。1024个项目并不多。我们已经尝试了第一个选项,在我们的情况下,它的工作速度提高了约2.5倍。我们没有进行深入的调查,但可能是因为深度级联。您是否在类似负载下尝试了生产代码中的第一个选项?因为虽然对于单个输入请求,它可能会运行得更快,但它也会使JVM充满线程,这使得并发进程接收到的资源更少。它显示出了预期的更高的吞吐量。我们有一些限制,目前输入REST API请求的处理是顺序的,因此此时需要处理单个活动请求。
    public static void main(String[] args) {
      var validator = Validation.buildDefaultValidatorFactory().getValidator();
      var violations = validator.validate(getDataPayload());
    }