JSR-303提供了一些注解,将其放到属性上,可以限制这些属性的值。
参考:Spring MVC学习笔记——JSR303介绍及最佳实践
校验放在DTO层上,不要和数据库交互的model层混用
关于model,VO等的区别,参考:Spring MVC学习笔记——POJO和DispatcherServlet
如何赋值,参考:优雅的使用BeanUtils对List集合的操作
DTO和DO的转换,可以使用BeanUtils
,参考:设计之道-controller层的设计
也可以使用ModelMapper,参考:Spring Boot DTO示例:实体到DTO的转换
如果使用的springboot版本大于2.3.x,需要额外引用依赖
1 | <dependency> |
定义dto层或者vo层,添加 @NotEmpty注解 和 @Size注解,并设置分组校验,即在Post请求或者Put请求的时候进行校验
1 | import com.example.demo.core.valid.Post; |
定义Post分组接口
1 | package com.example.demo.core.valid; |
定义Put分组接口
1 | package com.example.demo.core.valid; |
设置全局异常处理
1 | @ResponseStatus(HttpStatus.BAD_REQUEST) |
controller层
1 | @ApiImplicitParams({ |
如果参数验证错误,则接口返回结果如下
进程是程序的一次动态执行过程,它经历了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到最终消亡的过程。
多进程操作系统能同时运行多个进程(程序),由于CPU具备分时机制,所以每个进程都能循环获得自己的CPU时间片。
多线程是指一个进程在执行过程中可以产生多个线程,这些线程可以同时存在、同时运行,一个进程可能包含了多个同时执行的线程。
比如JVM就是一个操作系统,每当使用java命令执行一个类时,实际上都会启动一个jvm,每一个JVM实际上就是在操作系统中启动一个进程,java本身具备了垃圾回收机制,所以每个java运行时至少会启动两个线程,一个main线程,另外一个是垃圾回收机制。
在Java中要想实现多线程代码有两种手段,一种是继承Thread类,另一种就是实现Runnable接口。
1 | class MyThread extends Thread{ |
输出的结果可能是A线程和B线程交替进行,哪一个线程对象抢到了CPU资源,哪个线程就可以运行,在线程启动时虽然调用的是start()方法,但是实际上调用的却是run()方法的主体
如果一个类通过Thread类来实现,那么只能调用一次start()方法,如果调用多次,则将会抛出”IllegalThreadStateException”异常。
keepalive原理可以参考:Ubuntu安装keepalived
1 | sudo apt-get install keepalived |
Hive支持使用avro serde作为序列化的方式,参考:
1 | https://cwiki.apache.org/confluence/display/hive/avroserde |
以及CDH官方的文档
1 | https://docs.cloudera.com/documentation/enterprise/6/6.3/topics/cdh_ig_avro_usage.html |
1.定义avro schema,kst.avsc
1 | { |
将schema文件其放到HDFS上
1 | hadoop fs -ls /user/hive/schema |
2.建Hive表
1 | CREATE TABLE default.kst |
或者直接在TBLPROPERTIES中指定schema
1 | CREATE TABLE default.kst |
3.查看Hive表的schema
1 | describe kst; |
工厂模式的核心思想就是把创建对象和使用对象解藕,由工厂负责对象的创建,而用户只能通过接口来使用对象,这样就可以灵活应对变化的业务需求,方便代码管理、避免代码重复。
程序在接口和子类之间加入一个过渡类,通过此过渡类端取得接口的实例化对象,一般都会称这个过渡端为工厂类
1 | interface Fruit{ |
为了能不修改工厂方法
1 | interface Fruit{ |