扯淡:
由上一章可知,项目中每一个微服务都是一个可独立运行的个体,本章将搭建两个最基本的微服务,用户微服务、文章微服务,重点理解微服务工程的结构。
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 文章,关注公众号吧: