zoukankan      html  css  js  c++  java
  • 【二】Spring Cloud 入门

     官网

    版本号:

    SpringCloud中文网:https://springcloud.cc

    SpringCloud中文社区:http://springcloud.cn

    以下代码就是Maven父子工程,子工程是SpringBoot实现 的一个小例子

    1、总体介绍

    1)、案例:

    ​ 以一个Dept部门的模块做一个微服务的通用案例Consumer消费者(Client)通过REST调用提供者(Server)提供服务。

    2)、maven的分包分模块架构复习

     

     根据案例拆分成下面几个模块:

     

    2、本次SpringCloud版本

    SpringCloud版本:Dalston.SR1

    SpringBoot版本:1.5.x

    3、构建步骤

    搭建父工程时候一定要注意packaging 是pom ,最后新建完所有工程后父工程会自动加入子模块。

     

    四个工程步骤如下:

    3.1、microservicecloud 父工程

    新建一个Project 的 maven工程

     POM

    <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.everjiankang.springcloud</groupId>
        <artifactId>microservicecloud</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <!--这里一定选的是pom  不要是jar war-->
        <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.2、microservicecloud-api

    对着父工程(microservicecloud)新建一个module

     

     

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

    新建一个Dept的实体类

    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.experimental.Accessors;
    import java.io.Serializable;
    @AllArgsConstructor      //有参构造函数,所有属性
    @NoArgsConstructor       //默认无参数构造函数
    @Data               //get set toString,equals,hashCode,canEquals
    @Accessors(chain = true)    //链式编程
    public class Dept implements Serializable{  //必须序列化
    
        // 主键
        private Long     deptno;
    
        // 部门名称
        private String     dname;
    
        // 来自那个数据库,因为微服务架构可以一个服务对应一个数据库,同一个信息被存储到不同数据库
        private String     db_source;
    
        public Dept(String dname)
        {
            super();
            this.dname = dname;
        }
    }
    3.3、microservicecloud-provider-dept-8001

    建maven步骤可以参考microservicecloud-api建maven的步骤也是依赖父工程。

    此工程目前实现Dept的增删查改操作(springboot+mybatis)

    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>microservicecloud</artifactId>
            <groupId>com.everjiankang.springcloud</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>microservicecloud-provider-dept-8001</artifactId>
    
        <dependencies>
            <!-- 引入自己定义的api通用包,可以使用Dept部门Entity -->
            <dependency>
                <groupId>com.everjiankang.springcloud</groupId>
                <artifactId>microservicecloud-api</artifactId>
                <version>${project.version}</version>
            </dependency>
            <!-- actuator监控信息完善 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <!-- 将微服务provider侧注册进eureka -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </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.everjiankang.springcloud.entity         # 所有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/springclouddb01            # 数据库名称
        username: root
        password: 1010
        dbcp2:
          min-idle: 5                                           # 数据库连接池的最小维持连接数
          initial-size: 5                                       # 初始化连接数
          max-total: 5                                          # 最大连接数
          max-wait-millis: 200                                  # 等待连接获取的最大超时时间

    建表sql语句

    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;

    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>

    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.everjiankang.springcloud.dao.DeptDao">
    
        <select id="findById" resultType="com.everjiankang.springcloud.entity.Dept" parameterType="long">
            select deptno,dname,db_source from dept where deptno=#{deptno};
        </select>
        <select id="findAll" resultType="com.everjiankang.springcloud.entity.Dept">
            select deptno,dname,db_source from dept;
        </select>
        <insert id="addDept" parameterType="com.everjiankang.springcloud.entity.Dept">
            INSERT INTO dept(dname,db_source) VALUES(#{dname},DATABASE());
        </insert>
    
    </mapper>

    DeptDao.java

    package com.everjiankang.springcloud.dao;
    @Mapper
    public interface DeptDao
    {
        public boolean addDept(Dept dept);
    
        public Dept findById(Long id);
    
        public List<Dept> findAll();
    }

    DeptService.java

    package com.everjiankang.springcloud.service;
    public interface DeptService
    {
       public boolean add(Dept dept);
    
       public Dept get(Long id);
    
       public List<Dept> list();
    }

    DeptServiceImpl.java

    
    
    package com.everjiankang.springcloud.service.impl;
    @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();
       }
    
    }

    DeptController.java

    package com.everjiankang.springcloud.controller;
    @RestController
    public class DeptController
    {
        @Autowired
        private DeptService service;
    
        @Autowired
        private DiscoveryClient client;
    
        @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();
        }
    
        
    //    @Autowired
    //    private DiscoveryClient client;
        @RequestMapping(value = "/dept/discovery", method = RequestMethod.GET)
        public Object discovery()
        {
            List<String> list = client.getServices();
            System.out.println("**********" + list);
    
            List<ServiceInstance> srvList = client.getInstances("MICROSERVICECLOUD-DEPT");
            for (ServiceInstance element : srvList) {
                System.out.println(element.getServiceId() + "	" + element.getHost() + "	" + element.getPort() + "	"
                        + element.getUri());
            }
            return this.client;
        }
    
    }

    3.4、microservicecloud-consumer-dept-80
    建maven步骤可以参考microservicecloud-api建maven的步骤也是依赖父工程。

    实现调用microservicecloud-provider-dept-8001的Controller层的接口

    <?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>microservicecloud</artifactId>
            <groupId>com.everjiankang.springcloud</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>
    
        <artifactId>microservicecloud-consumer-dept-80</artifactId>
    
    
        <dependencies>
            <dependency><!-- 自己定义的api -->
                <groupId>com.everjiankang.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>

    YML

    server:
      port: 80

    ConfigBean.java

    package com.everjiankang.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();
        }
    }

    DeptController_Consumer.java

    package com.everjiankang.springcloud.controller;
    
    import java.util.List;
    
    import com.everjiankang.springcloud.entity.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;
    
    @RestController
    public class DeptController_Consumer
    {
    
        private static final String REST_URL_PREFIX = "http://localhost:8001";
    
        /**
         * 使用 使用restTemplate访问restful接口非常的简单粗暴无脑。 (url, requestMap,
         * ResponseBean.class)这三个参数分别代表 REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。
         */
        @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);
        }
    }

    启动类DeptConsumer80_App.java

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

    初步需要得工程构建完成,下篇进入Eureka服务注册与发现。

    源码:https://github.com/hfbin/SpringCloud-Demo

    参考:https://blog.csdn.net/qq_33524158/article/category/7731580

  • 相关阅读:
    oracle length and lengthb
    Oracle对列的操作总结
    配置Spring管理的bean的作用域
    Spring的三种实例化Bean的方式
    编码剖析Spring管理Bean的原理
    SpringMVC学习(十二)——SpringMVC中的拦截器
    SpringMVC学习(十一)——SpringMVC实现Resultful服务
    SpringMVC学习(十)——SpringMVC与前台的json数据交互
    SpringMVC学习(九)——SpringMVC中实现文件上传
    SpringMVC学习(八)——SpringMVC中的异常处理器
  • 原文地址:https://www.cnblogs.com/guchunchao/p/10342085.html
Copyright © 2011-2022 走看看