2016

之前介绍了很多Web层的例子,包括构建RESTful API、使用Thymeleaf模板引擎渲染Web视图,但是这些内容还不足以构建一个动态的应用。通常我们做App也好,做Web应用也好,都需要内容,而内容通常存储于各种类型的数据库,服务端在接收到访问请求之后需要访问数据库获取并处理成展现给用户使用的数据形式。 本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例。 数据源配置在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式。 首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr...

由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API。而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端。 这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发、Android开发或是Web开发等。为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份RESTful API文档来记录所有接口细节,然而这样的做法有以下几个问题: 由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型、HTTP头部信息、HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下游的抱怨声不绝于耳。 随着时间推移,不断修改接口实现的时候都必须同步修改接口文...

Ghost博客系统默认提供的博文列表为传统的翻页方式(通过点击上一页、下一页等按钮来切换),随着移动客户端的发展,瀑布流式的滚动加载方式得到广泛应用,有效地提高了用户浏览信息的流畅度。下面详述如何通过Infinite Scroll来改造Ghost博文列表的翻页效果。 Infinite ScrollInfinite Scroll顾名思义:无限滚动,也称为自动分页、滚动分页和无限分页,是基于jquery的一个插件。可以用来实现滚动页面的时候加载下一页的内容。 infinite-scroll项目地址 实现步骤 将jquery.infinitescroll.min.js拷贝到你的主题目录下 在循环获取posts列表的页面上引入jquery.infinitescroll.min.js文件 注意:jquery.infinitescroll.min.js必须在jquery引入之后 <s...

首先,回顾并详细说明一下在快速入门中使用的@Controller、@RestController、@RequestMapping注解。如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下快速入门的内容。 @Controller:修饰class,用来创建处理http请求的对象 @RestController:Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。 @RequestMapping:配置url映射 下面我们尝试使用Spring MVC来实现一组对User对象操作的RESTful API,配合注释详细说明在Spring MVC中如何映射HTTP请求、如何传参...

今天看了一位简书上朋友发来的工程,于是想到应该要写这么一篇。前人总结的最佳实践案例可以帮助我们免去很多不必要的麻烦。花点时间来看一下本文,绝对物超所值。 工程结构(最佳实践)Spring Boot框架本身并没有对工程结构有特别的要求,但是按照最佳实践的工程结构可以帮助我们减少可能会遇见的坑,尤其是Spring包扫描机制的存在,如果您使用最佳实践的工程结构,可以免去不少特殊的配置工作。 典型示例 root package结构:com.example.myproject 应用主类Application.java置于root package下,通常我们会在应用主类中做一些框架配置扫描等配置,我们放在root package下可以帮助程序减少手工配置来加载到我们希望被Spring加载的内容 实体(Entity)与数据访问层(Repository)置于com.example.myproje...

Spring Boot快速入门中我们完成了一个简单的RESTful Service,体验了快速开发的特性。在留言中也有朋友提到如何把处理结果渲染到页面上。那么本篇就在上篇基础上介绍一下如何进行Web应用的开发。 静态资源访问在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。 默认配置Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则: /static /public /resources /META-INF/resources 举例:我们可以在src/main/resources/目录下创建static,在该位置放置一个图片文件。启动程序后,尝试访问http://localhost:8080/D.jpg。如能显示图片,配置成功。 渲染Web页面在之前的示例中,我们都是通过@RestController来处理请求...

简介在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot来让你更易上手,更简单快捷地构建Spring应用! Spring Boot让我们的Spring应用变的更轻量化。比如:你可以仅仅依靠一个Java类来运行一个Spring引用。你也可以打包你的应用为jar并通过使用java -jar来运行你的Spring Web应用。 Spring Boot的主要优点: 为所有Spring开发者更快的入门 开箱即用,提供各种默认配置来简化项目配置 内嵌式容器简化Web项目 没有冗余代码生成和XML配置的要求 快速入门本章主要目标完成Spring Boot基础项目的构建,并且实现一个简单的Http请求处理,通过这个例子对Spring Boot有一个初步的...

记录一个今天遇到的问题。 Java版本:1.4 运行设置: -Xms1G -Xmx4G 报错:[ Incompatible initial and maximum heap sizes specified: ][ initial size:1073741824 bytes, maximum heap size: 67108864 bytes ][ The initial heap size must be less than or equal to the maximum heap size. ][ The default initial and maximum heap sizes are 4194304 and 67108864 bytes. ]无法创建Java虚拟机。 疑问:执行语句中设置初始化内存1G,最大内存4G,但是错误提示中为什么最大内存是64M? 尝试1:固定X...

距离年初定下开始写博客的计划以来已经1个半月了,不少朋友问我用的什么博客系统,为什么没有用WordPress?我想主要原因有两点:第一,为了进一步学习Node.js,可以通过使用Ghost从源码中学习大牛们的设计。第二,Ghost比起WordPress更纯粹、更简洁、更快速,相信这点大家在访问的时候都能体会得到。下面本文主要介绍一下Ghost的安装,并分享一下自己的博客主题,希望对准备自己建站的童鞋有所帮助。 准备工作 Node.js版本:0.10.x、0.12.x、4.2.x。安装步骤可参考:Node.js环境搭建 Ghost版本:0.7.4:中文集成版(33.6M),中文标准版(3.39M),英文原版(3.23.M) 推荐使用中文集成版,其中包含Node.js需要的模块包node_modules。 若使用中文标准版,需使用npm install --production进行...

