陈志军

物来顺应,未来不迎,当时不杂,既过不恋


  • 首页

  • 分类

  • 归档

  • 标签

  • 搜索

使用Apache POI操作生成Execl

发表于 2017-12-11 | 分类于 Java | 阅读次数

使用Apache POI操作生成Execl

使用Java操作数据生成Excel表格,在网上能搜到的方式有很多,比如jxl,还有今天用到POI。POI是Apache开源的一个项目,该工具使用简单,方便。

准备与一些概念约定

需要在poi官网下载相应的jar包,或者使用maven来引入包。在开始之前我们需要知道一些关于excel文档的概念。一个excel文件通常称为[workbook],excel里面的一个工作页面通常叫做[sheet],sheet里面的格子称为[单元格cell],单元格由坐标确定唯一位置,相应为[行row],[列col]。

2017-12-11-15-41-40

了解这些我们可以开始看看poi的一些类和接口。

阅读全文 »

ElasticSearch 简介与使用

发表于 2017-12-03 | 分类于 Elasticsearch | 阅读次数

ElasticSearch 简介与使用

Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎。Elastic 的底层用的是 Lucene。如果你想用 Lucene的话必须自己去写接口,而Elastic将这些进行了一层封装,并且提供restful接口,让使用者达到开箱即用。

基本概念

Node 与 Cluster

Elastic 实际上是一个分布式数据库,它可以存储数据,能够让多台服务器协同工作,每个服务器可以运行多个Elastic服务。每一个Elastic服务实例都可以称作一个节点(Node),一组节点就构成了集群(Cluster)。

Index,Type,Document

Elastic中通过索引(Index),类型(Type),文档(Document)三个值来定义了Elastic中存储的数据结构。索引相当于我们在数据库中的库名字,类型相当于表,文档就是实际存储的数据内容。比如一堆书,这个就是“书”索引(Index),按照“武侠”,“技术”等进行分类(Type),每一本书就是实际上存储的数据(Document)。在Elastic中多个文档组成了一个索引,而文档可以通过分类来方便查询。这里的Type实际上是逻辑上的分组。

ES的增删改

ES的增删改查遵循restful的风格,所以在使用在非常方便:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

// 增加
POST localhost:9200/accounts/person/1
{
"name":"Jack",
"lastname":"Mic",
"description":"A very handsome man"
}


//删除数据

DELETE localhost:9200/accounts/person/1

POST accounts/persion/1/_update
{
"doc":{
"description":"this is change description"
}
}

ES的查询

为什么要单独讲讲查询?ElasticSearch,从名字中就可以直接看出,search占据了elastic的很大一部分。很多时候我们使用ES也是主要因为它方便的查询功能,在ES中查询的方式有以下几种:

  1. 不带条件返回所有索引下的所有文档:
1
2
3
GET localhost:9200/_search?pretty // pretty是将返回的json进行格式化
GET /_search?size=5 // size 是记录条数
GET /_search?size=5&from=5 // from是只从哪页开始,类似SQL分页查询
  1. 根据索引,类型,文档id获取到唯一值:
1
GET localhost:9200/accounts/person/1
  1. 不带body的查询,轻量搜索
1
2
3
4
5
// 返回所有文档中有‘jack’的数据
GET localhost:9200/accounts/person/_search?q=Jack

// 返回所有类型中为tweet的tweet字段带有‘elasticsearch’的数据
GET /_all/tweet/_search?q=tweet:elasticsearch
  1. 带body的条件查询:Query DSL
1
2
3
4
5
6
7
8
9
10
11
12

GET localhost:9200/accounts/person/_search
{
"query":{
"term":{
"name":{
"value":"Jack"
}
}
}
}

官方文档提供了一些实例:查询表达式

ElasticSearch 安装 (单机单节点/伪集群)

发表于 2017-12-01 | 分类于 Elasticsearch | 阅读次数

ElasticSearch 安装 (单机单节点/单机多节点)

ElasticSearch 简介

ElasticSearch(ES) 现在已经随着技术发展越来越火爆了。它基于Lucence搜索引擎,实现RestFul风格,开箱即用。广泛用于在网站上做站内搜索。

下载

这个忒简单了,会上网的人应该都会。

安装

ES 下载解压后,配置文件主要在config目录下,
包含文件:elasticsearch.yml,jvm.options,log4j2.properties。
这三个文件分别对应ES配置,JVM配置,ES日志配置。我们这里只讨论elasticsearch.yml的配置,其他的暂时不论。

单机单节点

单机单节点最爽了,为啥?因为简单啊。进入到解压后文件夹的bin目录,然后window平台双击elasticsearch.bat,*nix平台使用sh elasticsearch,之后再在控制台中看到如下,有个started:

2017-12-01-15-42-20

因为我们什么配置都没改,所以ES使用默认配置,http端口为9200,TCP端口为9300。
这个时候我们访问下接口:curl -XGET localhost:9200,或者浏览器打开localhsot:9200,就会看到下面的输出:
2017-12-01-15-48-31

单机很简单,真的很简单。

阅读全文 »

Java8中的日期时间

发表于 2017-11-29 | 分类于 Java | 阅读次数

Java8中的日期时间

最近尝鲜,之前了解过Java8的新日期API,但是一直没有真正的去尝试使用,这次有一个新的项目而且不是特别重要,所以就开始了自己的一次尝试。

简介

新的日期API是位于java.time.*包下。大致用到的类如下:

