1 服务提供者

1 新建父工程

1、新建一个Maven工程

图片说明

图片说明

2、删除src

图片说明

3、pom.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>

        <groupId>com.xianhuii</groupId>
        <artifactId>springcloud</artifactId>
        <version>1.0-SNAPSHOT</version>

        <!-- 打包方式:pom -->
        <packaging>pom</packaging>

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.8</maven.compiler.source>
            <maven.compiler.target>1.8</maven.compiler.target>
            <junit.version>4.12</junit.version>
            <log4j.version>1.2.17</log4j.version>
            <lombok.version>1.16.18</lombok.version>
        </properties>

        <dependencyManagement>
            <dependencies>
                <!-- SpringCloud -->
                <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Greenwich.SR1</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>

                <!-- SpringBoot -->
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-dependencies</artifactId>
                    <version>2.1.4.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>

                <!-- 数据库 -->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>8.0.18</version>
                </dependency>

                <!-- 数据源 -->
                <dependency>
                    <groupId>com.alibaba</groupId>
                    <artifactId>druid</artifactId>
                    <version>1.1.21</version>
                </dependency>
                <!-- mybatis -->
                <dependency>
                    <groupId>org.mybatis.spring.boot</groupId>
                    <artifactId>mybatis-springboot-starter</artifactId>
                    <version>1.3.2</version>
                </dependency>

                <!-- junit -->
                <dependency>
                    <groupId>junit</groupId>
                    <artifactId>junit</artifactId>
                    <version>${junit.version}</version>
                </dependency>

                <!-- lombok -->
                <dependency>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok</artifactId>
                    <version>${lombok.version}</version>
                </dependency>

                <!-- Log4j -->
                <dependency>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                    <version>1.2.17</version>
                </dependency>

                <!-- logback -->
                <dependency>
                    <groupId>ch.qos.logback</groupId>
                    <artifactId>logback-core</artifactId>
                    <version>1.2.3</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
    </project>

2 API模块

1、新建模块

图片说明

图片说明

图片说明

图片说明

2、pom

    <?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">
        <parent>
            <artifactId>springcloud</artifactId>
            <groupId>com.xianhuii</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>

        <artifactId>springcloud-api</artifactId>

        <!-- 当前Module需要的依赖,如果父依赖中已经配置了版本,这里就不用写了。 -->
        <dependencies>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
            </dependency>
        </dependencies>    
    </project>

3、创建数据库

图片说明

图片说明

图片说明

图片说明

4、实体类

  • Dept

    package com.xianhuii.springcloud.pojo;
    
    import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    
    import java.io.Serializable;
    
    @JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })
    public class Dept implements Serializable {
        private static final long serialVersionUID = 42L;
    
        private Long deptno;    // 主键
        private String dname;   // 部门名称
        private String dbSource;   // 数据库名称
    
        public Dept() {
        }
    
        public Dept(String dname) {
            this.dname = dname;
        }
    
        public Dept(Long deptno, String dname, String dbSource) {
            this.deptno = deptno;
            this.dname = dname;
            this.dbSource = dbSource;
        }
    
        public Long getDeptno() {
            return deptno;
        }
    
        public void setDeptno(Long deptno) {
            this.deptno = deptno;
        }
    
        public String getDname() {
            return dname;
        }
    
        public void setDname(String dname) {
            this.dname = dname;
        }
    
        public String getdbSource() {
            return dbSource;
        }
    
        public void setdbSource(String dbSource) {
            this.dbSource = dbSource;
        }
    }

3 provider-dept模块

1、创建模块

图片说明

图片说明

图片说明

2、pom

    <?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">
        <parent>
            <artifactId>springcloud</artifactId>
            <groupId>com.xianhuii</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>

        <artifactId>springcloud-provider-dept-8001</artifactId>

        <dependencies>
            <!-- 实体类 -->
            <dependency>
                <groupId>com.xianhuii</groupId>
                <artifactId>springcloud-api</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            <!-- junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </dependency>
            <!-- 数据库 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <!-- 数据源 -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
            </dependency>
            <!-- logback -->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
            </dependency>
            <!-- mybatis -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
            </dependency>
            <!-- test -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-test</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- jetty -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jetty</artifactId>
            </dependency>
            <!-- 热部署 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>
        </dependencies>
    </project>