前几天发了《使用Node.js制作爬虫教程》之后,有朋友问如果要爬文件怎么办,正好之前也写过类似的,那就直接拿过来写个续篇吧,有需要的可以借鉴,觉得不好的可以留言交流。 案例回顾上一篇中,主要利用nodejs发起一个getData请求来得到4星角色的id列表。通过chrome开发者工具来查看页面结构,分析得出角色详细页面的URL规则和详细页面中想要抓取内容的位置。再循环遍历4星角色id列表去发起角色详细页面的请求并解析出想要收集的内容。 具体内容可再参考原文:使用Node.js制作爬虫教程 目标分析案例回顾中提到的角色详细页面(参考样例),有不少图片内容,本文就以抓取“主动技能”的GIF图片为例,来改造一下前文的代码以完成定向抓取图片的效果。 通过Chrome查看图片对象的URL规则为:/img/as2/角色id.gif 编码过程构建工程和引入框架 $npm init$npm...

应邀写一点使用Node.js爬点资料的实例,对于大家建站爬一些初始资料或者做分析研究的小伙伴们应该有些帮助。 目标分析目标地址:http://wcatproject.com/charSearch/ 抓取内容:抓取所有4星角色的数值数据。如果我们采用手工采集的步骤,需要先进入目标地址,然后选择4星角色的选项,页面下方出现所有4星角色的头像,依次点击每个4星角色头像后会出现角色的详细页面,记录下详细页面中数据。显然这样的做法如果角色一多,手工处理是非常吃力的,所以我们就需要一个自动的脚本去完成这样的动作。大家不妨先手工试试这样的访问步骤,有助于后面的分析和实践。 页面分析: 进入http://wcatproject.com/charSearch/ 打开Chrome的“开发者工具”,选择“Network”标签。点亮“Record Network Log”按钮 第一步页面操作:在页面中...

社交,在互联网产生伊始就是块大腿肉,人人想摸,人人想啃。自企鹅大帝一统天朝社交网络开始,看似平静的社交网络也经历了大大小小的战役无数,但均未动摇企鹅大帝的统治。随着这两天被支付宝一次次好友请求的轰炸,似乎又开始嗅到了战争的硝烟! 阿里巴巴对社交的染指也并非首次。2013年9月,阿里巴巴发布“来往”,马云说:“宁愿死在来往的路上,也不愿活在微信的朋友圈里”,表明了其渴望布局社交网络的决心。然而,“来往”打着“朋友就是要来往”的旗帜,从内部员工着手推广与发展用户,定下KPI激励员工。一石激起千层浪,在内部得到很多反感,在外部对此举更是议论纷纷。致使“来往”的核心灵魂似乎变成了员工的红包,而不是一种朋友间的情愫。原本就同质化的社交软件在失去了灵魂之后,又依靠如何捕获用户的心呢? “来往”虽然在与微信的大战中败了,但是阿里并没有停止对入侵社交领域的尝试。2014年,不记得具体什么时候了,...

这两年Nodejs发展极其迅速,开始接触nodejs的时候版本还在0.10.x,现在居然已经到5.3.x了,发展如此迅速也说明了其在实战中获得广大开发者的认可程度之高。在实战中也忍不住使用了几次,总体体验还是非常不错的,开始向朋友推荐使用,于是应邀写一些关于Nodejs的实例,那么就先从环境搭建作为开始吧。 nvm安装nvm全称Node Version Manager,Node版本管理器。由于nodejs的更新速度,其版本众多,我们经常能找到的各种资料可能都是基于不同版本,我们写的程序可能也会依赖不同的版本,我们需要在本机上方便的切换不同版本的nodejs,所以我们需要它来帮助我们管理,其项目地址:https://github.com/creationix/nvm 几种常用的安装方式curl安装方式:curl -o- https://raw.githubusercontent.com...

“我有一个特别好的互联网创业想法, 就缺少一个程序猿帮我实现了”。 这句话去年很火,相信不少搞技术的朋友也都现实经历过,知乎上也有关于这个话题的帖子。拿出来说还是因为最近又碰到这样的类似问题。当一个非技术创业者有一个不错的想法的时候,且不论想法到底是不是好,假设它是极好的,那么下来他真的只是缺少一个程序猿吗? 情况一:当你碰到了一个程序猿,你开启了画饼模式,“我想做的产品,XX牛叉……市场XX亿……A轮、B轮、C轮、上市……迎娶白富美……人生赢家,还等什么就差你的代码了!”。然而程序猿的内心可能是这样的:“哥,我是程序猿不是产品汪,你说的是啥?需求文档呢?原型呢?你到底是要做啥啊?能不能先给我迎娶白富美啊?” 原因分析:很多程序猿并不具备分析业务并转换成互联网产品的能力,尤其在大型机构或是外包团队中,由于细致分工之后,他们只是按照设计去实现具体代码的人,就像水电工按照设计师的水电...

年底了,相信很多企业都开始或已经完成了年终的考核工作,考核的方式多种多样,了解了一下身边的朋友,大体的节奏基本都是这样的:述职、组内投票(可能没有)、部门投票。 考核的结果总是几家欢喜几家愁,我们也总能听到各种各样的抱怨。这样的抱怨主要由于认可自己的员工没有得到大家的肯定,其根源无非是考核方式的公平性问题,投票的结果是不是能正确的反应员工的价值? 为什么很多干死干活的员工没有得到大家的认可?我认为主要有两点: 熟人关系主导了投票结果。对于技术工作者来说,很大一部分人并不善于人际交往,这样熟人越多的人就越有优势。 不同工作之间的不了解加剧熟人关系对投票的影响。由于技术部门中不同小组的细分领域往往不能理解对方的工作,自然在投票的依据上就不会以工作内容为考量。 那这样的投票结果就是依靠熟人和博弈,并不能反映一个技术工作者真正的成绩。那么要怎么做才公平呢?在这里设想一种方案一起探讨,不喜...