文档章节

使用spring boot构建微服务

孟飞阳
 孟飞阳
发布于 2016/07/13 10:36
字数 1537
阅读 4441
收藏 209

什么是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非常适合构建微服务。

© 著作权归作者所有

共有 人打赏支持
孟飞阳
粉丝 205
博文 964
码字总数 543203
作品 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
微服务资源springboot、springcloud、docker、dubbo项目实战等倾心分享

精彩内容 java实战练习项目教程 全网最全电子图书分享 你所需要的大数据视频教程 java学习视频教程及源码 今天又是周末,还是想给大家送一些福利,因为最近一直有小伙伴问我要springboot等微...

公众号_好好学java
08/06
0
0
简述Spring Boot与Spring Cloud的关系

如下文章字数大约600字,阅读时间需要5分钟左右。 随着微服务架构的持续火热,以及对开发部署迭代需求越来越快速,现今,spring boot逐渐火热,越来越流行。 随着spring boot 流行的还有另外...

Java大蜗牛
08/27
0
0
Spring Boot与Spring Cloud是什么关系?

SpringBoot先于Spring Cloud问世。 SpringBoot相当于脚手架,借助他可以快速搭建房子,它本身不具备任何功能属性,值是普通房间,没有其他任何功能。 什么是Spring Boot Spring Boot简化了基...

远方的梦Java
08/05
0
0
SpringCloud核心教程 | 第一篇: 使用Intellij中的Spring Initializr来快速构建Spring Cloud工程

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

星缘1314
07/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

09-利用思维导图梳理JavaSE-

09-利用思维导图梳理JavaSE-Java IO流 主要内容 1.Java IO概述 1.1.定义 1.2.输入流 - InputStream 1.3.输出流 - OutputStream 1.4.IO流的分类 1.5.字符流和字节流 2.InputStream类 2.1.File...

飞鱼说编程
17分钟前
1
0
Spring Cloud 微服务的那点事

在详细的了解SpringCloud中所使用的各个组件之前,我们先了解下微服务框架的前世今生。 单体架构 在网站开发的前期,项目面临的流量相对较少,单一应用可以实现我们所需要的功能,从而减少开...

我是你大哥
27分钟前
1
0
步步深入MySQL:架构->查询执行流程->SQL解析顺序

一、前言 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了。 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一...

Java干货分享
41分钟前
1
0
gson1.7.1线程并发导致空指针问题

java.lang.NullPointerExceptionat com.google.gson.FieldAttributes.getAnnotationFromArray(FieldAttributes.java:231)at com.google.gson.FieldAttributes.getAnnotation(FieldAttribut......

东风125
今天
3
0
以太坊RPC接口使用

以太坊RPC接口文档: https://github.com/ethereum/wiki/wiki/JSON-RPC#web3_clientversion 使用方式: 比如我要调用某个合约的balanceOf(address _owner)方法。 因为没有改变合约的状态,所以...

王坤charlie
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部