基于Spring Boot 的Blog开发(一)
一、引言
之前写过几篇关于利用Spring MVC来开发的博客,从博客下面的评论以及GitHub上的Issues看还是会出现许多的问题,且大部分的问题都出在配置上。虽然说Spring MVC的配置较SSH简化了不少,但是在使用过程中仍然会觉得配置的吃力。
为了进一步简化配置,考虑使用Spring Boot将之前的项目重写,以及对各个模块进行重构。由于是一步步探索的过程,因而在此一步一步记录下来,除了自我学习以外,更方便未来review文档,同时希望能为读者带来一定的遍历。
二、Spring Boot
Spring是一套非常大的框架,在这个框架下有许多的子项目,这些项目可以在 https://spring.io/projects 找到,我们需要用到的两个主要项目就是 Spring Framework 和 Spring Data。这些子项目可以被运用到许许多多的场景,随意组合。然而,可能是历史原因,开发者往往会受到框架组合和配置的困扰,一个个的xml文件让人看起来是非常头痛的事情,而且一旦某个部分配置出错,需要花费很长的时间来找出这个错误,这样做效率是极低的。
为了极大的简化配置,甚至达到零配置的可能,Spring团队开发出了 Spring Boot框架,与其说它是一个框架,倒不如它是一个极大降低Spring开发难度的一个应用程序。
下面是官方的介绍:
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run". We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need very little Spring configuration.
大致的意思:Spring Boot使我们更加容易地创建一个独立的、生产级的,且可以直接运行的Spring应用。由于它整合了Spring platform和一些三方库的配置,使我们可以做到真正的开箱即用。大多数的Spring Boot应用只需要非常少的Spring配置。
那它的特征有哪些呢:
- Create stand-alone Spring applications,创建独立的Spring应用程序
- Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files),内嵌Tomcat, Jetty或Undertow,不需要部署WAR包
- Provide opinionated 'starter' POMs to simplify your Maven configuration,提供startet POMs,以简化Maven配置
- Automatically configure Spring whenever possible,任何时候都可以自动配置Spring
- Provide production-ready features such as metrics, health checks and externalized configuration,提供产品级特征,例如矩阵、健康检查以及外部化配置
- Absolutely no code generation and no requirement for XML configuratio,绝对没有代码生成,以及不需要XML配置
有上面这几条就已经足够吸引人了。其他的不用做太多的介绍,直接从代码来看Spring Boot的配置是多么的easy。
三、开发环境
在开发之前,首先交代一下开发环境:
IDE选用IntelliJ IDEA 2016,Spring Tool Suite也是一个好的选择。
JDK使用JDK8。
就这些,不用Tomcat(Spring Boot内嵌),不用Maven(IDEA内嵌)。
四、开始开发Spring Boot应用
4.1 生成初始项目
创建项目的方法有两种,一种是使用官方的SPRING INITIALIZR,另一种是利用IDEA。
4.1.1 使用Spring Initializr生成初始项目
打开 http://start.spring.io/,如下图所示
填写好项目名,所需依赖后(目前只使用Web和JPA,数据库暂时使用内存数据库H2,方便演示),点击生成项目,会生成一个zip包,这就是你的原始项目,解压到指定目录,使用IDEA打开pom.xml:
IDEA会自动下载所有的依赖,这样原始的项目就配置完成了:
4.1.2 使用IDEA生成初始项目
这个过程其实和1.1类似,相当于1.1的本地版本。
打开IDEA,新建项目,选择Spring Initializr,点击Next:
填写项目名,Next:
选择Web、JPA和H2,Next,Finish。
这样就生成了一个和1.1一样的项目。
4.2 开发第一个Spring Restful服务
4.2.1 任务详情
打开 https://spring.io/guides,可以看到Spring官网提供的一些例程,一个例程大约15~30分钟的时间:
选择第一个例程,需要做的如下:
请求 :
http://localhost:8080/greeting
返回:
{"id":1,"content":"Hello, World!"}
请求:
http://localhost:8080/greeting?name=Gaussic
返回:
{"id":1,"content":"Hello, Gaussic!"}
我们需要做的是,发送一个请求,返回JSON格式的数据。Spring-Boot-Web整合了Spring MVC的配置,我们将利用Spring MVC来开发一个简单的Restful服务。
4.2.2 开发
创建model
首先新建一个Greeting类,这是一个POJO,在mvc框架中称之为model,用以保存数据:
package com.gaussic;/*** Created by gaussic on 11/4/2016.* model*/
public classGreeting{private final long id;private final String content;publicGreeting(longid, String content){this.id = id;this.content = content;}publiclonggetId(){return id;}publicStringgetContent(){return content;}
}
创建 controller
controller在mvc框架中是控制层, 它会解析浏览器的请求,并做特定地处理。由于我们需要开发一个简单的Restful API,Spring MVC提供了简单的 @RestController 注解,来标明某个类是一个 Restful Controller,简化Controller的配置,如下:
package com.gaussic;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.atomic.AtomicLong;/*** Created by gaussic on 11/4/2016.* controller*/@RestController
public classGreetingController{private static final String template = "Hello, %s!"; // content 模板private final AtomicLong counter = new AtomicLong(); // 自动生成 id@RequestMapping("/greeting")public Greeting greeting(@RequestParam(value ="name", defaultValue ="World") String name){return new Greeting(counter.incrementAndGet(), // 自增String.format(template, name) // content模板);}
}
在运行之前,先解释一下这段代码。
首先,@RestController注解规定了GreetingController是一个Restful API的控制器,只返回API相关的数据,如果是普通的@Controller注解,如果在方法上不做特殊的配置,将默认返回一个视图(关于视图在后面会提及)。
其次,@RequestMapping("/greeting")是一个请求映射,当浏览器访问 http://localhost:8080/greeting,是,将会转入这个方法进行处理。
@RequestParam用于获取该请求的参数,当浏览器访问 http://localhost:8080/greeting?name=Gaussic是,将会把参数的值写入name中,此处默认值是World,如果不设置默认值且不传递参数,将会报错。
特别要注意的是,这个方法直接返回了一个Greeting对象,官方的解释是:
As you see in steps below, Spring uses the Jackson JSON library to automatically marshal instances of type
Greeting
into JSON.
也就是说,Spring会使用Jackson JSON库自动地将这个Greeting对象转化为JSON并返回。这一点非常强大,而且在编写API时是非常有作用的。
4.3 运行Spring Boot
现在所有的开发已经完成,在IDEA中运行Spring Boot非常简单,点击右上角的箭头即可:
在浏览器中访问 http://localhost:8080/greeting,返回json格式数据,刷新之后id会自增:
传入参数name,将返回新的数据:
这样,一个简单的Restful Service开发完成了。
如果需要在外部运行,需要将应用打成jar包。在此可以使用IDEA内部集成的maven进行打包,
点击右端的 Maven Projects,先选择 clean,再选择 package,将会在target文件夹下生成一个.jar文件。
现在,使用:
java -jar target/springblog-0.0.1-SNAPSHOT.jar
运行即可。
转载请注明出处:Gaussic(自动问答)
基于Spring Boot 的Blog开发(一)相关推荐
- 源码分享-基于Spring Boot为美柚大数据研发的大数据任务调度平台
此项目为美柚大数据研发的大数据任务调度平台,提供Spark.Flink等离线任务的调度以及实时任务的监控,并具有批次积压报警.任务异常重启.重复应用监测.大内存应用监测等功能. Big Whale - ...
- java restful接口开发实例_实战:基于Spring Boot快速开发RESTful风格API接口
写在前面的话 这篇文章计划是在过年期间完成的,示例代码都写好了,结果亲戚来我家做客,文章没来得及写.已经很久没有更新文章了,小伙伴们,有没有想我啊.言归正传,下面开始,今天的话题. 目标 写一套符合规 ...
- java quartz spring_JavaLib-quartz | 基于Spring Boot Quartz开发的定时任务
基于Spring Boot Quartz开发的JavaLib-quartz,目的是帮你快速构建定时任务系统,你可以专心编写你的业务逻辑,而不必关注定时任务具体是如何实现的,他的性能如何,有没有异常以及 ...
- 分布式 Spring Cloud 基于 Spring Boot 开发一整套
Spring Boot的工程包括: - Spring IO Platform:用于版本化应用程序的企业级分发. - Spring Framework:用于事务管理.依赖注入.数据访问.消息传递和W ...
- 基于Spring boot框架开发的电商网站系统
目 录 第一章 绪论- 2 1.1 编写目的 - 2 1.2 项目背景 - 2 1.3 项目需求 - 2 第二章 系统体系结构 - 3 2.1 系统体系结构 - 3 2.2 数据库设计 E-R 图 - ...
- 基于Spring boot开发电子宿舍管理系统毕业设计源码132056
摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代 ...
- (附源码)springboot+mysql+基于Spring boot开发电子宿舍管理系统 毕业设计132056
摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代. ...
- springboot+mysql+基于Spring boot开发电子宿舍管理系统 毕业设计-附源码132056
摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代 ...
- (附源码)基于Spring boot开发电子宿舍管理系统 毕业设计132056
摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的时尚潮流,人类发展的历史正进入一个新时代. ...
最新文章
- C#中如何得到机器的IP地址
- 9 行代码提高少样本学习泛化能力,代码已开源
- 反光衣识别算法冠军方案总结(附源码)|极市打榜
- C++判断一个数是否为armstrong number阿姆斯特朗数(附完整源码)
- 项目管理(2):备战pmp
- inittab文件剖析[CentOS 5.X](第二版)
- android根据中心裁剪图片,拍照,选择照片并进行裁剪,适配Android 7.0
- 今天,这些公众号被永久禁言
- oracle rds 运维服务_RDS oracle数据库运维
- VC/MFC中的CComboBox控件使用详解
- jquery IE中同一个url第二次AJAX调用无法触发
- arcgis缓冲区分析(结合案例)-国家边界缓冲区的建立
- JAVA学习:坦克大战(怀旧版)游戏开发代码
- 扬州大学c语言上机作业答案,扬州大学C语言上机作业1-9整理
- 计算机网络下一跳IP,计算机网络之IP地址
- 图像识别并用机械手进行抓取
- php 架构师之路ioc讲解
- P2P网贷黎明前夕的黑夜---P2P是否要被封杀呢
- python 微信图文消息接口_用Python实现微信公众号API素材库图文消息抓取
- Python简易图片批量压缩程序