SpringCloud>01 - 微服务基本工程搭建

扯淡:

由上一章可知,项目中每一个微服务都是一个可独立运行的个体,本章将搭建两个最基本的微服务,用户微服务、文章微服务,重点理解微服务工程的结构。

springboot、springcloud、docker学习目录:【传送门】  

环境:

JDK : 1.8
开发工具:STS、IDEA(本文采用)
SpringBoot:2.0版本
持久框架:mybatis. springcloud全家桶推荐使用的是data-jpa

SpringCloud版本选择:

截图自官网:

https://spring.io/projects/spring-cloud

springboot2.0.x需要使用Finchley版本的cloud,特别有意思的是cloud的版本号是按照伦敦地铁站名A~Z编排的。

小版本:
SNAPSHOT: 快照版本,随时可能修改
M: MileStone,M1表示第1个里程碑版本,一般同时标注PRE,表示预览版版。
SR: Service Release,SR1表示第1个正式版本,一般同时标注GA:(GenerallyAvailable),表示稳定版本。

数据库创建:

1、tb_user 表:

CREATE TABLE `tb_user` (
  `id` varchar(36) NOT NULL,
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `password` varchar(32) NOT NULL COMMENT '密码,加密存储',
  `phone` varchar(20) DEFAULT NULL COMMENT '注册手机号',
  `email` varchar(50) DEFAULT NULL COMMENT '注册邮箱',
  `name` varchar(50) DEFAULT NULL COMMENT '真实姓名',
  `status` varchar(1) DEFAULT NULL COMMENT '使用状态(Y正常 N非正常)',
  `sex` varchar(1) DEFAULT '0' COMMENT '性别,1男,0女',
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户表';

2、tb_article 表:

CREATE TABLE `tb_article` (
  `id` varchar(36) NOT NULL COMMENT 'ID',
  `userid` varchar(20) DEFAULT NULL COMMENT '用户ID',
  `title` varchar(100) DEFAULT NULL COMMENT '标题',
  `content` text COMMENT '文章正文',
  `state` varchar(1) DEFAULT NULL COMMENT '审核状态',
  `url` varchar(100) DEFAULT NULL COMMENT 'URL',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='文章';

工程搭建:

1、父工程搭建 springcloud_parent

1.1、工程创建

create new project ~> maven ~> next ~> artifactId、groupId

父工程仅做管理,删除 src 。

1.2、pom 文件中添加依赖:

    <packaging>pom</packaging>
    <name>springcloud_parent</name>
    <description>springcloud 入门、组件使用</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.7.RELEASE</version>
        <relativePath/>
    </parent>

    <!-- 锁定版本 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <!-- spingboot 2.0.x 需要使用 Finchley 版本的 cloud -->
                <version>Finchley.SR2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
    <!-- 仓库-->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
    <!-- 插件下载 -->
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>
​

2、公共模块搭建 springcloud_common 

2.1、New Module:

公共模块用于存放各个微服务共用的工具类等。

3、用户微服务 springcloud_user

3.1、工程创建,参考springcloud_common

3.2、pom 文件添加以下依赖:

    <dependencies>
        <!-- 依赖 springcloud_common -->
        <dependency>
            <groupId>com.coolron</groupId>
            <artifactId>springcloud_common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

3.4、application.yml

server:
  port: 8081
spring:
  application:
    name: springcloud-user # 服务名称 横杠不可以是下划线

  datasource:
    url: jdbc:mysql://127.0.0.1:3306/springclouddb?useSSL=false&useUnicode=true&characterEncoding=utf8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
mybatis:
  type-aliases-package: com.coolron.user.domain
  mapper-locations: classpath:mapping/user/*.xml

yml 和 properties 一样,只是格式不同而已,注意缩进和冒号后面的空格。

3.5、启动类创建:

​/**
 * @Auther: xf
 * @Date: 2018/12/18 20:24
 * @Description: 用户微服务
 */
@MapperScan("com.coolron.user.dao")
@SpringBootApplication
public class UserApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserApplication.class);
    }
}

3.6、controller、service、dao 等

​@RestController
@RequestMapping(value = "/user")
public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping("/list")
    public ApiResult list(){
        List<User> list = userService.list();
        return ApiResult.ok(list);
    }
    @GetMapping("/{id}")
    public ApiResult getInfo(@PathVariable(value = "id") String id){
        User user = userService.getInfo(id);
        return ApiResult.ok(user);
    }
}

3.7、启动用户微服务,测试:

请求:http://localhost:8081/user/list

请求:http://localhost:8081/user/1

4、文章微服务springcloud_article

参考用户微服务。

4.1、启动类扫描包改变

@MapperScan("com.coolron.article.dao")
@SpringBootApplication
public class ArticleApplication {  
     ...
}

4.2、application.yml 

微服务名、mybatis别名、mapper位置改变

server:
  port: 8082
spring:
  application:
    name: springcloud-article # 服务名称 横杠不可以是下划线

  datasource:
    url: jdbc:mysql://127.0.0.1:3306/springclouddb?useSSL=false&useUnicode=true&characterEncoding=utf8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

mybatis:
  type-aliases-package: com.coolron.article.domain
  mapper-locations: classpath:mapping/article/*.xml

4.3、ArticleController:

@RestController
@RequestMapping("/article")
public class ArticleController {
    @Autowired
    private ArticleService articleService;

    @GetMapping("/list")
    public ApiResult list(){
        List<Article> list = articleService.list();
        return ApiResult.ok(list);
    }
    @GetMapping("/{id}")
    public ApiResult getInfo(@PathVariable(value = "id") String id){
        Article article = articleService.getInfo(id);
        return ApiResult.ok(article);
    }
}​

4.4、测试:

请求:http://localhost:8082/article/list

至此,用户微服务和文章微服务搭建完毕。

代码地址:

https://gitee.com/cpla026/springcloud/tree/master/springcloud_parent/springcloud_article

https://gitee.com/cpla026/springcloud/tree/master/springcloud_parent/springcloud_user

总结:

用户微服务和文章微服务实际就是两个独立的单体工程,非常简单,重点理解什么是微服务及微服务工程结构。


个人学习分享
更多 springboot、springcloud、docker 文章,关注公众号吧:

猜你喜欢

转载自blog.csdn.net/cp026la/article/details/86605128
今日推荐