使用spring boot构建微服务
使用spring boot构建微服务
孟飞阳 发表于1年前
使用spring boot构建微服务
  • 发表于 1年前
  • 阅读 4336
  • 收藏 207
  • 点赞 12
  • 评论 23

腾讯云 技术升级10大核心产品年终让利>>>   

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

共有 人打赏支持
粉丝 187
博文 840
码字总数 521567
作品 5
评论 (23)
贝爵宏
配置端口 server:port就行了
chenzb
热启动,需要Debug模式的吧!tomcat或Jeety都可以支持?
notreami
每次看到使用spring boot还用Maven的XML配置,总觉得还不是在大量使用XML
Lofo

引用来自“chenzb”的评论

热启动,需要Debug模式的吧!tomcat或Jeety都可以支持?
Spring-Loaded可以支持热替换。
554330833a
这个不需要依赖tomcat的吗?
天下灯火
数据库,事物啥的不还是要配置吗?
xuningnb

引用来自“554330833a”的评论

这个不需要依赖tomcat的吗?
这个默认是内部嵌入式tomcat,也可以选用jetty
百世经纶之傲笑红尘
目前正有准备用SpringBoot虐翻我儿子的Spring+SpringMVC+Hibernate配置+一大堆XML或注释配置的打算
xmlspyspring
1.使用eclipse或者idea的插件来生成工程
2.使用gradle替代maven,方便很多
3.使用yml文件替代properties文件
4.使用Swagger2生成rest doc和调试页面,并且可以直接在网页中进行调试
xmlspyspring

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

数据库,事物啥的不还是要配置吗?
需要配置,数据库相关东西可以在 yml或者properties中配置参数.
事务可以使用默认值,或者使用注解
xmlspyspring

引用来自“554330833a”的评论

这个不需要依赖tomcat的吗?
默认是使用内嵌的web容器, 有tomcat和jetty
xmlspyspring

引用来自“chenzb”的评论

热启动,需要Debug模式的吧!tomcat或Jeety都可以支持?
如果使用gradle进行配置项目的话: 直接把这个加进去 compile('org.springframework.boot:spring-boot-devtools')
就可以热启动了. 和模式无关
啦啦啦拉拉

引用来自“notreami”的评论

每次看到使用spring boot还用Maven的XML配置,总觉得还不是在大量使用XML
可以用Gradle啊,官方的网站就是用Gradle构建的
Zhengtank

引用来自“554330833a”的评论

这个不需要依赖tomcat的吗?
要的,使用的是embed的tomcat
豆浆王子

引用来自“554330833a”的评论

这个不需要依赖tomcat的吗?

引用来自“monolithic”的评论

这个默认是内部嵌入式tomcat,也可以选用jetty
现在用的内部服务器都是轻量级的jetty
飘逸的逸
@RestController的意思就是controller里面的方法都以json格式输出,不用再写什么jackjson配置的了!

我的理解是 @RestController == @Controller + 每个方法加上@ResponseBody
飘逸的逸
关于端口配置,有很多方法,详细参照这里配置的方式
http://stackoverflow.com/questions/21083170/spring-boot-how-to-configure-port
孟飞阳

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

数据库,事物啥的不还是要配置吗?
是的,其他和spring项目开发都一样了,只需要填充逻辑了
孟飞阳

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

关于端口配置,有很多方法,详细参照这里配置的方式
http://stackoverflow.com/questions/21083170/spring-boot-how-to-configure-port
谢谢79
小九酒
Hao
×
孟飞阳
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: