文档章节

使用spring boot构建微服务

孟飞阳
 孟飞阳
发布于 2016/07/13 10:36
字数 1537
阅读 4422
收藏 209
点赞 12
评论 23

什么是spring boot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是spring boot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架(不知道这样比喻是否合适)。

 

使用spring boot有什么好处

其实就是简单、快速、方便!平时如果我们需要搭建一个spring web项目的时候需要怎么做呢?

1)配置web.xml,加载spring和spring mvc

2)配置数据库连接、配置spring事务

3)配置加载配置文件的读取,开启注解

4)配置日志文件

...

配置完成之后部署tomcat 调试

...

现在非常流行微服务,如果我这个项目仅仅只是需要发送一个邮件,如果我的项目仅仅是生产一个积分;我都需要这样折腾一遍!

 

但是如果使用spring boot呢?

很简单,我仅仅只需要非常少的几个配置就可以迅速方便的搭建起来一套web项目或者是构建一个微服务!

经过笔者亲测,只想说三个字:爽歪歪啊!

下面讲一下使用spring boot的构建步骤:

使用spring boot构建服务步骤

使用maven构建

(1)访问 http://start.spring.io/

(2)选择构建工具Maven Project、Spring Boot版本1.3.6以及一些工程基本信息,点击“Switch to the full version.”java版本选择1.8,可参考下图所示:

此时点击“”,其实已经可以生成maven工程了,但如果你还想添加一些依赖包,在上图中点击:,之后如图:

此时会多出很多选项,我选择的有:

1、打包的格式为jar包

2、jdk版本为1.8

3、语言为java

4、在依赖包方面我选择了AOP,WEB,websocket依赖。下面其他还有数据库,缓存,email等的依赖。

(3)下载工程

勾选了之后点击:,将maven工程下载。解压后如图:

(4)将工程导入eclipse

按以下步骤将工程导入到eclipse中:

Import -> Existing Maven Projects -> Next ->选择解压后的文件夹-> Finish

待eclipse自动将所需的包下载后(根据你选择的依赖包多少,下载时间可能会比较长,要有耐心),工程结构如下:

如上图所示,Spring Boot的基础结构共三个文件:

l src/main/java  程序开发以及主程序入口

l src/main/resources 配置文件

l src/test/java  测试程序

 

另外,spingboot建议的目录结果如下:

root package结构:com.example.myproject

com
  +- example
    +- myproject
      +- Application.java
      |
      +- domain
      |  +- Customer.java
      |  +- CustomerRepository.java
      |
      +- service
      |  +- CustomerService.java
      |
      +- controller
      |  +- CustomerController.java
      |

1、Application.java 建议放到跟目录下面,主要用于做一些框架配置

2、domain目录主要用于实体(Entity)与数据访问层(Repository)

3、service 层主要是业务类代码

4、controller 负责页面访问控制

 

采用默认配置可以省去很多配置,当然也可以根据自己的喜欢来进行更改

最后,启动Application main方法,至此一个java项目搭建好了!

服务使用方法

1、编写一个controller,在这里我就索性在la.cewan这个包里写了,当然最好还是单独建一个包。

package la.cewan;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * HelloController
 * @author mengfeiyang
 *
 */
@RestController
public class HelloController {
	@RequestMapping("/hello")
	public String index(){
		return "Hello,world!";
	}
}

额,这就是返回一句hello world。@RestController的意思就是controller里面的方法都以json格式输出,不用再写什么jackjson配置的了!

2、程序启动

启动主程序,打开浏览器访问http://localhost:8080/hello,就可以看到效果了,有木有很简单!其他部分在相关模块中开发即可。web的其他方法与springmvc差不多了。

可能遇到的问题

1、8080端口被占用

这是个很常见的问题,很不幸楼主我也碰到了。解决方案主要有两个:

(1)干掉占用8080端口的程序,方法如下:

http://jingyan.baidu.com/article/215817f784c2d61eda1423c4.html

一般这个方法就奏效了,不过悲剧的是,在我这里竟然无效。因为占用8080端口的程序使用:

taskkill /F /PID pid

命令无法结束。如果有同样情况的,参考下面这个终极解决办法吧。

(2)在spring boot启动时,指定端口。方法如下:

启动类实现:EmbeddedServletContainerCustomizer 接口即可,如本例指定的是7788:

package la.cewan;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;

/**
 * spring boot启动入口类
 * @author mengfeiyang
 *
 */
@SpringBootApplication
public class SbootApplication implements EmbeddedServletContainerCustomizer{

	public static void main(String[] args) {
		SpringApplication.run(SbootApplication.class, args);
	}

	@Override
	public void customize(ConfigurableEmbeddedServletContainer container) {
		container.setPort(7788);
	}
}

做单元测试方法