2017-11-29-23-29-34

1
2
3
4
5
6
7
ZoneId: 时区ID,用来确定Instant和LocalDateTime互相转换的规则
Instant: 用来表示时间线上的一个点
LocalDate: 表示没有时区的日期, LocalDate是不可变并且线程安全的
LocalTime: 表示没有时区的时间, LocalTime是不可变并且线程安全的
LocalDateTime: 表示没有时区的日期时间, LocalDateTime是不可变并且线程安全的
Clock: 用于访问当前时刻、日期、时间,用到时区
Duration: 用秒和纳秒表示时间的数量

其中跟日期和时间相关的类为:LocalDate,LocalDateTime,LocalTime;
根据他们的名字也可以看出来LocalDate主要针对日期操作,
LocalDateTime主要针对日期+时间进行操作,
LocalTime主要为针对时间进行操作。
其实对于西方来说,有Date和Time区分的,分为日期类型和时钟类型。

另外跟日期和时间相关的就是时区了:TimeZone,ZoneId;8中内置了很多时区,可以根据需要选择。

另外一个就是Instant,这个指的时间线上的一个点,比如你看成坐标轴的横坐标。

阅读全文 »

Docker swarm 入门

发表于 2017-11-29 | 分类于 Docker | 阅读次数

Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。

1. Swarm 认识

Swarm 是目前 Docker 官方唯一指定(绑定)的集群管理工具。Docker 1.12 内嵌了 swarm mode 集群管理模式。

为了方便演示跨主机网络,我们需要用到一个工具——Docker Machine,这个工具与 Docker Compose、Docker Swarm 并称 Docker 三剑客,下面我们来看看如何安装 Docker Machine:

阅读全文 »

MySQL 存储过程

发表于 2017-11-21 | 分类于 Database | 阅读次数

MySQL 存储过程

MySQL存储过程是一个存储在MySQL数据库中的一段SQL代码,类似于我们平常在程序语言中的一个自定义函数。其实说到底,SQL也是一种语言,它也可以定义函数,定时器等等。只不过它是直接操作的数据库中的数据。

平常能用到存储过程的机会不多,以前在支付公司的时候更别说直接操作存储过程了,这根本不可能。任何需要做的处理逻辑都需要在代码中处理,所以这次接到写存储过程的任务,我还是有点忐忑的,一个是自己根本不会。O(∩_∩)O哈!完成的时间还比较紧。不过有挑战就有机遇,这个是没有错的。

阅读全文 »

Java 8 函数式编程-前言

发表于 2017-11-21 | 分类于 Java | 阅读次数

Java 8 函数式编程-前言

从 Java 8 发布到现在已经过去很久了,现在 Java 9 也都已经发布了。国人的习惯总是你发布 8 的时候,我用 7 。你发布 9 的时候,我想 Java 8 应该是普及的时候了。那么正当时,还不来普及下 Java 8 的一个大特性,那就有点说不过去了。



引言 - 什么是函数式编程

函数式编程(Funtional Programming,以下简称 fp ),我想从 Java 8 发布之后大家对这个名词都不陌生,它有很多好处,减少代码,增加可读性等等。但是什么是函数式编程了?它和我们普通的 OOP 又有什么不同?

先来看一份常规打招呼的代码,在 Java7 之前我们大多是这么玩的:

阅读全文 »

Spring Boot 应用可视化监控

发表于 2017-11-02 | 分类于 Java | 阅读次数

Spring Boot 应用可视化监控

使用spring-actuator 并且使用prometheus, grafana 做可视化视图展示

总体过程图:

2017-11-02-17-21-51

监控

SpringBoot 应用监控

SpringBoot 其实也整合了 ops 的功能,也就是运维的部分能力。通过引入包spring-boot-starter-actuator来监控相关的指标信息,详情文档:Actuator 介绍。另外在新版本的actuator中已经有了加密信息,所以对于一些信息的获取可能需要授权,因此我们还需要引入spring-security,pom 文件如下:

阅读全文 »

参数-异常统一打印

发表于 2017-11-02 | 分类于 Java | 阅读次数

先说明我们业务开发基础框架使用的是 SpringBoot

简述

在项目开发中总是需要知道一些常用信息打印,比如出现异常了你可能需要打印日志,为了便于分析,你可能也需要打印埋点数据,或者请求参数之类的。

这类操作可能在任何地方都有,如果分别取处理,感觉上不是特别合适。需要写大量代码并且维护量大。我的做法就是使用@Aspect,@ControllerAdvice利用切面来做统一的参数和异常处理。

阅读全文 »

异常堆栈信息打印

发表于 2017-11-02 | 分类于 Java | 阅读次数

异常堆栈信息打印

最近在开发积分和优惠券,忙的焦头烂额,基本上每天都在想着代码怎么写,功能怎么实现。整个架构是怎样。没有产品经理来梳理需求,基本上靠自己写。唉~ 。比较痛苦的是,我开发完功能,然后交互自己又给我随意乱加功能,导致我有些代码的重写,当然直接接口的封装而已,但是这种感觉很不爽,我都开发完了,你也不知会我一下,就乱来。

阅读全文 »
1…121314…18

180 日志
41 分类
70 标签
RSS
GitHub GitEE
推荐阅读
  • 陈志军的个人站
© 2017 - 2023 陈志军
由 Hexo 强力驱动
主题 - NexT.Muse