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

  • 相关阅读:
    Changing Icon File Of Push Button At Runtime In Oracle Forms 6i
    Set Font Properties On Mouse Hover Of Push Button And Text Items At Run time In Oracle Forms
    Change An Item Property Using Set_Item_Property In Oracle Forms
    Calling / Running a report in Oracle forms 10g / 11g
    Change Or Set Report Object Property At Run Time In Oracle Forms Using Set_Report_Object_Property Command
    Refresh / Updating a form screen in Oracle D2k Forms 6i
    Know How And When To Use System.Message_Level To Control Messages In Oracle Forms
    Perform Cut Copy Paste Operations Using Cut_Region Copy_Region Paste_Region Commands In Oracle Forms
    CHECKBOX_CHECKED built-in in Oracle D2k Forms
    Limiting To Select Only 5 Check Boxes Out Of Ten In Oracle Forms
  • 原文地址:https://www.cnblogs.com/guchunchao/p/10342085.html
Copyright © 2011-2022 走看看