打开的src/test/下的测试入口,编写简单的http请求来测试;使用mockmvc进行,利用MockMvcResultHandlers.print()打印出执行结果。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MockServletContext.class)
@WebAppConfiguration
public class HelloWorldControlerTests {
    private MockMvc mvc;
    @Before
    public void setUp() throws Exception {
        mvc = MockMvcBuilders.standaloneSetup(new HelloWorldController()).build();
    }
    @Test
    public void getHello() throws Exception {
    mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn();
    }
}

开发环境的调试

热启动在正常开发项目中已经很常见了吧,虽然平时开发web项目过程中,改动项目启重启总是报错;但springBoot对调试支持很好,修改之后可以实时生效,需要添加以下的配置:
 

<dependencies>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-devtools</artifactId>

        <optional>true</optional>

   </dependency>

</dependencies>

<build>

    <plugins>

        <plugin>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-maven-plugin</artifactId>

            <configuration>

                <fork>true</fork>

            </configuration>

        </plugin>

   </plugins>

</build>

该模块在完整的打包环境下运行的时候会被禁用。如果你使用java -jar启动应用或者用一个特定的classloader启动,它会认为这是一个“生产环境”。

总结

使用spring boot可以非常方便、快速搭建项目,使我们不用关心框架之间的兼容性,适用版本等各种问题,我们想使用任何东西,仅仅添加一个配置就可以,所以使用sping boot非常适合构建微服务。

© 著作权归作者所有

共有 人打赏支持
孟飞阳
粉丝 202
博文 923
码字总数 537449
作品 5
朝阳
个人站长
加载中

评论(23)

孟飞阳
孟飞阳

引用来自“yahoo12345”的评论

在STS(Spring tools suite) 可以吗?
可以啊,我就是在STS里面调试通过的
y
yahoo12345
在STS(Spring tools suite) 可以吗?
K不是你的帝
K不是你的帝

引用来自“飘逸的逸”的评论

@RestController的意思就是controller里面的方法都以json格式输出,不用再写什么jackjson配置的了!

我的理解是 @RestController == @Controller + 每个方法加上@ResponseBody

事实上就是如此,注解源码和你说的一样
小九酒
小九酒
Hao
孟飞阳
孟飞阳

引用来自“飘逸的逸”的评论

关于端口配置,有很多方法,详细参照这里配置的方式
http://stackoverflow.com/questions/21083170/spring-boot-how-to-configure-port
谢谢79
孟飞阳
孟飞阳

引用来自“天下灯火”的评论

数据库,事物啥的不还是要配置吗?
是的,其他和spring项目开发都一样了,只需要填充逻辑了
飘逸的逸
飘逸的逸
关于端口配置,有很多方法,详细参照这里配置的方式
http://stackoverflow.com/questions/21083170/spring-boot-how-to-configure-port
飘逸的逸
飘逸的逸
@RestController的意思就是controller里面的方法都以json格式输出,不用再写什么jackjson配置的了!

我的理解是 @RestController == @Controller + 每个方法加上@ResponseBody
豆浆王子
豆浆王子

引用来自“554330833a”的评论

这个不需要依赖tomcat的吗?

引用来自“monolithic”的评论

这个默认是内部嵌入式tomcat,也可以选用jetty
现在用的内部服务器都是轻量级的jetty
bigtk
bigtk

引用来自“554330833a”的评论

这个不需要依赖tomcat的吗?
要的,使用的是embed的tomcat
学习 Spring Boot 知识看这一篇就够了

从2016年因为工作原因开始研究 Spring Boot ,先后写了很多关于 Spring Boot 的文章,发表在技术社区、我的博客和我的公号内。粗略的统计了一下总共的文章加起来大概有六十多篇了,其中一部分...

ityouknow
05/28
0
0
SpringCloud核心教程 | 第一篇: 使用Intellij中的Spring Initializr来快速构建Spring Cloud工程

spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简...

星缘1314
07/13
0
0
springcloud微服务理解

大家好这是我的一个简单理解,学习过程中有许多不明白的地方特此请教大家 我的项目大概情况: 生产者是一个springboot项目,有controller、service、entity、dao等完整的项目,添加注解后 @E...

樱木花道VS康
06/06
0
0
Spring Boot入门资料整理

Spring Boot 初识 SpringBoot前世今生 本文主要讲述spring boot的由来,即其它诞生的背景,初衷,现状,及对未来的展望。 Spring Boot参考指南中文版--Chapter1.Spring Boot中文文档 本节提供...

小致dad
2017/11/07
0
0
微服务构建: Spring Boot

在展开 Spring Cloud 的微服务架构部署之前, 我们先了解一下用于构建微服务的基础框架-Spring Boot。 由于 Spring Cloud 的构建基于 Spring Boot 实现, 在后续的示例中我 们将大量使用 Sp...

wenhy
06/20
0
0
用IDEA搭建springboot+thymleaf+mybatis(附分页方法)

参考thymleaf官方网址: 现在主流的微服务springboot配合H5开发效率极快。也符合现在前后端分离的开发方式。 thymleaf作为页面模板框架,可以更好的处理Controller和html的关系。 具体搭建过程...

HaleyLiu
05/17
0
0
补习系列-springboot项目基础搭建课

目录 前言 一、基础结构 二、添加代码 三、应用配置 四、日志配置 五、打包部署 小结 前言 springboot 最近火的不行,目前几乎已经是 spring 家族最耀眼的项目了。抛开微服务、技术社区这些推...

美码师
07/07
0
0
10分钟入门SpringBoot

SpringBoot是基于spring框架衍生的一种新的微服务框架,如果对Spring有一定了解的同学肯定知道在Spring中需要配置各种xml文件完成bean的注册操作,随着服务越来越多,配置就变得越来越复杂,...

jwfy
06/14
0
0
微服务 Dropwizard 配置 服务调用

调用另一个服务 在微服务环境中,每个服务负责向其他协作者提供功能或服务。如果我们希望扩展“HelloWorld”微服务,我们将需要创建一个可以使用Drop向导的REST客户端功能调用的服务。就像我...

woshixin
05/08
0
0
【微服务】使用spring cloud搭建微服务框架,整理学习资料

写在前面   使用spring cloud搭建微服务框架,是我最近最主要的工作之一,一开始我使用bubbo加zookeeper制作了一个基于dubbo的微服务框架,然后被架构师否了,架构师曰:此物过时。随即,我...

grootzhang
06/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

gRPC学习笔记

gRPC编程流程 1. proto文件定义 proto文件用于定义需要通过gRPC生成的接口,可以理解为接口定义文档 2. 通过构建工具生成服务基类代码-Maven或Gradle 3. 服务端开发 服务端实现类须实现通过构...

OSC_fly
13分钟前
0
0
Docker Mac (三) Dockerfile 及命令

Dockerfile 最近学习docker的时候,遇到一件怪事,关于docker镜像可能会被破坏,还不知道它会有此措施 所以需要了解构建Dockerfile的正确方法 Dockerfile是由一系列命令和参数构成的脚本,这些命...

___大侠
40分钟前
0
0
NetCat Tutorials

Hacking with Netcat part 1: The Basics Hacking with Netcat part 2: Bind and reverse shells Hacking with Netcat part 3: Advanced Techniques 10 Introduction to Netcat - pdf NetCat......

zungyiu
40分钟前
0
0
Android Studio+NDK+Cmake 移植FFmpeg-4.0.2命令行工具

一、编译 参考大神的帖子,亲测一次编译成功:https://blog.csdn.net/bobcat_kay/article/details/80889398 鉴于以前查文档的经验,这里附上编写例子的时间:2018年7月22日 我用的是ubantu,...

她叫我小渝
41分钟前
0
0
mysql创建数据库

登录MYSQL mysql -u root -p 脚本创建数据库WeChat,并制定默认的字符集是utf8mb4。 CREATE DATABASE Wechat DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci; 授权 grant all......

niithub
55分钟前
0
0
svn: Unable to connect to a repository URL 的解决方案

错误图示: 解决办法:清除本地保存的授权信息; 1:右键点击本地文件夹,选择设置; TortoiseSVN -> Settings 2:在弹出的对话框中选择 Saved Data, 右侧选择:授权地方清理所有。 然后点确...

宁哥实战课堂
今天
1
0
sleep与wait的区别

Thread.sleep(XXX)方法消耗CPU吗? 这个知识点是我之前认识一直有错误的一个知识点,在我以前的认识里面,我一直认为Thread.sleep(1000)的这一秒钟的时间内,线程的休眠是一直占用着CPU的时间...

码代码的小司机
今天
1
0
20位活跃在Github上的国内技术大牛 leij 何小鹏 亚信

本文列举了20位在Github上非常活跃的国内大牛,看看其中是不是很多熟悉的面孔? 1. lifesinger(玉伯) Github主页: https://github.com/lifesinger 微博:@ 玉伯也叫射雕 玉伯(王保平),...

海博1600
今天
1
0
Mybatis收集配置

一、Mybatis取Clob数据 1、Mapper.xml配置 <resultMap type="com.test.User" id="user"> <result column="id" property="id"/> <result column="json_data" property="jsonData" ......

星痕2018
今天
1
0
centos7设置以多用户模式启动

1、旧版本linux系统修改inittab文件,在新版本执行vi /etc/inittab 会有以下提示 # inittab is no longer used when using systemd. # # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON......

haha360
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部