Posted in 清文

、北京北京

北京北京

单曲循环汪峰的歌

写下对北京的回忆

几词文,几处景,两友人,一米厂

糖葫芦

大包子

油条

还有第一晚可怕的雾霾

凌晨落地的景色,候机前写了

《试错》

是不是你和我一样

每当夜深安静迷茫

总是想的太多

却每次都被时间浇熄

30岁的眼泪

还是那么不切实际

盼望地

以为爱情能解脱生活的狼狈

所以别要求太多

不错过那些努力可以解决的东西

无法长大

也就不要学着别人挣扎

往想去的地方飞

走过看过听过去试错

然后去了第一处景

北京 798 艺术区

知道了

曹勇(画家)

一位由画而生的旅者

说过

“人的生命很短暂,一定要到绘画的最高舞台去。”

停下买了个糖葫芦,写了

《穿越文艺区》

摄影展

先穿越到照片当时当地

手机没电了

停下步来

随处而安喝一小杯

充会电

再前行

切景至天安门

不想多说 人多

晚上寄宿友人

聊拉家常

约早另一友人

逛米厂中

和现在工作一样呼吸节奏

听说老雷

在对面那个高楼中

眺望

昨夜的大风

刮走了雾霾

漫步人少的颐和园里

止步写了两句

秋离冬至踏园中

高柳随风舞骚影

然后

北京北京

再会

Posted in Working Skills, 技术

Java Web 工作技巧总结 16.10

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!

在你成为领导者以前,成功只同自己的成长有关。
当你成为领导者以后,成功都同别人的成长有关。

1.聊聊并发插入&代码

场景:业务中有些ERP第三方调用该接口,导致多组同样的数据包会调用同一个插入接口。一般都是XXXParamList,一个批量插入的接口。

首先聊聊批量插入的代码,一般都会这样搞,伪代码

for(XXXParam xxx : XXXParamList)
validationXXXParam(xxx);
XXXDao.batchInsert(XXXParamList)

a.前端 – 灰色按钮
就是提交的时候控制,不能重复条form或者ajax。
b.后端 – 分布式锁
分布式锁的资料上次分享过:传送门 ->
http://www.cnblogs.com/PurpleDream/p/5559352.html
c.数据库 – UK
在数据库建表中设计时,设置 SQL UNIQUE 约束:传送门->
http://www.w3school.com.cn/sql/sql_unique.asp

2.继续说说数据库字段设计

技巧1 关系表 -> JSON Text字段
场景:比如商品详情页面,白色Apple,金色Apple…对应的图片显示。这样针对goods寸一条记录,记录着有个字段是 sku_image:
goodsid {[“白色”:“url”],[“金色”:“url”]}

而且Text字段是不对的。应该约定好大小,比如 VARCHAR(1000)
为啥呢?其实每次get都是流量,转换成流量方向想,那就是带宽,大字段如果在高流量高并发的情况下,容易造成查询量太大,会造成网关超过带宽。

有时候登录线上数据库PM后台,忘记了某表的字段,但只知道某表。我是这样干去取代 DESC table_name 或 SHOW CREATE TABLE table_name,SQL 很简单
SELECT * FROM XXX WHERE 1 LIMIT 1;
直接可以看到列名,修改下 WHERE 里面的条件就可以查询你想的查询的。

3.grep 命令

一般日志用过日志中心查询,但是更多情况下,单机下都会跑到服务器上直接找到自己想要的日志相关。
我是这样的,找到某异常XXXException
cat xxx.log grep ‘XXXException’
然后显示该行上下几行内容,使用 -C 参数输出匹配行的前后各4行
cat xxx.log grep ‘XXXException’ -C 4

grep 小命令 详解:传送门
https://linux.cn/article-5453-1.html

4.Maven 骨架工程

来到公司,发现小项目一个接一个地上。说罢就想起前东家的骨架工程。
很简单的就能生成 HelloWorld 项目,XXXarchetype 是我开发的估计工程依赖。生成骨架项目关键代码:
mvn archetype:generate -DgroupId=com.TT -DartifactId=helloworld -DarchetypeGroupId=com.TT -DarchetypeArtifactId=com.TT.XXXarchetype -DarchetypeVersion=0.0.1-SNAPSHOT -DinteractiveMode=false

详细教程,传送门->
http://www.voidcn.com/blog/aosica321/article/p-5764716.html

5.DO BO 互转工具

