SpringBoot快速搭建微服务【一】

背景

完成一个用户拼团的新手任务,从零开始搭建一个使用微服务架构并提供REST接口的项目,其中使用到了SpringBoot、Dubbo、Mybatis、ShardingJDBC、zebra、lion、cat等框架和中间件,现在回顾总结并记录成文,方便以后参考及帮助到有需要的同学。

目录

1. 入门

  • 1.1 使用Gradle搭建工程
  • 1.2 SpringBoot入门
  • 1.3 ZooKeeper入门
  • 1.4 集成Dubbo框架
  • 1.5 docker安装MySQL
  • 1.6 集成Mybatis
  • 1.7 集成缓存中间件
  • 1.8 单元测试

2. 进阶

  • 2.1 定制SpringBoot配置
  • 2.2 MySQL主从复制
  • 2.3 接入分库分表中间件
  • 2.4 接入配置中心
  • 2.5 接入监控中心

1.1-1.3 本文
1.4-1.8 第二篇
2.1-2.5 第三篇

一. 使用Gradle搭建工程

1.1 基本概念

构建工具,基本使用跟maven一样,项目构建文件为build.gradle。
主要配置项为项目结构和依赖,不同于maven的是需要每个项目都配置仓库地址。

plugins {
    id 'java'
}

group 'com.xxx'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'redis.clients', name: 'jedis', version:'2.6.0'

    testCompile group: 'junit', name: 'junit', version: '4.12'
}
1.2 注意点
  • 与Java10有兼容性问题,新建、导入项目时使用本地的gradle包,使用gradleW会有问题。
  • dependencies的jar包位置:
C:\Users\XXX\.gradle\caches\modules-2\files-2.1
1.3 打包
  • 创建manifest.yml
---
applications:
- name: gs-rest-service
  memory: 256M
  instances: 1
  host: rest-service
  domain: guides.spring.io
  path: build/libs/gs-rest-service-0.1.0.jar

  • 运行gradle的build命令即可打

二. SpringBoot入门

约定优于配置的思想,太赞了,对于初学者来说非常友好。

传统的spring java Web应用:

  • 配置web.xml
  • 配置applicationContext.xml
  • 将应用打成war包放入应用服务器(Tomcat, Jetty等)中并运行

而在springBoot中,以上3点都不需要

2.1 引入依赖

以gradle为例

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

引入依赖spring-boot-starter-web,包括:

  • spring-web, spring-webmvc(Spring WebMvc框架)
  • spring-* (Spring框架)
  • tomcat-embed-* (内嵌Tomcat容器)
  • jackson (处理json数据)
  • spring-boot-autoconfigure (自动配置功能)
2.2 应用入口
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

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

SpringApplication启动后:

    1. 在内嵌的Tomcat容器中启动一个Spring的应用上下文,监听默认的tcp端口8080(默认约定)
    1. 默认配置Spring WebMvc:
  • 2.1 Servlet容器默认的Context路径是/
  • 2.2 DispatherServlet匹配的路径(servlet-mapping中的url-patterns)是/*
2.3 controller
@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
        return new Greeting(counter.incrementAndGet(),
                            String.format(template, name));
    }
}

默认使用Jackson序列化,返回json数据

2.4 单元测试
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class GreetingControllerTests {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void noParamGreetingShouldReturnDefaultMessage() throws Exception {

        this.mockMvc.perform(get("/greeting")).andDo(print()).andExpect(status().isOk())
                .andExpect(jsonPath("$.content").value("Hello, World!"));
    }

    @Test
    public void paramGreetingShouldReturnTailoredMessage() throws Exception {

        this.mockMvc.perform(get("/greeting").param("name", "Spring Community"))
                .andDo(print()).andExpect(status().isOk())
                .andExpect(jsonPath("$.content").value("Hello, Spring Community!"));
    }

}
2.5 运行测试
  1. 直接run application
  2. 使用gradle的task:application的bootrun启动
  3. 使用gradle的task:build生成jar包,然后java -jar xxx.jar启动

然后打开浏览器,localhost:8080\xxx即可访问

三.ZooKeeper入门

作为分布式服务的注册、调度中心使用【分布式下的多服务管理,就像管理各种习性不一的物种一样,故名ZooKeeper】

3.1 安装
  • 下载tar包,解压
  • 重命名conf文件夹下的初始配置文件为zoo.cfg:指定端口、心跳时间、data文件路径、log文件路径
3.2 运行
  • 启动zk的服务端
  • 可启动zk的客户端测试,或者直接启动dubbo服务注册到zk
  • zkclient
    原文作者:Joseph1453
    原文地址: https://www.jianshu.com/p/203b6ff88bdc
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