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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容