发布Scala构件至Maven中央库

背景

本文接上文发布构件至Maven中央库, 详细讲解SBT如何发构件至本地, 如何发布构件至Maven中央库.

样例项目

该项目的项目目录结构, build.sbt相关配置符合发布要求, 且已发布成功, 并会进行不定期更新, 首次发布的同学可参考对比.

阅读全文 »

Java日期详解

背景

在 Java 8 之前,我们最常见的时间与日期处理相关的类就是 Date、Calendar 以及 SimpleDateFormatter 等等。不过 java.util.Date 也是被诟病已久,它包含了日期、时间、毫秒数等众多繁杂的信息,其内部利用午夜 12 点来区分日期,利用 1970-01-01 来计算时间;并且其月份从 0 开始计数,而且用于获得年、月、日等信息的接口也是太不直观。除此之外,java.util.DateSimpleDateFormatter 都不是类型安全的,而 JSR-310 中的 LocalDateLocalTime 等则是不变类型,更加适合于并发编程。JSR 310 实际上有两个日期概念。第一个是 Instant,它大致对应于 java.util.Date 类,因为它代表了一个确定的时间点,即相对于标准 Java 纪元(1970年1月1日)的偏移量;但与 java.util.Date 类不同的是其精确到了纳秒级别。另一个则是 LocalDate、LocalTime 以及 LocalDateTime 这样代表了一般时区概念、易于理解的对象。

Java8中, java.time包下包含下面几个主要的类:

1
2
3
4
5
6
7
8
9
Instant:时间戳
Duration:持续时间,时间差
LocalDate:只包含日期,比如:2016-10-20
LocalTime:只包含时间,比如:23:12:10
LocalDateTime:包含日期和时间,比如:2016-10-20 23:14:21
Period:时间段
ZoneOffset:时区偏移量,比如:+8:00
ZonedDateTime:带时区的时间
Clock:时钟,比如获取目前美国纽约的时间
阅读全文 »

HTTP协议状态码

背景

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

HTTP状态码的英文为HTTP Status Code。

1xx 信息/临时响应

表示临时响应并需要请求者继续执行操作的状态代码。

这一类型的状态码,代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于 HTTP/1.0 协议中没有定义任何 1xx 状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送 1xx 响应。

阅读全文 »

MySql问题集锦

背景

以前mysql的相关问题较散, 自此以后小问题均聚合到该文进行记录.

问题

5.7.5后, group by报错问题

问题描述

升级mysql后, 之前的sql语句报错, 报错信息如下:

阅读全文 »

Scala调用Matlab(MCR)进行数据拟合并获取结果

背景

硬件设备产生大量传感数据, 需要根据这些原始数据拟合出人能看懂并应用于生活的数据; 公司一直使用Matlab进行数据分析, 本文将介绍如何搭建环境, 并在Akka中调用相关库进行分析.

安装 Matlab

Matlab 编写的文件后缀为m(如: filterF.m), 但可以使用Matlab将其打包生成jar包, 提供给Java生态进行调用.

导出过程很简单, 命令行键入 deploytool → Library Compiler → Java Package → 选择m文件(可以多个) → 填写jar名称, 类名 → Package

如下几点需要特别关注下:

阅读全文 »

开源微信支付SDK-两行代码解决支付

背景

让使用微信支付的朋友最快速度接入微信支付.

核心

两行代码解决微信支付提供的各种服务, 开箱即用, 可扩展性超强(只需根据服务的上下行协议定义协议类后, 放入工厂即可获取调用结果).

最新发布

1
2
3
4
5
<dependency>
<groupId>net.arccode</groupId>
<artifactId>wechat-pay-sdk</artifactId>
<version>1.0.0</version>
</dependency>

架构图

阅读全文 »

FastDFS的Storage Server状态详解

状态列表

1
2
3
4
5
6
7
FDFS_STORAGE_STATUS:INIT      :初始化,尚未得到同步已有数据的源服务器
FDFS_STORAGE_STATUS:WAIT_SYNC :等待同步,已得到同步已有数据的源服务器
FDFS_STORAGE_STATUS:SYNCING :同步中
FDFS_STORAGE_STATUS:DELETED :已删除,该服务器从本组中
FDFS_STORAGE_STATUS:OFFLINE :离线
FDFS_STORAGE_STATUS:ONLINE :在线,尚不能提供服务
FDFS_STORAGE_STATUS:ACTIVE :在线,可以提供服务

查看状态

fdfs_monitor /etc/fdfs/client.conf

问题

无法上传文件, 查看Storage server状态如下:

阅读全文 »

Scala的正确打开姿势--搭建开发环境

背景

工欲善其事, 必先利其器; 笔者习惯将所有用到的东西掌控在自己可控的范围内, 清晰每个流程, 以便发生问题的时候有思路并能快速响应得出解决方案.

比如默认安装的scala和SBT, 执行sbt指令时, 默认会在用户目录下生成.ivy文件, 该文件夹中存储从远程仓库中下载的构件; 笔者不喜欢该方式, 需要控制配置,启动参数和相关仓库地址.

安装

前提条件: 必须安装JDK, 若scala>=2.12.0, 则JDK>=1.8

  • scala 开发包: scala语言的开发包, 类比于JDK
  • SBT: 全称simple build tool, 对于初次接触的同学来说, 其实并不简单; 一种构建工具, 类比于Maven
阅读全文 »

搭建FastDFS集群-二

背景

上一篇 搭建FastDFS集群-一 描述了如何从源码构建FastDFS服务, 并通过脚本进行文件的 上传/下载/删除; 本文将详细描述如何安装nginx扩展模块,并使用http协议下载文件; 同时使用Java Client方式执行文件的 上传/下载/删除/获取文件详情等.

FastDFS 架构

阅读全文 »

搭建FastDFS集群-一

背景

  1. 公司的业务分布部署于不同的物理机器上
  2. 采用nginx做负载均衡将请求转发到合适的机器上
  3. 面对文件上传(例如: 图片, 视频等), 之前的同事使用rsync指令同步各物理机间的文件

rsync存在的缺陷

  1. 同步周期问题: 设置太短, 消耗服务器资源; 设置太长, 用户上传文件后, 有可能不能很快获取到该文件(比如文件上传到了A服务器, 取文件的时候, nginx将该请求转发到B服务器; 而此时, rsync还在循环间隔中)
  2. 高可用问题: 该指令无法做到高可用

我司目前仅仅存储一些小文件, 经过调研, 选择简单实用的FastDFS.

搭建集群

VMware克隆多台实例构建分布式系统的方案制作三台虚拟机M_21(192.168.10.201), M_22(192.168.10.202), M_23(192.168.10.203).

最佳实践: 建议首先将M_21进行配置, 之后使用VMware的克隆功能复制出剩余的两台; 然后对相关配置文件修改IPPort.

阅读全文 »