Hutool

Java设计模式学习之工厂模式

你离开我真会死。 提交于 2020-03-06 10:20:15
在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之所以叫做工厂模式,是用工厂生产产品来形象的比喻代码中生产对象的过程。总体来说,工厂模式分为以下几种: 简单工厂模式(Simple Factory Pattern) 工厂方法模式(Factory Method Pattern) 抽象工厂模式(Abstract Factory Pattern) 简单工厂模式(Simple Factory Pattern) 我们模拟一种场景,有一家汽车厂(AutoFactory)要生产汽车,现在主要生产小轿车(Car)和大巴车(Bus),那用代码模拟如下: 首先“设计”一个汽车原型(定义汽车接口),这个接口体现了所有汽车的共性: public interface Auto { //所有汽车都可以被驾驶 public void drive(); } 接下来我们“设计”两种汽车:小轿车和大巴车: //小轿车 public class Car implements Auto{ @Override public void drive(){ System.out.println(“小轿车启动了”); } } //大巴车 public class Bus implements Auto{

【并发那些事】线程有序化神器CompletionService

安稳与你 提交于 2020-02-27 02:55:12
<a name="C2O7X"></a> 前言 话说有一天,产品经理突然找到正在摸鱼的你。<br> <br>产品:『我们要加一个聚合搜索功能,当用户在我们网站查询一件商品时,我们分别从 A、B、C 三个网站上查询这个信息,然后再把得到的结果返回给用户』<br> <br>你:『哦,就是写个爬虫,从 3 个网站上抓取数据是吧?』<br> <br>产品:『呸,爬虫是犯法的,这叫数据分析,怎么样,能实现吧?』<br> <br>你:『可以』<br> <br>产品:『好的,明天上线』<br> <br>你:『。。。』<br> <a name="OIfSG"></a> Code 1.0 你很快完成了开发,代码如下:<br> /* * * * * * * * blog.coder4j.cn * * * Copyright (C) B0A6-B0B0 All Rights Reserved. * * * */ package cn.coder4j.study.example.thread; import cn.hutool.core.thread.ThreadUtil; import com.google.common.collect.Lists; import java.util.List; /** * @author buhao * @version TestCompletionService

Java 如何获取 jar 包外的资源

北城以北 提交于 2020-02-26 06:31:44
在使用 jar 执行 java 代码时,有一个需求是从 jar 包所在目录的同级目录下读取配置文件的需求,从网上找了很多方法感觉都挺复杂的,在这里总结一下. >以 classpath 开头的 URL 表示该文件为 jar 包内文件的路径. 如: classpath://config/app.config 表示 jar 包根路径config文件夹下的app.config文件 以 file 开头的 URL 表示该文件为 jar 包外文件的路径 如: file://./config/app.config 表示 摘要 // 当前我想从jar包的同级目录下读取一个名为 'config.txt'的文件的话,我需要指定目录为. File file = new File(".","config.txt") 说明 File file = new File("config.txt") 当只包含文件名称时,java程序会默认尝试从jar包的根路径去读取文件,当尝试使用 file.getCanonicalPath() 方法读取时,便会得到该文件在jar包内的路径. 示例 我当前的工程的路径为 D:\WorkSpace\path_demo01\ 在工程执行以下java代码: 当指定 parent 时: 会从 parent 下查找 path 资源. log(FileUtil.file(".", "

Java util工具类

让人想犯罪 __ 提交于 2020-01-07 01:56:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 推荐一个工具包 hutool,里面包含基本上常用的工具类(字符串判断,日期的转换,集合处理,流处理,http请求,Excel处理 等等),很实用。 参考文档地址: https://hutool.cn/docs/#/ <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.1.0</version> </dependency> 来源: oschina 链接: https://my.oschina.net/u/3445245/blog/3152617

Hutool之正则表达式工具类——ReUtil

一笑奈何 提交于 2019-12-28 14:43:59
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 在文本处理中,正则表达式几乎是全能的,但是Java的正则表达式有时候处理一些事情还是有些繁琐,所以我封装了部分常用功能。就比如说我要匹配一段文本中的某些部分,我们需要这样做: <!-- lang: java --> Pattern pattern = Pattern.compile(regex, Pattern.DOTALL); Matcher matcher = pattern.matcher(content); if (matcher.find()) { String result= matcher.group(); } 其中牵涉到多个对象,想用的时候真心记不住。好吧,既然功能如此常用,我就封装一下: <!-- lang: java --> /** * 获得匹配的字符串 * * [@param](https://my.oschina.net/u/2303379) pattern 编译后的正则模式 * [@param](https://my.oschina.net/u/2303379) content 被匹配的内容 * [@param](https://my.oschina.net/u/2303379) groupIndex 匹配正则的分组序号 * [@return](https://my

Hutool中那些常用的工具类和方法

吃可爱长大的小学妹 提交于 2019-12-28 14:40:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 安装 maven项目在pom.xml添加以下依赖即可: <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.6.3</version> </dependency> 常用工具类 Convert 类型转换工具类,用于各种类型数据的转换。 //转换为字符串 int a = 1; String aStr = Convert.toStr(a); //转换为指定类型数组 String[] b = {"1", "2", "3", "4"}; Integer[] bArr = Convert.toIntArray(b); //转换为日期对象 String dateStr = "2017-05-06"; Date date = Convert.toDate(dateStr); //转换为列表 String[] strArr = {"a", "b", "c", "d"}; List<String> strList = Convert.toList(String.class, strArr); DateUtil 日期时间工具类,定义了一些常用的日期时间操作方法。 //Date、long

(推荐使用)提高开发效率工具集合

老子叫甜甜 提交于 2019-12-14 16:27:42
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 提高开发效率工具集合(推荐使用) 一、Hutool工具类 官网地址:https://www.hutool.cn/ Github地址:https://github.com/looly/hutool/ Gitee 地址:https://gitee.com/loolly/hutool/ 文档参考地址:https://www.hutool.cn/docs/index.html 开源协议许可: MulanPSL 使用方式:引入jar包即可(具体使用参考文档和API) Hutool工具类是一个Java基础工具类,对文件、流、加密解密、转码、正则、线程、XML等JDK方法进行封装,组成各种Util工具类,同时提供以下组件: 1. 布隆过滤 2. 缓存 3. 数据库ORM(基于ActiveRecord思想) 4. HTTP客户端 5. IO 6. JSON 7. 日志 8. System(JVM和系统信息等) 9. Setting(一种扩展Properties的配置文件)等。 关注该项目已经三年多,目前多个公司正在使用中,并且在持续更新中。拿过来直接可以使用,用于解决项目中工具类不全,区分不明确的问题,实现快速开发,专注于业务实现和优化。 二、Lombok 包 官网地址;https://projectlombok.org/

定时任务工具——CronUtil

╄→尐↘猪︶ㄣ 提交于 2019-11-29 21:26:25
牢骚 Java中定时任务使用的最多的我想就是 quartz 了,但是这个框架太过庞大,而且我也不需要用到这么多东西,使用方法也是比较复杂(官方Demo我实在是无语……)。于是我便寻找新的框架代替(不要问我为啥不自己写……)。用过Linux的crontab的人都知道,使用其定时的表达式可以非常灵活的定义定时任务的时间以及频率(Linux的crontab精确到分,而quaeta的精确到秒,不过对我来说精确到分已经够用了,精确到秒的可以使用Timer可以搞定),然后就是crontab的那个迷人的配置文件,可以把定时任务很清晰的罗列出来,这个我也是比较喜欢的。(记得当时Spring整合quartz的时候那XML看的我眼都花了……)。于是我便找到了一个轻量调度框架—— cron4j 封装 为了隐藏这个框架里面的东西,我对其做了封装,所谓封装,就是把任务调度放在一个配置文件里,然后启动即可(与Linux的crontab非常像)。 配置文件 对于Maven项目,首先在 src/main/resources/config 下放入cron4j.setting文件(默认是这个路径的这个文件),然后在文件中放入定时规则,规则如下: #我是注释 [com.company.aaa.job] TestJob = */10 * * * * TestJob2 = */10 * * * * 中括号里面表示包名

SpringBoot-MVC RequestBody中LocalDateTime的自适应配置

夙愿已清 提交于 2019-11-29 19:19:08
请求的json报文中可能会出现 一下几种: ['2019-01-01','2019-01-01 12:03:34','20190101120334'] 但是接收的Request实体类日期字段是LocalDateTime类型 LocalDateTime applyDate; 希望的情况是 : 输入 yyyy-MM-dd HH:mm:ss 、yyyyMMddHHmmss等精确到秒的格式,可以自动被封装LocalDateTime; 输入 yyyy-MM-dd 、yyyyMMdd等精确到日的格式,也可以被封装成LocalDateTime, HHmmss默认为000000; 默认情况下,是没办法 自动转换的,需要在 ObjectMapper中配置,网上主流的配置如下 @Configuration @Slf4j public class MvcConfig implements WebMvcConfigurer { /** * 更改jackson默认配置 * @return */ @Bean @Primary public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder){ //日期和时间格式化 JavaTimeModule javaTimeModule = new JavaTimeModule();

Hutool之单例池——Singleton

二次信任 提交于 2019-11-29 07:23:20
为什么会有这个类 平常我们使用单例不外乎两种方式: 在对象里加个静态方法getInstance()来获取。此方式可以参考 【转】线程安全的单例模式 这篇博客,可分为饿汉和饱汉模式。 通过Spring这类容器统一管理对象,用的时候去对象池中拿。Spring也可以通过配置决定懒汉或者饿汉模式 说实话我更倾向于第二种,但是Spring更对的的注入,而不是拿,于是我想做Singleton这个类,维护一个单例的池,用这个单例对象的时候直接来拿就可以,这里我用的懒汉模式。我只是想把单例的管理方式换一种思路,我希望管理单例的是一个容器工具,而不是一个大大的框架,这样能大大减少单例使用的复杂性。 使用 package com.xiaoleilu.hutool.demo; import com.xiaoleilu.hutool.Singleton; /** * 单例样例 * @author loolly * */ public class SingletonDemo { /** * 动物接口 * @author loolly * */ public static interface Animal{ public void say(); } /** * 狗实现 * @author loolly * */ public static class Dog implements Animal{