zoukankan      html  css  js  c++  java
  • springcloud rest微服务案例

    1、整体规划




    2、父工程构建

    <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.atguigu.springcloud</groupId>
      <artifactId>microservicecloud</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <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>
         <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-dependencies</artifactId>
           <version>Dalston.SR1</version>
           <type>pom</type>
           <scope>import</scope>
         </dependency>
         <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-dependencies</artifactId>
           <version>1.5.9.RELEASE</version>
           <type>pom</type>
           <scope>import</scope>
         </dependency>
         <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>5.0.4</version>
         </dependency>
         <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>druid</artifactId>
           <version>1.0.31</version>
         </dependency>
         <dependency>
           <groupId>org.mybatis.spring.boot</groupId>
           <artifactId>mybatis-spring-boot-starter</artifactId>
           <version>1.3.0</version>
         </dependency>
         <dependency>
           <groupId>ch.qos.logback</groupId>
           <artifactId>logback-core</artifactId>
           <version>1.2.3</version>
         </dependency>
         <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>${junit.version}</version>
           <scope>test</scope>
         </dependency>
         <dependency>
           <groupId>log4j</groupId>
           <artifactId>log4j</artifactId>
           <version>${log4j.version}</version>
         </dependency>
       </dependencies>
      </dependencyManagement>
    </project>
    

    3、API公共模块和部门Entity步骤




    <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>com.atguigu.springcloud</groupId>
       <artifactId>microservicecloud</artifactId>
       <version>0.0.1-SNAPSHOT</version>
      </parent>
     
      <artifactId>microservicecloud-api</artifactId><!-- 当前Module我自己叫什么名字 -->
     
      <dependencies><!-- 当前Module需要用到的jar包,按自己需求添加,如果父类已经包含了,可以不用写版本号 -->
       <dependency>
         <groupId>org.projectlombok</groupId>
         <artifactId>lombok</artifactId>
       </dependency>
      </dependencies>
    </project>
    

    4、部门服务提供者


     
    <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>com.atguigu.springcloud</groupId>
       <artifactId>microservicecloud</artifactId>
       <version>0.0.1-SNAPSHOT</version>
      </parent>
     
      <artifactId>microservicecloud-provider-dept-8001</artifactId>
     
      <dependencies>
       <dependency><!-- 引入自己定义的api通用包,可以使用Dept部门Entity -->
         <groupId>com.atguigu.springcloud</groupId>
         <artifactId>microservicecloud-api</artifactId>
         <version>${project.version}</version>
       </dependency>
       <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>
       <dependency>
         <groupId>ch.qos.logback</groupId>
         <artifactId>logback-core</artifactId>
       </dependency>
       <dependency>
         <groupId>org.mybatis.spring.boot</groupId>
         <artifactId>mybatis-spring-boot-starter</artifactId>
       </dependency>
       <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-jetty</artifactId>
       </dependency>
       <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-test</artifactId>
       </dependency>
       <!-- 修改后立即生效,热部署 -->
       <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>springloaded</artifactId>
       </dependency>
       <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-devtools</artifactId>
       </dependency>
      </dependencies>
     
    </project>
    
    
    yml配置
    server:
      port: 8001
      
    mybatis:
      config-location: classpath:mybatis/mybatis.cfg.xml        # mybatis配置文件所在路径
      type-aliases-package: com.atguigu.springcloud.entities    # 所有Entity别名类所在包
      mapper-locations:
      - classpath:mybatis/mapper/**/*.xml                       # mapper映射文件
        
    spring:
       application:
        name: microservicecloud-dept 
       datasource:
        type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
        driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包
        url: jdbc:mysql://localhost:3306/cloudDB01              # 数据库名称
        username: root
        password: 123456
        dbcp2:
          min-idle: 5                                           # 数据库连接池的最小维持连接数
          initial-size: 5                                       # 初始化连接数
          max-total: 5                                          # 最大连接数
          max-wait-millis: 200                                  # 等待连接获取的最大超时时间
     
    
    mybatis.cfg.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
      
    <configuration>
     
      <settings>
       <setting name="cacheEnabled" value="true"/><!-- 二级缓存开启 -->
      </settings>
     
    </configuration>
    
    
    Mysql数据库
    DROP DATABASE IF EXISTS cloudDB01;
    CREATE DATABASE cloudDB01 CHARACTER SET UTF8;
    USE cloudDB01;
    CREATE TABLE dept
    (
      deptno BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
      dname VARCHAR(60),
      db_source   VARCHAR(60)
    );
     
    INSERT INTO dept(dname,db_source) VALUES('开发部',DATABASE());
    INSERT INTO dept(dname,db_source) VALUES('人事部',DATABASE());
    INSERT INTO dept(dname,db_source) VALUES('财务部',DATABASE());
    INSERT INTO dept(dname,db_source) VALUES('市场部',DATABASE());
    INSERT INTO dept(dname,db_source) VALUES('运维部',DATABASE());
     
    SELECT * FROM dept;
    
    
    DeptDao部门接口
    package com.atguigu.springcloud.dao;
     
    import java.util.List;
    import org.apache.ibatis.annotations.Mapper;
    import com.atguigu.springcloud.entities.Dept;
     
    @Mapper
    public interface DeptDao
    {
      public boolean addDept(Dept dept);
     
      public Dept findById(Long id);
     
      public List<Dept> findAll();
    }
     
    
    

    #######7)DeptMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
     
    <mapper namespace="com.atguigu.springcloud.dao.DeptDao">
     
      <select id="findById" resultType="Dept" parameterType="Long">
       select deptno,dname,db_source from dept where deptno=#{deptno}; 
      </select>
    
      <select id="findAll" resultType="Dept">
       select deptno,dname,db_source from dept; 
      </select>
    
      <insert id="addDept" parameterType="Dept">
       INSERT INTO dept(dname,db_source) VALUES(#{dname},DATABASE());
      </insert>
      
    </mapper>
     
    

    8)DeptService接口
    package com.atguigu.springcloud.service;
     
    import java.util.List;
     
    import com.atguigu.springcloud.entities.Dept;
     
    public interface DeptService
    {
      public boolean add(Dept dept);
      public Dept    get(Long id);
      public List<Dept> list();
    }
     
    
    
    9)DeptServiceImpl部门服务接口实现类
    package com.atguigu.springcloud.service.impl;
     
    import java.util.List;
     
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
     
    import com.atguigu.springcloud.dao.DeptDao;
    import com.atguigu.springcloud.entities.Dept;
    import com.atguigu.springcloud.service.DeptService;
     
    @Service
    public class DeptServiceImpl implements DeptService
    {
      @Autowired
      private DeptDao dao ;
      
      @Override
      public boolean add(Dept dept)
      {
       return dao.addDept(dept);
      }
     
      @Override
      public Dept get(Long id)
      {
       return dao.findById(id);
      }
     
      @Override
      public List<Dept> list()
      {
       return dao.findAll();
      }
     
    }
     
    
    
    10)DeptController部门微服务提供者REST
    package com.atguigu.springcloud.controller;
     
    import java.util.List;
     
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
     
    import com.atguigu.springcloud.entities.Dept;
    import com.atguigu.springcloud.service.DeptService;
     
    @RestController
    public class DeptController
    {
      @Autowired
      private DeptService service;
      
      @RequestMapping(value="/dept/add",method=RequestMethod.POST)
      public boolean add(@RequestBody Dept dept)
      {
       return service.add(dept);
      }
      
      @RequestMapping(value="/dept/get/{id}",method=RequestMethod.GET)
      public Dept get(@PathVariable("id") Long id)
      {
       return service.get(id);
      }
      
      @RequestMapping(value="/dept/list",method=RequestMethod.GET)
      public List<Dept> list()
      {
       return service.list();
      }
    }
     
    
    11)主启动类
    package com.atguigu.springcloud;
     
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
     
    @SpringBootApplication
    public class DeptProvider8001_App
    {
      public static void main(String[] args)
      {
       SpringApplication.run(DeptProvider8001_App.class, args);
      }
    }
     
    
    


    5、部门消费者Module




    pom.xml

    <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>com.atguigu.springcloud</groupId>
       <artifactId>microservicecloud</artifactId>
       <version>0.0.1-SNAPSHOT</version>
      </parent>
     
      <artifactId>microservicecloud-consumer-dept-80</artifactId>
      <description>部门微服务消费者</description>
     
      <dependencies>
       <dependency><!-- 自己定义的api -->
         <groupId>com.atguigu.springcloud</groupId>
         <artifactId>microservicecloud-api</artifactId>
         <version>${project.version}</version>
       </dependency> 
       <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <!-- 修改后立即生效,热部署 -->
       <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>springloaded</artifactId>
       </dependency>
       <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-devtools</artifactId>
       </dependency>   
      </dependencies>
     
     
    </project>
    
    

    application.yml

    server:
      port: 80
    

    cfgbeans

    package com.atguigu.springcloud.cfgbeans;
     
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
     
    @Configuration
    public class ConfigBean
    {
        @Bean
        public RestTemplate getRestTemplate()
        {
             return new RestTemplate();
        }
    }
    
    

    RestTemplate提供了多种便捷访问远程Http服务的方法,
    是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集

    官网地址

    https://docs.spring.io/spring-framework/docs/4.3.7.RELEASE/javadoc-api/org/springframework/web/client/RestTemplate.html

    使用
    使用restTemplate访问restful接口非常的简单粗暴无脑。
    (url, requestMap, ResponseBean.class)这三个参数分别代表 REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。

    package com.atguigu.springcloud.controller;
     
    import java.util.List;
     
    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 com.atguigu.springcloud.entities.Dept;
     
    @RestController
    public class DeptController_Consumer
    {
        private static final String REST_URL_PREFIX = "http://localhost:8001";
        
        @Autowired
        private RestTemplate restTemplate;
        
        @RequestMapping(value="/consumer/dept/add")
        public boolean add(Dept dept)
        {
             return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add", dept, Boolean.class);
        }
        
        @RequestMapping(value="/consumer/dept/get/{id}")
        public Dept get(@PathVariable("id") Long id)
        {
             return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get/"+id, Dept.class);
        }
        
        @SuppressWarnings("unchecked")
        @RequestMapping(value="/consumer/dept/list")
        public List<Dept> list()
        {
             return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list", List.class);
        }   
    }
    


  • 相关阅读:
    【Azure 应用服务】在Azure App Service多实例的情况下,如何在应用中通过代码获取到实例名(Instance ID)呢?
    【Azure 应用服务】App Service For Windows 中如何设置代理实现前端静态文件和后端Java Spring Boot Jar包
    【Azure Developer】使用Azure Key Vault 的Key签名后,离线验证的一些参考资料
    【Azure Function】调试 VS Code Javascript Function本地不能运行,报错 Value cannot be null. (Parameter 'provider')问题
    【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(Xms512m Xmx1204m)?
    【Azure API 管理】APIM添加Logtoeventhub的策略后,一些相关APIM与Event Hub的问题
    【Azure API 管理】为调用APIM的请求启用Trace 调试APIM Policy的利器
    【Azure 事件中心】China Azure上是否有Kafka服务简答
    【Azure 应用服务】探索在Azure上设置禁止任何人访问App Service的默认域名(Default URL)
    【Azure 微服务】记一次错误的更新Service Fabric 证书而引发的集群崩溃而只能重建
  • 原文地址:https://www.cnblogs.com/xidianzxm/p/12407831.html
Copyright © 2011-2022 走看看