• 二、springcloud微服务测试环境搭建


    版本说明:

    springcloud:Greenwich.SR3
    springboot:2.1.8

    1、构建步骤

    1.1、microservicecloud整体父工程Project

    新建父工程microservicecloud,切记是Packageing是pom模式

    在这里插入图片描述

    此maven project目的:主要是定义POM文件,将后续各个子模块公用的jar包等统一提出来,类似一个抽象父类

    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>
      <groupId>com.jiatp.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.18.10</lombok.version>
      </properties>
      
      <dependencyManagement>
       <dependencies>
         <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-dependencies</artifactId>
           <version>Greenwich.SR3</version>
           <type>pom</type>
           <scope>import</scope>
         </dependency>
         <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-dependencies</artifactId>
           <version>2.1.8.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.1.20</version>
         </dependency>
         <dependency>
           <groupId>org.mybatis.spring.boot</groupId>
           <artifactId>mybatis-spring-boot-starter</artifactId>
           <version>2.1.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>
      
      
      <build>
       <finalName>microservicecloud</finalName>
       <resources>
         <resource> <!--以$ 开头 在src/main/resources目录下的 都能读取 -->
           <directory>src/main/resources</directory>
           <filtering>true</filtering>
         </resource>
       </resources>
       <plugins>
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-resources-plugin</artifactId>
           <configuration>
             <delimiters>
              <delimit>$</delimit>
             </delimiters>
           </configuration>
         </plugin>
       </plugins>
      </build>
      <modules>
      	<module>microservicecloud-api</module>
      	<module>microservicecloud-provider-dept-8001</module>
      	<module>microservicecloud-consumer-dept-80</module>
      </modules>
    </project>
    
    

    1.2、microservicecloud-api公共子模块Module

    右击父工程microservicecloud新建maven module,Packageing是jar模式,创建完成后请回到父工程查看pom文件。

    在这里插入图片描述

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

    新建部门Entity且配合lombok使用

     
    package com.atguigu.springcloud.entities;
     
    import java.io.Serializable;
     
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import lombok.experimental.Accessors;
     
    @SuppressWarnings("serial")
    @NoArgsConstructor
    @Data
    @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;
      }
    }
    
    
    

    右键microservicecloud-api选择Run as ,先mvn clean 后maven install后给其它模块引用,达到通用目的。
    也即需要用到部门实体的话,不用每个工程都定义一份,直接引用本模块即可。

    1.3、microservicecloud-provider-dept-8001微服务提供者Module

    1、新建microservicecloud-provider-dept-8001 提供者Module,同理

    2、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.jiatp.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.jiatp.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>
         <version>1.2.6.RELEASE</version>
       </dependency>
       <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-devtools</artifactId>
       </dependency>
      </dependencies>
    </project>
    
    
    

    3、application.yml

    server:
      port: 8001
      
    mybatis:
      config-location: classpath:mybatis/mybatis.cfg.xml  # mybatis配置文件所在路径
      type-aliases-package: com.jiatp.springcloud.entity  # 扫描此包下的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        # 数据库驱动包
        url: jdbc:mysql://localhost:3306/cloudDB01?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT
        username: root
        password: 123456
        dbcp2:
          min-idle: 5                                     # 数据库连接池的最小维持连接数
          initial-size: 5                                 # 初始化连接数
          max-idle: 5                                     # 最大连接数
    

    4、工程src/main/resources目录下新建mybatis文件夹后新建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>
    

    4、创建cloudDB01 数据库,新建dept表并且插入数据

    5、编写DeptMapper接口

    package com.jiatp.springcloud.dao;
    
    import java.util.List;
    
    import org.apache.ibatis.annotations.Mapper;
    
    import com.jiatp.springcloud.entity.Dept;
    
    @Mapper
    public interface DeptDao {
    	public boolean addDept(Dept dept);
    	 
    	public Dept findById(Long id);
    	 
    	public List<Dept> findAll();
    }
    
    

    6、工程src/main/resources/mybatis目录下新建mapper文件夹后再建DeptMapper.xml

    注意:这里如果采用注解方式,可以直接在DeptMapper接口上直接写sql语句

    <?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.jiatp.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>
    

    7、DeptService和DeptServiceImpl部门服务接口和实现类

    package com.jiatp.springcloud.service;
    
    import java.util.List;
    
    import com.jiatp.springcloud.entity.Dept;
    
    public interface DeptService {
    	public boolean add(Dept dept);
    	public Dept get(Long id);
    	public List<Dept> list();
    }
    //---------------------------------------------
    package com.jiatp.springcloud.service.impl;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import com.jiatp.springcloud.dao.DeptDao;
    import com.jiatp.springcloud.entity.Dept;
    import com.jiatp.springcloud.service.DeptService;
    
    @Service
    public class DeptServiceImpl implements DeptService{
    	
    	@Autowired
    	private DeptDao deptdao;
    
    	@Override
    	public boolean add(Dept dept) {
    		// TODO Auto-generated method stub
    		return deptdao.addDept(dept);
    	}
    
    	@Override
    	public Dept get(Long id) {
    		// TODO Auto-generated method stub
    		return deptdao.findById(id);
    	}
    
    	@Override
    	public List<Dept> list() {
    		// TODO Auto-generated method stub
    		return deptdao.findAll();
    	}
    
    	
    	
    }
    
    

    8、编写controller

    @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();
      }
      
      
      
    }
    

    9、编写DeptProvider8001_App主启动类

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

    在这里插入图片描述

    测试:http://localhost:8001/dept/get/2

    1.4、microservicecloud-consumer-dept-80部门微服务消费者Module

    1、新建microservicecloud-consumer-dept-80,同理

    2、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.jiatp.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.jiatp.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>
         <version>1.2.6.RELEASE</version>
       </dependency>
       <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-devtools</artifactId>
       </dependency>
      </dependencies>
    </project>
    

    3、yml配置

    server:
      port: 80
    

    4、com.jiatp.springcloud包下ConfigBean的编写

    类似spring里面的applicationContext.xml写入的注入Bean

    @Configuration
    public class ConfigBean {  //优化spring,从spring(applicationContext.xml)== @Configuration配置 
    	
    	@Bean
    	@LoadBalanced    //开启负载均衡
        public RestTemplate restTemplate(){
    
            return new RestTemplate();
        }
    

    RestTemplate提供了多种便捷访问远程Http服务的方法, 是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集。 用法:使用restTemplate访问restful接口非常的简单粗暴无脑。
    (url, requestMap, ResponseBean.class)这三个参数分别代表
    REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。

    5、controller编写

    @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);
        }   
    }
     
     
    
    

    6、DeptConsumer80_App主启动类

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

    测试:http://localhost/consumer/dept/list

  • 相关阅读:
    省市区选择器
    查找算法 分享1:顺序查找
    查找算法 分享2:折半(二分)查找
    编程实现对键盘输入的英文名句子进行加密。用加密方法为,当内容为英文字母时其在26字母中的其后三个字母代替该字母,若为其它字符时不变。
    查找算法 分享3:分块查找
    NSMutableDicitionary 的setValue和setObject的区别
    查找算法 分享4:哈希查找
    玩转博客园的5个小技巧
    WCF读书笔记安全:基础知识(身份验证、授权、传输安全)
    北京的房价
  • 原文地址:https://www.cnblogs.com/jatpeo/p/11767462.html
Copyright © 2020-2023  润新知