3、application.yaml

    server:
      port: 8001
    mybatis:
      mapper-locations: classpath:/mybatis/mapper/*.xml
      configuration:
        map-underscore-to-camel-case: true
    spring:
      application:
        name: springcloud-provider-dept
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
        username: root
        password: root

4、DAO层

  • DeptMapper

    package com.xianhuii.springcloud.mapper;
    
    import com.xianhuii.springcloud.pojo.Dept;
    import org.apache.ibatis.annotations.Mapper;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    @Mapper
    @Repository
    public interface DeptMapper {
        boolean addDept(Dept dept);
        Dept queryById(Long id);
        List<Dept> queryAll();
    }
  • DeptMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.xianhuii.springcloud.mapper.DeptMapper">
        <!--boolean addDept(Dept dept)-->
        <insert id="addDept" parameterType="Dept">
            insert into db01 (dname, db_source)
            values (#{dname}, DATABASE())
        </insert>
        <!--Dept queryById(Long id)-->
        <select id="queryById" resultType="Dept" parameterType="Long">
            select * from dept where deptno = #{deptno}
        </select>
        <!--List<Dept> queryAll()-->
        <select id="queryAll" resultType="Dept">
            select * from dept
        </select>
    </mapper>

5、Service层

  • DeptService

    package com.xianhuii.springcloud.service;
    
    import com.xianhuii.springcloud.pojo.Dept;
    
    import java.util.List;
    
    public interface DeptService {
        boolean addDept(Dept dept);
        Dept queryById(Long id);
        List<Dept> queryAll();
    }
  • DeptServiceImpl

    package com.xianhuii.springcloud.service;
    
    import com.xianhuii.springcloud.mapper.DeptMapper;
    import com.xianhuii.springcloud.pojo.Dept;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class DeptServiceImpl implements DeptService {
        @Autowired
        private DeptMapper deptMapper;
    
        @Override
        public boolean addDept(Dept dept) {
            return deptMapper.addDept(dept);
        }
    
        @Override
        public Dept queryById(Long id) {
            return deptMapper.queryById(id);
        }
    
        @Override
        public List<Dept> queryAll() {
            return deptMapper.queryAll();
        }
    }

6、Controller层

  • DeptController

    package com.xianhuii.springcloud.controller;
    
    import com.xianhuii.springcloud.pojo.Dept;
    import com.xianhuii.springcloud.service.DeptService;
    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.PostMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.List;
    
    /**
    
     * 提供RESTful服务
       */
       @RestController
       public class DeptController {
       @Autowired
       private DeptService deptService;
    
       @PostMapping("/dept/add")
       public boolean addDept(Dept dept) {
           return deptService.addDept(dept);
       }
    
       @GetMapping("/dept/get/{id}")
       public Dept getDept(@PathVariable("id") Long id) {
           return deptService.queryById(id);
       }
    
       @GetMapping("/dept/list")
       public List<Dept> queryAll() {
           return deptService.queryAll();
       }
       }

7、启动类

  • DeptProvider_8001

    package com.xianhuii.springcloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class DeptProvider_8001 {
        public static void main(String[] args) {
            SpringApplication.run(DeptProvider_8001.class, args);
        }
    }

2 服务消费者

1 springcloud-consumer-dept-80模块

1、新建模块

图片说明

图片说明

图片说明

2、pom.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">
        <parent>
            <artifactId>springcloud</artifactId>
            <groupId>com.xianhuii</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>

        <artifactId>springcloud-consumer-dept-80</artifactId>

        <dependencies>
            <!-- 实体类 -->
            <dependency>
                <groupId>com.xianhuii</groupId>
                <artifactId>springcloud-api</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            <!-- Web -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- 热部署 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>
        </dependencies>

    </project>

3、application.yaml

    server:
      port: 80

4、ConfigBean

    package com.xianhuii.springcloud.config;

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;

    /**
     * 相当于Spring里的applicationContext.xml
     */
    @Configuration
    public class ConfigBean {
        @Bean
        public RestTemplate getRestTemplate() {
            return new RestTemplate();
        }
    }

5、DeptConsumerController

    package com.xianhuii.springcloud.controller;

    import com.xianhuii.springcloud.pojo.Dept;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;

    import java.util.List;

    /**
     * 消费者:不应该有Service
     * RestTemplate:提供多种便捷访问远程http服务的方法,简单的RESTful服务模板
     * (url, 参数, responseType)
     */
    @RestController
    public class DeptConsumerController {
        @Autowired
        private RestTemplate restTemplate;
        private static final String REST_URL_PREFIX = "http://localhost:8001";

        @RequestMapping("/consumer/dept/get/{id}")
        public Dept get(@PathVariable("id") Long id) {
            return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/" + id, Dept.class);
        }

        @RequestMapping("/consumer/dept/add")
        public boolean add(Dept dept) {
            return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class);
        }

        @RequestMapping("/consumer/dept/list")
        public List<Dept> list() {
            return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class);
        }
    }

6、DeptConsumer_80

    package com.xianhuii.springcloud;

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;

    @SpringBootApplication
    public class DeptConsumer_80 {
        public static void main(String[] args) {
            SpringApplication.run(DeptConsumer_80.class, args);
        }
    }