创建线程最好不要用executors去创建,而使用ThreadPoolExecutors创建,executors返回的线程池创建线程数和最大队列是int的最大值,可能会堆积大量的请求和线程导致oom
public class Demo01 { public static void main(String[] args) { ExecutorService threadPool = Executors.newSingleThreadExecutor();// 单个线程 // ExecutorService threadPool = Executors.newFixedThreadPool(5); // 创建一个固定的线程池的大小 // ExecutorService threadPool = Executors.newCachedThreadPool(); // 可伸缩的,遇强则强,遇弱则弱 try { for (int i = 0; i < 100; i++) { // 使用了线程池之后,使用线程池来创建线程 threadPool.execute(() -> { System.out.println(Thread.currentThread().getName() + " ok"); }); } } catch (Exception e) { e.printStackTrace(); } finally { // 线程池用完,程序结束,关闭线程池 threadPool.shutdown(); } } }
比如现在我要升序排列,返回最后一条数据 如果是mysql的话就可以这样写
select t.* from emr_mrhp.mrhp_log_message t where t.app_no='MRHP_HOME' and t.inp_visit_id='R10005901' order by t.create_date desc limit 1;
在oracle可以先查出排好序的列表,当成一个新表,再通过rownum来限制,如
select * from (select t.* from emr_mrhp.mrhp_log_message t where t.app_no='MRHP_HOME' and t.inp_visit_id='R10005901' order by t.create_date desc) where rownum=1;
这样就实现同样的效果
先上代码
public static boolean isEmpty(@Nullable Object obj) { if (obj == null) { return true; } else if (obj instanceof Optional) { return !((Optional)obj).isPresent(); } else if (obj instanceof CharSequence) { return ((CharSequence)obj).length() == 0; } else if (obj.getClass().isArray()) { return Array.getLength(obj) == 0; } else if (obj instanceof Collection) { return ((Collection)obj).isEmpty(); } else { return obj instanceof Map ? ((Map)obj).isEmpty() : false; } }
首先允许为空 第二步,然后判断是否为空optional ,这个类可以作为null的容器,调用isPresent判断是否为空 第三步,判断是否为字符序列,如果为字符序列则判断长度是否大于零 第四步通过反射判断是否为array,如果是array则判断长度大于零 第五步判断是否为collection类,如果是则调用collection判断为空方法 第六步判断是否为map类 ,为map类则调用为空方法
对map、list、对象为空判断较好,但是字符串就比较差了,空字符串是不算null的, 可以采用StringUils工具类来判断
平时项目中,难免需要对参数 进行一些参数正确性的校验,这些校验出现在业务代码中,让我们的业务代码显得臃肿,而且,频繁的编写这类参数校验代码很无聊。鉴于此,觉得 Hibernate Validator 框架刚好解决了这些问题,可以很优雅的方式实现参数的校验,让业务代码 和 校验逻辑 分开,不再编写重复的校验逻辑。 Hibernate Validator 是 Bean Validation 的参考实现 . Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。 Bean Validation 为 JavaBean 验证定义了相应的元数据模型和API。缺省的元数据是 Java Annotations,通过使用 XML 可以对原有的元数据信息进行覆盖和扩展。Bean Validation 是一个运行时的数据验证框架,在验证之后验证的错误信息会被马上返回。
验证逻辑与业务逻辑之间进行了分离,降低了程序耦合度; 统一且规范的验证方式,无需你再次编写重复的验证代码; 你将更专注于你的业务,将这些繁琐的事情统统丢在一边。
项目中,主要用于接口api 的入参校验和 封装工具类 在代码中校验两种使用方式。
3.1 引入jar包
xml<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.9.Final</version>
</dependency>
如图:
修改前
修改后