由上一章可知,项目中每一个微服务都是一个可独立运行的个体,本章将搭建两个最基本的微服务,用户微服务、文章微服务,重点理解微服务工程的结构。
个人学习总结:
链接:【springboot、springcloud、docker 等,学习目录】
JDK : 1.8
开发工具:STS、IDEA(本文采用)
SpringBoot:2.0版本
持久框架:mybatis. springcloud全家桶推荐使用的是data-jpa
截图自官网:
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 文件中添加依赖:
pom
springcloud_parent
springcloud 入门、组件使用
org.springframework.boot
spring-boot-starter-parent
2.0.7.RELEASE
org.springframework.cloud
spring-cloud-dependencies
Finchley.SR2
pom
import
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.projectlombok
lombok
spring-snapshots
Spring Snapshots
https://repo.spring.io/snapshot
true
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false
spring-snapshots
Spring Snapshots
https://repo.spring.io/snapshot
true
spring-milestones
Spring Milestones
https://repo.spring.io/milestone
false
2、公共模块搭建 springcloud_common
2.1、New Module:
公共模块用于存放各个微服务共用的工具类等。
3、用户微服务 springcloud_user
3.1、工程创建,参考springcloud_common
3.2、pom 文件添加以下依赖:
com.coolron
springcloud_common
1.0-SNAPSHOT
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.2
mysql
mysql-connector-java
runtime
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 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 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 文章,关注公众号吧: