上章节介绍了如何搭建订单服务,下面将继续搭建用户服务。
创建 cloud_user 数据库,执行如下 SQL:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '姓名',
`age` int(11) NULL DEFAULT NULL COMMENT '年龄',
`email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '电子邮件',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_user
-- ----------------------------
INSERT INTO `t_user` VALUES (1, '张珊', 27, 'zhangs@gmail.com');
INSERT INTO `t_user` VALUES (2, '李斯', 32, 'mrli@163.com');
INSERT INTO `t_user` VALUES (3, '王武', 29, 'w2u@sina.com');
INSERT INTO `t_user` VALUES (4, '赵柳', 38, 'zhaoliu@sina.com');
SET FOREIGN_KEY_CHECKS = 1;运行 SQL 后,数据库中仅存在 t_user 表,如下图:

该表的内容如下图:

项目依赖如下,从父项目继承依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.hxstrive.springcloud</groupId>
<artifactId>springcloud_learn</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<artifactId>service_user</artifactId>
<name>service_user</name>
<description>service_user</description>
<dependencies>
<!-- 从父项目继承版本信息 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>下面 bootstrap.yml 配置文件内容(注意配置文件名称):
server:
port: 8081
spring:
application:
name: service-order
# datasource
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/cloud_order?useUnicode=true&characterEncoding=utf-8
username: root
password: aaaaaa
cloud:
# nacos 配置
nacos:
# nacos 服务发现
discovery:
server-addr: localhost:8848
username: nacos
password: nacos
# nacos 服务配置
config:
server-addr: localhost:8848
username: nacos
password: nacos
refresh-enabled: true
file-extension: yaml
group: DEFAULT_GROUP
logging:
level:
root: warnpackage com.hxstrive.springcloud.user.entity;
/**
* 用户实体
* @author hxstrive.com
*/
public class UserEntity {
/** 用户ID */
private int id;
/** 姓名 */
private String name;
/** 年龄 */
private int age;
/** 电子邮件地址 */
private String email;
// 省略 setter 和 getter
}package com.hxstrive.springcloud.user.mapper;
import com.hxstrive.springcloud.user.entity.UserEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
/**
* 用户 Mapper
* @author hxstrive.com
*/
@Mapper
public interface UserMapper {
@Select("select * from t_user where id=#{userId}")
UserEntity getUser(int userId);
}package com.hxstrive.springcloud.user.service;
import com.hxstrive.springcloud.user.entity.UserEntity;
import com.hxstrive.springcloud.user.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 用户服务
* @author hxstrive.com
*/
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public UserEntity getUser(int userId) {
return userMapper.getUser(userId);
}
}package com.hxstrive.springcloud.user.controller;
import com.hxstrive.springcloud.user.entity.UserEntity;
import com.hxstrive.springcloud.user.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 用户 Controller
* @author hxstrive.com
*/
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{id}")
public UserEntity getUser(@PathVariable("id") int id) {
System.out.println("## UserController.getUser() id=" + id);
return userService.getUser(id);
}
}package com.hxstrive.springcloud.user;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class UserApplication {
public static void main(String[] args) {
SpringApplication.run(UserApplication.class, args);
}
}当我们完成上面用户和订单服务的创建后,分别启动服务,此时查看 nacos,服务信息如下图:

使用浏览器验证服务:
(1)访问 http://localhost:8081/order/1 地址,获取订单信息,如下:
{
"id": 1,
"title": "海尔冰箱335升 法式多门四开门冰箱 一级能效 风冷无霜 双变频省电 节能净味 家用大容量超薄变温 多门推荐 BCD-335WLHFD9DS9",
"num": 1,
"price": 2598,
"userId": 1,
"user": {
"id": 1,
"name": "张珊",
"age": 27,
"email": "zhangs@gmail.com"
}
}注意,上面的 user 对象是通过 RestTemplate 接口调用从用户服务获得。
(2)访问 http://localhost:8082/user/1 地址,获取用户信息,如下:
{
"id": 1,
"name": "张珊",
"age": 27,
"email": "zhangs@gmail.com"
}