一般这种都是代码生成器,兼Java配置项。作用于两种业务model的互转:
mapstruct(效率最高)、orika(最快)、dozer(用的多)
详细教程,传送门
http://www.tianshouzhi.com/api/tutorials/mapstruct
http://blog.csdn.net/a258831020/article/details/48247187

如以上文章或链接对你有帮助的话,别忘了在文章结尾处评论哈~ 你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。

Posted in Spring, 技术

带着问题学 Spring MVC 源码: 一、概述

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!

简单就好,生活可以很德国

Q:什么是 Spring MVC ? ※

Spring MVC 是 Spring Web 的一个重要模块。Spring 支持 Web 应用,Spring MVC 是对 MVC 模式的支持。

Q:MVC 模式? ※

MVC 模式是种经典的软件架构,分 Model 模型、View 视图及 Controller 控制器 三种角色。架构的意图明显区分三种角色的职责,使其不相互依赖。Java 领域最经典的实现 JSP + Servlet + JavaBean,后续也陆续出来了众多优秀框架,SSH 中的 Struts ,还有 SSM 中的 Spring MVC 等。mvc%e6%a8%a1%e5%bc%8f

 

Q: Spring 还要什么其他模块? Web?IOC 容器?AOP?※

IOC 容器模块、AOP 模块都是。还有数据访问/集成、Web 等模块都是。这里其他不展开讲,其中 Web 模块建立在 IOC 容器之上,要记住。

来自官网的模块图:spring-overview

Q: Web 模块包含 springmvc 吗? ※

包含。Web 模块包含 spring-web、spring-webmvc、spring-websocket和spring-webmvc-portlet。其中 web-mvc 是我们要学习源码包。

1. spring-web 模块提供基本 Web 集成功能,包括初始化 IOC 容器等工作。

2. spring-webmvc 包含 MVC 模式的实现和 REST Web 服务的实现。该模块基于了 spring-web 模块。

资料来源自:官方文档 MVC 章节,其他模块具体参考官网。

 

Q: spring-webmvc 模块具体包含什么内容? ※

spring-webmvc 模块里面包:

  • org.springframework.web.servlet
    提供与应用程序上下文基础结构集成的 Servlet,以及 Spring web MVC 框架的核心接口和类。
  • org.springframework.web.servlet.mvc
    Spring 附带的 Servlet MVC 框架的标准控制器实现。

    • org.springframework.web.servlet.mvc.annotation
      用于基于注解的 Servlet MVC 控制器的支持包。
    • org.springframework.web.servlet.mvc.condition
      用于根据条件匹配传入请求的公共 MVC 逻辑。
    • org.springframework.web.servlet.mvc.method
      用于处理程序方法处理的基于 Servlet 的基础结构,基于在 org.springframework.web.method 包上。
  • org.springframework.web.servlet.view
    提供标准的 View 和 ViewResolver 实现,包括自定义实现的抽象基类。

    • org.springframework.web.servlet.view.freemarker
      支持将 FreeMarker 集成为 Spring Web 视图技术的类。
    • org.springframework.web.servlet.view.json
      支持提供基于 JSON 序列化的 View 实现的类。

上面列出来核心的包。org.springframework.web.servlet.view 包中, View 视图实现有常见的:JSON 、FreeMarker 等。org.springframework.web.servlet.mvc 包中,Controller 控制层实现包括了注解、程序方法处理等封装。自然,看源码先从 org.springframework.web.servlet 包看其核心的接口和类。

Q: 核心类和接口有哪些? ※

DispatcherServlet 类:调度HTTP请求控制器(或者处理器Handler)。

 

View 视图层

ModelAndView 类:模型和视图的持有者。

View 接口:MVC WEB 交互。该接口的实现负责呈现视图或者暴露模型。

 

Controller 控制层

HandlerMapping 接口: 请求从 DispacherServlet 过来,该接口定义请求和处理程序对象之间的映射。

HandlerInterceptor 接口:处理程序的执行链接口。

Q: 又是 MVC 的样子,还有吗? ※

哦。对了还有张图:

mvc

所以重要的类还有 ViewResolver、HandleAdapter等。

Q: 谢谢,下篇聊什么?

当然聊重要类的源码实现咯~,下篇见。

如以上文章或链接对你有帮助的话,别忘了在文章结尾处评论哈~ 你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。

Posted in 清文

随记 9.26

72e172b3gw1f5tlp60gryj20je0m8ta0“不知道,觉得今天想要记点什么,我就记了。”

下班早早一天:

站在红绿灯人行道 闭嘴

车流 喇叭 

人流 嘴炮

车灯像一道光

