你是否还在重复造轮子?分享这3个常用的开源工具库,提高生产效率

获取硬件信息对象HardwareAbstractionLayer :

//系统信息

SystemInfo si = new SystemInfo();

//操作系统信息

OperatingSystem os = si.getOperatingSystem();

//硬件信息

HardwareAbstractionLayer hal = si.getHardware();

有了代表硬件信息的对象HardwareAbstractionLayer 之后,我们就可以获取硬件相关的信息了!

下面简单演示一下获取内存和 CPU 相关信息。

1.获取内存相关信息

//内存相关信息

GlobalMemory memory = hal.getMemory();

//获取内存总容量

String totalMemory = FormatUtil.formatBytes(memory.getTotal());

//获取可用内存的容量

String availableMemory = FormatUtil.formatBytes(memory.getAvailable());

有了内存总容量和内存可用容量,你就可以计算出当前内存的利用率了。

2.获取 CPU 相关信息

//CPU相关信息

CentralProcessor processor = hal.getProcessor();

//获取CPU名字

String processorName = processor.getProcessorIdentifier().getName();

//获取物理CPU数

int physicalPackageCount = processor.getPhysicalPackageCount();

//获取物理核心数

int physicalProcessorCount = processor.getPhysicalProcessorCount();

EasyExcel

=========

介绍

==

Java 解析、生成 Excel 常用的框架有 Apache poi、jxl ,但是这两个框架使用起来都不够优雅,并且非常耗内存严重时会导致内存溢出

怎么解决这个问题呢?

推荐你使用阿里开源的 EasyExcel。正如这个项目官网介绍的那样,这是一款快速、简单避免 OOM 的 java 处理 Excel 工具。

官方是这样介绍 EasyExcel 答:

还在重复造轮子?提高生产效率!3个常用的开源工具库分享

引入依赖

====

Maven

com.alibaba

easyexcel

2.2.6

Gradle

// https://mvnrepository.com/artifact/com.alibaba/easyexcel

compile group: ‘com.alibaba’, name: ‘easyexcel’, version: ‘2.2.6’

功能演示

====

这里直接分享官方提供读取 Excel 的例子(在实际项目中我对这部分做了简单的封装,涉及的地方比较多,就不分享出来了)。

实体对象 (Excel 导入导出实体对象)

@Data

public class DemoData {

private String string;

private Date date;

private Double doubleData;

}

监听器 (自定义 AnalysisEventListener 一次读取 5 条数据存储到数据库)

// 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去

public class DemoDataListener extends AnalysisEventListener {

private static final Logger LOGGER = LoggerFactory.getLogger(DemoDataListener.class);

/**

  • 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收

*/

private static final int BATCH_COUNT = 5;

List list = new ArrayList();

/**

  • 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。 */

private DemoDAO demoDAO;

public DemoDataListener() {

// 这里是demo,所以随便new一个。实际使用如果到了spring,请使用下面的有参构造函数

demoDAO = new DemoDAO();

}

/**

  • 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来 * * @param demoDAO */

public DemoDataListener(DemoDAO demoDAO) {

this.demoDAO = demoDAO;

}

/**

  • 这个每一条数据解析都会来调用 * * @param data * one row value. Is is same as {@link AnalysisContext#readRowHolder()}

  • @param context

*/

@Override

public void invoke(DemoData data, AnalysisContext context) {

LOGGER.info(“解析到一条数据:{}”, JSON.toJSONString(data));

list.add(data);

// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM

if (list.size() >= BATCH_COUNT) {

saveData();

// 存储完成清理 list

list.clear();

}

}

/**

  • 所有数据解析完成了 都会来调用

  • @param context

*/

@Override

public void doAfterAllAnalysed(AnalysisContext context) {

// 这里也要保存数据,确保最后遗留的数据也存储到数据库

saveData();

LOGGER.info(“所有数据解析完成!”);

}

/**

  • 加上存储数据库

*/

private void saveData() {

LOGGER.info(“{}条数据,开始存储数据库!”, list.size());

demoDAO.save(list);

LOGGER.info(“存储数据库成功!”);

}

}

持久层 (mybatis 或者 jpa 来做都行)

/**

  • 假设这个是你的DAO存储。当然还要这个类让spring管理,当然你不用需要存储,也不需要这个类。

**/

public class DemoDAO {

public void save(List list) {

// 如果是mybatis,尽量别直接调用多次insert,自己写一个mapper里面新增一个方法batchInsert,所有数据一次性插入

System.out.println(list);

}

}

读取数据

String fileName = “src/test/resources/demo/demo.xlsx”;

// 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭

EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();

输出结果 (已过滤非必要数据)

