Gateway 用户服务

上章节介绍了如何搭建订单服务,下面将继续搭建用户服务。

用户服务

数据库

创建 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 表,如下图:

Gateway 用户服务

该表的内容如下图:

Gateway 用户服务

Maven依赖

项目依赖如下,从父项目继承依赖:

<?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: warn

服务代码

UserEntity.java 实体类

package 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
}

UserMapper.java 接口

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);

}

UserService.java 服务类

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);
   }

}

UserController.java 控制器

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);
   }

}

UserApplication.java 启动类

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,服务信息如下图:

Gateway 用户服务

使用浏览器验证服务:

(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"
}
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号