人影是一群丧尸

奔走在躁动的城市里

嗑完一包最爱核桃味瓜子,顺便赏完一部励志:Front Of The Class 影评

《Front Of The Class》励志,值得看。
中文名翻译成《叫我第一名》,一位帅哥 Jimmy Wolk 主演主人公。他表现了就是生活中的第一名,表现了做自己的第一名。
电影中,倔强的主人公外壳和工地里的保护帽一样坚固。他是出色的小学老师,孩子的启蒙者,给孩子带来属于他们的教育童年。这时我想起了,我童年常在我妈妈房间的沙发中睡觉,满满回忆里都是妈妈告诉我她的一生故事点滴。就这样,他却患有让他不能像正常老师一样上课的病,但恰恰让孩子们和接受一个人会不由自主打喷嚏一样,接受了他。he did it!
还有那个小女孩,那个小胖男。他在像他初中校长一样,挽救树立了孩子的心灵的方向。这件事情恰恰是他最想完成,最最想做的事情。
没有什么悲情,只有看到他乐观中的欢笑,欢笑中的感动。
Posted in Working Skills, 技术

Java Web 工作技巧总结 16.8

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!

四时不谢之兰,百节长青之竹,万古不败之石,千秋不变之人。


1. AOP – LOG
项目中,一个请求过来,一个响应回去。

1_thumb3.png

经常我们需要记录请求过来的对应的 类,方法名,请求参数和IP等一些信息,还有响应出去的,如果是 JSON 结果集的话。比如现在一般暴露给前端(前后端分离),或者其他模块基本走 Restful 接口。那怎么优雅的去记录这些东西呢?

beta 1.0
@Path("user/get")
public ListResult<User> getUser(@BeanParam GetUserParam getUserParam){
    LOGGER.info(getUserParam.toString());
    ListResult<User> userList = userService.getUserList(getUserParam);
    LOGGER.info(userList.toString());

    return userList;
}
同样,硬编码加入了两句打印的代码,其实这个没这么简单。可能日志需要输出到日志平台,可能获取IP或者请求来源的一些信息。那怎么升级会优雅呢?Annotation + AOP可能不错哦!
realease 1.0
@Path("user/get")
@ApiAdvice
public ListResult<User> getUser(@BeanParam GetUserParam getUserParam){
 ListResult<User> userList = userService.getUserList(getUserParam);

 return userList;
}

ApiAvice 的实现原理是基于 Spring AOP 和 SPring 自定义注解完成。具体这篇文章写得差不多:http://www.xdemo.org/springmvc-aop-annotation/

 

2. 出、入参封装

上一点说到了,请求入参和响应出参。
入参提供一个 BaseParam,包含了 IP ,请求来源机器,机型等各种。PagerParam 继承 BaseParam 类,增加了分页相关的参数。比如,用户的参数 UserGetPagerParam..
出参提供一个 BaseResult,包含返回码,返回信息及请求 IP等。PlainResult 单个结果集,ListResult 列表结果集,MapResult… 
同样,两者需要实现序列化。序列化的可以看看这个文章 http://www.infoq.com/cn/articles/serialization-and-deserialization
 
3. LIMIT
在处理线上问题的时候,有时候会有脏数据要进行处理。自然 DDL 操作,需要通过审批什么的。这里就不说了。主要在 UPDATE 操作的时候,注意 SQL 的写法。防止一条 SQL 误操作了其他正确的数据,加个 LIMIT 限制语句。例如
UPDATE user SET name = "BYSocket" WHERE name = "Jeff" LIMIT 1.

http://database.51cto.com/art/201005/200401.htm


4.Guava EventBus
Guava EventBus 是基于事件处理机制,是设计模式中的生产消费模式的实现。使用的场景:多半在异步的场景上。但是基于 JVM 内存上实现的,通俗的说是单机模式。需要评估好,这个异步是否是非常快速可以处理完毕。具体使用见
http://www.cnblogs.com/peida/p/EventBus.html

5.GC常用分析命令
这个总结来自有次 FullGC 特别多,OOM 的场景。然后是这样操作分析的:
jps -lvm // 查看JVM进程中的状态,并得知 JVM 的具体配置
jstat -gcutil {pid} 1000 // 每秒钟打印 GC 信息,可以看下 full GC,各种区的 实时信息
jmap -F -heap {pid} // 查看内存对象信息
主要是
jmap -dump:format=b,file=dump.bin {pid} // 导出内存对象 dump 文件

然后分析工具很多,这里用IBM HeapAnalyzer 具体使用看: http://blog.csdn.net/alexbxp/article/details/6756411

JVM 相关也看看

如以上文章或链接对你有帮助的话,别忘了在文章结尾处评论哈~ 你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。

Posted in Working Skills, 技术

Java Web dev搭建经验总结

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!

回馈分析法使我看到,我对专业技术人员,不管是工程师、会计师还是市场研究人员,都容易从直觉上去理解他们。这令我大感意外。它还使我看到,我其实与那些涉猎广泛的通才没有什么共鸣。

总结下,新Mac电脑的环境搭建及推荐一些老司机的玩具(软件)

一、玩具篇(软件)

1. Google Chrome / Chrome 插件 -Draw.io Desktop 、Postman、FeHelper、Website IP、Isometric Contributions、Octotree、Momentum

Chrome 的 F12 ,调试神器。

Draw.io 我是用来画图的。Postman 测试 Rest API 接口 。FeHelper一个小工具集合体。三个是经常戳戳点击的。

还有 Website IP 显示 IP。Git Hub 两个小工具:Isometric Contributions 纯好看,Octotree 左侧出现代码目录。Momentum 在空的 Tab 加入了赏心悦目的图片。

2. Evernote/为知笔记

印象笔记我喜欢记录生活,记录IDEA,记录。。。。

为知笔记记录代码,记录技术,记录工作相关的。。。

3. Shadowsocks

代理。提供个代理服务器吧

 

server:45.78.48.253
port:4433

password:NWNmNzQ2ZT

4. SwitchHosts

Host修改。很多类似的。

5. IDEA

Java 吃饭的家伙,不多说。

二、环境

1/ zsh 安装

sh -c"$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

2/ JDK 8 安装

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载jdk-xxx.dmg。

然后设置 JAVA_HOME 环境变量,vim 文件’~/.zshrc’或’~/.bash_profile’,加入下面代码

 

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

export PATH=${JAVA_HOME}/bin:$PATH

java -version 验证下。

3/ Git 安装

https://sourceforge.net/projects/git-osx-installer/下载安装即可。

git –version验证下。

4/ Maven 安装

https://maven.apache.org/download.cgi下载 apache-maven-x.x.x-bin.zip。

设置 Maven 环境变量,和 JDK 环境一样,vim 文件’~/.zshrc’或’~/.bash_profile’,加入下面代码

export M2_HOME={Maven解压目录}/apache-maven-x.x.x

export PATH=$PATH:$M2_HOME/bin

mvn -version 验证下

项目一般都是 maven 项目,启动都基本用 maven 插件集成 jetty 启动。所以不涉及到 tomcat jetty这种安装。

5/ mysql 安装

下载 http://rj.baidu.com/soft/detail/25675.html?ald

# 移动解压后的二进制包到安装目录
sudo mv mysql-5.6.24-osx10.9-x86_64 /usr/local/mysql

# 更改 mysql 安装目录所属用户与用户组
cd /usr/local
sudo chown -R root:wheel mysql

sudo bin/mysqld --initialize --user=mysql

cd /usr/local/mysql

# 启动
sudo support-files/mysql.server start

# 重启
sudo support-files/mysql.server restart

# 停止
sudo support-files/mysql.server stop

# 检查 MySQL 运行状态
sudo support-files/mysql.server status

vim 文件’~/.zshrc’或’~/.bash_profile’,加入下面代码:

# MySQL
export PATH=${PATH}:/usr/local/mysql/bin

如以上文章或链接对你有帮助的话,别忘了在文章结尾处评论哈~ 你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。

 

Posted in Java, 技术

代码片段:基于 JDK 8 time包的时间工具类 TimeUtil

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!

“知识的工作者必须成为自己时间的首席执行官。”

前言

这次泥瓦匠带来的是一个好玩的基于 JDK 8 time包的时间工具类 TimeUtil。本意,用 JDK 8 写个实战的时间工具类,初版泥瓦匠写的很不好,后来雨神分分钟将这个代码优化优化,谢谢雨神。就此分享下这个代码,让更多的人看到~

一、 Java 8 time包

从 Java 1.0 有个 Date 类,想必大家不陌生,后面有了 Calendar 类(被废弃 )。API 确实比较难用,因此 Java 8 引入 java.time API,这次看看是不是很好用。大致引入了这几个对象:

  • Instant – 瞬间类,表示时间线上的一点(与 Date 类似)
  • Duration – 持续时间,表示两个 Instant 之间的时间
  • LocalDateTime – 本地日期时间,表示一个日期和时间。

