zoukankan      html  css  js  c++  java
  • (子文章)Spring Boot搭建两个微服务模块

    详细演示user-service的搭建过程,user-consume的搭建过程类似,只说明有区别的部分。
    这两个项目没有构成完整的微服务demo,完整的需要去看主文章。

    1. 创建工程和user-service模块

    1.1 创建空工程

    1.2 在空工程里新建Module

    一个Module就是一个项目,一个微服务。

    选择Spring Initializr,JDK1.8及以上,Default URL(访问这个URL:https://start.spring.io也可以在页面上选择模块构建并下载工程)

    填写Group和Artifact信息

    选择模块

    由于我们要提供接口,查询并返回数据,所以需要Web和SQL的相应模块。

    点Next->Finish完成。

    项目结构如图所示:

    • UserServiceApplication: 启动里面的main函数就能启动这个项目。
    • resources:里面放静态资源,static放的一般是图片,脚本和CSS;templates是前端静态化页面的默认存放位置(本例不涉及页面静态化)。
    • application.yml:SpringBoot项目的整体配置文件,可以配置包括JDBC、连接池等属性。这个文件默认后缀名是properties,可以修改为yml,yml的语法更简洁。
    • pom.xml:这是一个maven项目,里面引入了项目所需的各种依赖。

    2. 配置文件

    2.1 pom.xml

    除了自动生成的部分,我还添加了三个依赖

    • javax.persistence-api:java持久层API,用于pojo类的@Table等注解,关联实体类和数据库表
    • lombok: 用于pojo类的@Data注解,用于自动生成get,set方法。
    • mapper-spring-boot-starter: 通用mapper,继承通用mapper后能直接使用其包含的查询方法查询,不必再写xml文件。
    <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.5.RELEASE</version>
            <relativePath/>
        </parent>
        <groupId>com.vplus.demo</groupId>
        <artifactId>user-service</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>user-service</name>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</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>
                <version>2.0.1</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!--*******************自己添加的依赖开始*****************-->
            <dependency>
                <groupId>javax.persistence</groupId>
                <artifactId>javax.persistence-api</artifactId>
                <version>2.2</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.8</version>
            </dependency>
            <dependency>
                <groupId>tk.mybatis</groupId>
                <artifactId>mapper-spring-boot-starter</artifactId>
                <version>2.0.2</version>
            </dependency>
            <!--*******************自己添加的依赖结束*****************-->
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

    2.2 application.yml

    • SpringBoot里面自带tomcat,配置端口为8081即可使用
    • 自带hikariCP数据源,直接配置即可。我的mysql版本为5.7,url属性需要加上useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC来解决时区和乱码问题。
    • mybatis只需要指明pojo类在哪里即可。
    server:
      port: 8081
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/你的数据库名?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
        username: 你的数据库用户名
        password: 你的数据库用户密码
        hikari:
          maximum-pool-size: 20
          minimum-idle: 10
    mybatis:
      type-aliases-package: com.vplus.demo.userservice.pojo
    

    3. 代码

    3.1 代码目录结构

    3.2 UserController

    @RestController注解相当于@Controller注解外加给所有方法加上@ResponseBody注解。表现为:每个方法返回的都是json字符串。

    @RestController
    @RequestMapping("user")
    public class UserController {
        @Autowired
        private UserService userService;
    
        @GetMapping("/{id}")
        public User queryById(@PathVariable("id") Long id) {
            return this.userService.queryById(id);
        }
    }
    

    3.3 UserService

    为了简便,不再写service接口和Impl实现了,直接合成一个Service类。

    @Service
    public class UserService {
        @Autowired
        private UserMapper userMapper;
    
        public User queryById(Long id) {
            return this.userMapper.selectByPrimaryKey(id);
        }
    }
    
    

    3.4 UserMapper

    继承通用Mapper,由于@Mapper注解的存在,和通用Mapper重名,因此通用Mapper写成全类名tk.mybatis.mapper.common.Mapper<User>

    @Mapper
    public interface UserMapper extends tk.mybatis.mapper.common.Mapper<User>{
    }
    

    3.5 启动

    启动UserServiceApplication的main函数,访问http://localhost:8081/user/20即可查到ID为20的用户。

    至此user-service模块搭建完成

    4. 创建user-consume模块

    搭建流程和创建user-service模块一致,需要注意一点:选择依赖时只选Web模块,不需要SQL模块。因为数据是从user-service提供的接口里面读的。

    添加第二个模块后,Idea会提示你是否显示Run DashBoard,要选择显示。

    4.1 配置文件

    pom.xml

    • 我们使用RestTemplate请求接口,底层Http客户端使用Okhttp实现,所以添加其依赖。
    • pojo类需要@Data注解生成get/set方法,添加lombok依赖。
    省略......
    </dependencies>
    		省略.......
            <!--添加OKhttp支持-->
            <dependency>
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp</artifactId>
                <version>3.9.0</version>
            </dependency>
    		<dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
    </dependencies>
    省略......
    

    application.yml

    配置项目的tomcat端口为8082

    server:
      port: 8082
    

    4.2 代码

    项目结构

    UserConsumeApplication

    注册RestTemplate

    @SpringBootApplication
    public class UserConsumeApplication {
        @Bean
        public RestTemplate restTemplate() {
            return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
        }
        public static void main(String[] args) {
            SpringApplication.run(UserConsumeApplication.class, args);
        }
    }
    

    User

    这个项目还需要User类来承载数据,但不需要关联数据表了,所以@Table注解就不用写了

    @Data
    public class User implements Serializable {
        private static final long serialVersionUID = 1L;
        private Long id;
        private String username;
        private String phone;
    }
    

    ConsumerController

    @RestController
    @RequestMapping("consume")
    public class ConsumerController {
        @Autowired
        private UserService userService;
        @GetMapping
        public List<User> consume(@RequestParam("ids") List<Long> ids) {
            return this.userService.queryUserByIds(ids);
        }
    }
    

    UserService

    @Service
    public class UserService {
        @Autowired
        private UserDao userDao;
        public List<User> queryUserByIds(List<Long> ids){
            List<User> users = new ArrayList<>();
            for (Long id : ids) {
                User user = this.userDao.queryUserById(id);
                users.add(user);
            }
            return users;
        }
    }
    

    UserDao

    这里的Dao并不是“真正的Dao”,不是从数据库查询数据,而是使用RestTemplate访问远程的rest接口。

    @Component
    public class UserDao {
        @Autowired
        private RestTemplate restTemplate;
    
        public User queryUserById(Long id){
            String url = "http://localhost:8081/user/" + id;
            return this.restTemplate.getForObject(url, User.class);
        }
    }
    

    4.3 启动运行

    从Run DashBoard中依次启动两个项目。访问:http://localhost:8082/consume?ids=20,21即可查询id=20和21的两个用户的信息

    5. 参考资料

    • 黑马培训的乐优商城笔记
    • spring官网
  • 相关阅读:
    测试72.思维好题
    pbds:STL平衡树
    测试69。这场因为轻视少了很多分。
    C++ 中的四种类型转换
    C++ 中的static关键字
    codeforces 1269 E K Integers
    P4556 [Vani有约会]雨天的尾巴 (线段树合并)
    P3521 [POI2011]ROT-Tree Rotations (线段树合并)
    codeforces 600E E. Lomsat gelral (线段树合并)
    线段树合并的一些题
  • 原文地址:https://www.cnblogs.com/qianbixin/p/10936464.html
Copyright © 2011-2022 走看看