Hutool2020-09-16 08:14:33.727 DEBUG [main] com.alibaba.excel.context.AnalysisContextImpl:91 - Began to read:ReadSheetHolder{sheetNo=0, sheetName=‘Sheet1’} com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadSheetHolder@6f3b5d16

2020-09-16 08:14:33.870 INFO [main] com.a 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 libaba.easyexcel.test.demo.read.DemoDataListener:54 - 解析到一条数据:{“date”:1577811661000,“doubleData”:1.0,“string”:“字符串0”}

2020-09-16 08:14:33.870 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:54 - 解析到一条数据:{“date”:1577898061000,“doubleData”:2.0,“string”:“字符串1”}

2020-09-16 08:14:33.871 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:54 - 解析到一条数据:{“date”:1577984461000,“doubleData”:3.0,“string”:“字符串2”}

2020-09-16 08:14:33.871 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:54 - 解析到一条数据:{“date”:1578070861000,“doubleData”:4.0,“string”:“字符串3”}

2020-09-16 08:14:33.872 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:54 - 解析到一条数据:{“date”:1578157261000,“doubleData”:5.0,“string”:“字符串4”}

2020-09-16 08:14:33.872 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:80 - 5条数据,开始存储数据库!

[DemoData(string=字符串0, date=Wed Jan 01 01:01:01 CST 2020, doubleData=1.0), DemoData(string=字符串1, date=Thu Jan 02 01:01:01 CST 2020, doubleData=2.0), DemoData(string=字符串2, date=Fri Jan 03 01:01:01 CST 2020, doubleData=3.0), DemoData(string=字符串3, date=Sat Jan 04 01:01:01 CST 2020, doubleData=4.0), DemoData(string=字符串4, date=Sun Jan 05 01:01:01 CST 2020, doubleData=5.0)]

2020-09-16 08:14:33.874 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:82 - 存储数据库成功!

2020-09-16 08:14:33.875 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:54 - 解析到一条数据:{“date”:1578243661000,“doubleData”:6.0,“string”:“字符串5”}

2020-09-16 08:14:33.875 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:54 - 解析到一条数据:{“date”:1578330061000,“doubleData”:7.0,“string”:“字符串6”}

2020-09-16 08:14:33.876 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:54 - 解析到一条数据:{“date”:1578416461000,“doubleData”:8.0,“string”:“字符串7”}

2020-09-16 08:14:33.876 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:54 - 解析到一条数据:{“date”:1578502861000,“doubleData”:9.0,“string”:“字符串8”}

2020-09-16 08:14:33.876 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:54 - 解析到一条数据:{“date”:1578589261000,“doubleData”:10.0,“string”:“字符串9”}

2020-09-16 08:14:33.877 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:80 - 5条数据,开始存储数据库!

[DemoData(string=字符串5, date=Mon Jan 06 01:01:01 CST 2020, doubleData=6.0), DemoData(string=字符串6, date=Tue Jan 07 01:01:01 CST 2020, doubleData=7.0), DemoData(string=字符串7, date=Wed Jan 08 01:01:01 CST 2020, doubleData=8.0), DemoData(string=字符串8, date=Thu Jan 09 01:01:01 CST 2020, doubleData=9.0), DemoData(string=字符串9, date=Fri Jan 10 01:01:01 CST 2020, doubleData=10.0)]

2020-09-16 08:14:33.877 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:82 - 存储数据库成功!

2020-09-16 08:14:33.877 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:80 - 0条数据,开始存储数据库!

[]2020-09-16 08:14:33.877 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:82 - 存储数据库成功!

2020-09-16 08:14:33.877 INFO [main] com.alibaba.easyexcel.test.demo.read.DemoDataListener:73 - 所有数据解析完成!

Process finished with exit code 0

Hutool

======

还在重复造轮子?提高生产效率!3个常用的开源工具库分享

介绍

==

Hutool 是一个非常实用的 Java 工具类库,对文件、流、加密解密、转码、正则、线程、XML 等 JDK 方法进行了封装。

非常实用的开源工具类库,推荐小伙伴们在自己项目中使用。

官方是这样介绍 Hutool 答:

还在重复造轮子?提高生产效率!3个常用的开源工具库分享

引入依赖

====

Maven

cn.hutool

hutool-all

5.4.2

Gradle

// https://mvnrepository.com/artifact/cn.hutool/hutool-all

compile group: ‘cn.hutool’, name: ‘hutool-all’, version: ‘5.4.2’

功能演示

====

简单演示几个比较实用的功能。

邮件

==

在 Java 中发送邮件主要品依靠 javax.mail 包,但是由于使用比较繁琐,因此 Hutool 针对其做了封装。由于依赖第三方包,因此将此工具类归类到 extra 模块中。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值