本小文重点还是在使用 LocalDateTime 及其格式化类 DateTimeFormatter

二、介绍 LocalDateTime & DateTimeFormatter APIs

LocalDateTime 表示一个日期和时间,存储确定时区中的某个时间点。
例如某一次练书法弹琴活动。(ps:泥瓦匠有个小圈子,里面喜欢加入一些文艺的程序员。爱技术,爱生活,爱艺术~ 雨神就爱弹琴,日语思密达*&#@#% )

常用api:

  • now()
    从系统中获取当前时间
  • parse(CharSequence text, DateTimeFormatter formatter)
    从字符串按格式获取 LocalDateTime 实例

DateTimeFormatter 用于格式化时间,提供了公用的方法入口,打印和解析格式化的时间类。

常用api:

  • format(TemporalAccessor temporal)
    按格式格式化时间
  • ofPattern(String pattern)
    按字符串指定的格式,生成时间格式

 

三、TimeUtil 代码详解

泥瓦匠一一道来这个代码的实现。先看代码:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * 基于 JDK 8 time包的时间工具类
 * <p/>
 * Created by bysocket on 16/8/23.
 */
public final class TimeUtil {

    /**
     * 获取默认时间格式: yyyy-MM-dd HH:mm:ss
     */
    private static final DateTimeFormatter DEFAULT_DATETIME_FORMATTER = TimeFormat.LONG_DATE_PATTERN_LINE.formatter;

    private TimeUtil() {
        // no construct function
    }

    /**
     * String 转时间
     *
     * @param timeStr
     * @return
     */
    public static LocalDateTime parseTime(String timeStr) {
        return LocalDateTime.parse(timeStr, DEFAULT_DATETIME_FORMATTER);
    }

    /**
     * String 转时间
     *
     * @param timeStr
     * @param format  时间格式
     * @return
     */
    public static LocalDateTime parseTime(String timeStr, TimeFormat format) {
        return LocalDateTime.parse(timeStr, format.formatter);
    }

    /**
     * 时间转 String
     *
     * @param time
     * @return
     */
    public static String parseTime(LocalDateTime time) {
        return DEFAULT_DATETIME_FORMATTER.format(time);
    }

    /**
     * 时间转 String
     *
     * @param time
     * @param format 时间格式
     * @return
     */
    public static String parseTime(LocalDateTime time, TimeFormat format) {
        return format.formatter.format(time);
    }

    /**
     * 获取当前时间
     *
     * @return
     */
    public static String getCurrentDatetime() {
        return DEFAULT_DATETIME_FORMATTER.format(LocalDateTime.now());
    }

    /**
     * 获取当前时间
     *
     * @param format 时间格式
     * @return
     */
    public static String getCurrentDatetime(TimeFormat format) {
        return format.formatter.format(LocalDateTime.now());
    }

    /**
     * 时间格式
     */
    public enum TimeFormat {

        /**
         * 短时间格式
         */
        SHORT_DATE_PATTERN_LINE("yyyy-MM-dd"),
        SHORT_DATE_PATTERN_SLASH("yyyy/MM/dd"),
        SHORT_DATE_PATTERN_DOUBLE_SLASH("yyyy\\MM\\dd"),
        SHORT_DATE_PATTERN_NONE("yyyyMMdd"),

        /**
         * 长时间格式
         */
        LONG_DATE_PATTERN_LINE("yyyy-MM-dd HH:mm:ss"),
        LONG_DATE_PATTERN_SLASH("yyyy/MM/dd HH:mm:ss"),
        LONG_DATE_PATTERN_DOUBLE_SLASH("yyyy\\MM\\dd HH:mm:ss"),
        LONG_DATE_PATTERN_NONE("yyyyMMdd HH:mm:ss"),

        /**
         * 长时间格式 带毫秒
         */
        LONG_DATE_PATTERN_WITH_MILSEC_LINE("yyyy-MM-dd HH:mm:ss.SSS"),
        LONG_DATE_PATTERN_WITH_MILSEC_SLASH("yyyy/MM/dd HH:mm:ss.SSS"),
        LONG_DATE_PATTERN_WITH_MILSEC_DOUBLE_SLASH("yyyy\\MM\\dd HH:mm:ss.SSS"),
        LONG_DATE_PATTERN_WITH_MILSEC_NONE("yyyyMMdd HH:mm:ss.SSS");

        private transient DateTimeFormatter formatter;

        TimeFormat(String pattern) {
            formatter = DateTimeFormatter.ofPattern(pattern);
        }
    }
}

工具类由 final TimeUtil类 及 其内部枚举类TimeFormat时间格式类 组成。
1/ TimeUtil 具有私有构造函数,表示被保护,无法被外部 new 出实例。

声明了默认的  DateTimeFormatter 时间格式:yyyy-MM-dd HH:mm:ss。其他则是提供了 获取当前时间 和 时间与String互转的方法。
2/ TimeFormat 内部枚举类,首先它是单例的。

transient 关键字目的是确保 DateTimeFormatter 无序列化存储。为啥单例,因为 DateTimeFormmatter 是无状态的,可以线程共享。

具体方法解析如下:
1. 获取当前时间

String now = TimeUtil.getCurrentDatetime();
System.out.println(now);
output:
2016-08-28 16:35:23

2. 获取当前相应格式的当前时间

String now = TimeUtil.getCurrentDatetime(TimeUtil.TimeFormat.LONG_DATE_PATTERN_SLASH);
System.out.println(now);
output:
2016/08/28 16:36:24

3. String 转时间
默认格式:yyyy-MM-dd HH:mm:ss

LocalDateTime expectedDateTime = LocalDateTime.of(2014, 11, 11, 10, 11, 11);
LocalDateTime parsedTime = TimeUtil.parseTime("2014-11-11 10:11:11");
assertEquals(expectedDateTime, parsedTime);

其他格式之一:yyyy-MM-dd HH:mm:ss

LocalDateTime expectedDateTime = LocalDateTime.of(2014, 11, 11, 10, 11, 11);
LocalDateTime parsedTime = TimeUtil.parseTime("2014/11/11 10:11:11", LONG_DATE_PATTERN_SLASH);
assertEquals(expectedDateTime, parsedTime);

4. 时间转 String
默认格式:yyyy-MM-dd HH:mm:ss

LocalDateTime time = LocalDateTime.of(2014, 11, 11, 10, 11, 11);
assertEquals(TimeUtil.parseTime(time), "2014-11-11 10:11:11");

其他格式之一:yyyy-MM-dd HH:mm:ss

LocalDateTime time = LocalDateTime.of(2014, 11, 11, 10, 11, 11);
assertEquals(TimeUtil.parseTime(time, LONG_DATE_PATTERN_DOUBLE_SLASH), "2014\\11\\11 10:11:11");

 

四、与 Old 代码互操作

java.time 类与 Old Date 代码互操作如下图:

time

 

五、小结

实战中的 JDK8 ,Show the code。 在用的项目,完善测试时候用起来才是关键。自然需要 JDK 环境支持,升级吧升级吧。
基于 JDK 8 time包的实践,这次只讲了 LocalDateTime 类,慢慢带来更多。
相关代码分享在 Github 主页

如以上文章或链接对你有帮助的话,别忘了在文章结尾处评论哈~ 你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。

 

时间啊 时间啊,来发反鸡汤
72e172b3gw1f5tlp60gryj20je0m8ta0

Posted in Java, 技术

fast-framework – 基于 JDK 8 实现的 Java Web MVC 框架

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!

fast-framework


轻量级 Java Web 框架 – https://github.com/JeffLi1993/fast-framework

  • 基于 JDK 8 规范
  • 基于 Servlet 3.0 规范
  • 零配置
  • REST 服务接口 基于 JSON 传输
  • 目前提供 MVC … 解决方案

 

一、作者与学习乐园

源码地址:我的GitHub地址
作者: 李强强 也叫 泥瓦匠
QQ群:编程之美 365234583 立即加入

二、快速入门

1. 必备环境

2. 下载 fast-framework 项目及 sample 案例

git clone https://github.com/JeffLi1993/fast-framework.git

3. Maven 编译 sample 案例

cd fast-framework // cd 到工程根目录

mvn clean install // 编译工程

4. 启动 sample 案例

cd fast-sample // cd 到 sample 案例工程根目录
mvn jetty:run  // 启动 sample 工程

Console 出现如下结果,表示服务器成功启动:

...
[INFO] Started ServerConnector@f1a45f8{HTTP/1.1}{0.0.0.0:8080}
[INFO] Started @5133ms
[INFO] Started Jetty Server
[INFO] Starting scanner at interval of 10 seconds.

5. 访问 sample

在浏览器中打开:

http://localhost:8080/hello?name=BYSocket

会得到如下结果:
sample结果图

 

如以上文章或链接对你有帮助的话,别忘了在文章结尾处评论哈~ 你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。