SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第1张图片
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第2张图片

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第3张图片
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第4张图片
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第5张图片
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第6张图片

Cloud组件停更说明
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第7张图片

一、IDEA新建project工作空间

1、New Project

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第8张图片

2、聚合总工程名字

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第9张图片

3、Maven选版本

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第10张图片

4、工程名字

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第11张图片

5、字符编码

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第12张图片

6、注解生效激活

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第13张图片

7、java编译版本选8

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第14张图片

8、File Type过滤(隐藏不必要的文件和文件夹)

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第15张图片

9、把src文件夹删掉

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第16张图片

10、修改父工程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 https://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>com.atguigu.springcloud</groupId>
  <artifactId>cloud2020</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>pom</packaging>


  <!-- 统一管理jar包版本 -->
  <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>
    <mysql.version>5.1.47</mysql.version>
    <druid.version>1.1.16</druid.version>
    <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
  </properties>

  <!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version  -->
  <dependencyManagement>
    <dependencies>
      <!--spring boot 2.2.2-->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.2.2.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!--spring cloud Hoxton.SR1-->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Hoxton.SR1</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!--spring cloud alibaba 2.1.0.RELEASE-->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>2.1.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>

      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>${
     mysql.version}</version>
      </dependency>
      <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>${
     druid.version}</version>
      </dependency>
      <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>${
     mybatis.spring.boot.version}</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${
     junit.version}</version>
      </dependency>
      <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${
     log4j.version}</version>
      </dependency>
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${
     lombok.version}</version>
        <optional>true</optional>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <fork>true</fork>
          <addResources>true</addResources>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>

packaging的方式是pom,说明这个是总的父工程
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第17张图片

11、Maven中的dependencyManagement和dependencies

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第18张图片
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第19张图片

12、maven中跳过单元测试

点击之后,test出现横线变灰,跳过单元测试,以便节省时间
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第20张图片

13、父工程创建完成执行mvn:install将父工程发布到仓库方便子工程继承

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第21张图片
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第22张图片

二、Rest微服务工程构建

第一个版本结构图
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第23张图片

cloud-provider-payment8001微服务提供者支付Module模块

1、父工程右击,新建一个module

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第24张图片
archetype可以不用选了
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第25张图片
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第26张图片
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第27张图片

2、创建完成后请回到父工程查看pom文件变化

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第28张图片
移出之后
在这里插入图片描述

3、改payment8001的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">
    <parent>
        <artifactId>cloud2020artifactId>
        <groupId>com.atguigu.springcloudgroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>cloud-provider-payment8001artifactId>

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>

        
        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
        dependency>

        
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>druid-spring-boot-starterartifactId>
            <version>1.1.10version>
        dependency>
        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jdbcartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
           <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>

    dependencies>

project>

4、写YML,在resource下,新建application.yaml

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第29张图片

server:
  port: 8001


spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: org.gjt.mm.mysql.Driver
    url: jdbc:mysql://localhost:3306/db2020?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456

mybatis:
  mapperLocations: classpath:mapper/*.xml
  type-aliases-package: com.atguigu.springcloud.entities

5、主启动,新建个启动类

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第30张图片

@SpringBootApplication
public class PaymentMain8001 {
     

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

6、业务类

①、创建数据库,添加数据

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第31张图片

②、新建实体类

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第32张图片

package com.atguigu.springcloud.entities;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment implements Serializable {
     
    private Long id;
    private String serial;
}
注意:这里得装lombok插件(百度)
新建Json封装体CommonResult(前端反馈给后端的)
package com.atguigu.springcloud.entities;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult <T>{
     

    private Integer code;
    private String message;
    private T data;

    public CommonResult(Integer code,String message){
     
        this(code,message,null);
    }
}
③、新建dao

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第33张图片

package com.atguigu.springcloud.dao;

import com.atguigu.springcloud.entities.Payment;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface PaymentDao {
     
    public int create(Payment payment);
    public Payment getPaymentById(@Param("id") Long id);
}
新建mybatis的映射文件PaymentMapper.xml

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第34张图片




<mapper namespace="com.atguigu.springcloud.dao.PaymentDao">

    <resultMap id="BaseResultMap" type="com.atguigu.springcloud.entities.Payment">
        <id column="id" property="id" jdbcType="BIGINT">id>
        <id column="serial" property="serial" jdbcType="VARCHAR">id>
    resultMap>
    
    <insert id="create" parameterType="Payment" useGeneratedKeys="true" keyProperty="id">
        insert into payment(serial) values(#{serial});

    insert>

    <select id="getPaymentById"  parameterType="Long" resultMap="BaseResultMap">
        select * from payment where id=#{id}
    select>
    
mapper>
④、service

接口PaymentService

package com.atguigu.springcloud.service;

import com.atguigu.springcloud.entities.Payment;
import org.apache.ibatis.annotations.Param;

public interface PaymentService {
     

    public int create(Payment payment); //写

    public Payment getPaymentById(@Param("id") Long id);  //读取
}

实现类PaymentServiceImpl

package com.atguigu.springcloud.service.impl;

import com.atguigu.springcloud.dao.PaymentDao;
import com.atguigu.springcloud.entities.Payment;
import com.atguigu.springcloud.service.PaymentService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class PaymentServiceImpl implements PaymentService {
     

    @Resource
    private PaymentDao paymentDao;

    public int create(Payment payment){
     
        return paymentDao.create(payment);
    }

    public Payment getPaymentById( Long id){
     

        return paymentDao.getPaymentById(id);

    }
}
⑤、新建controller
package com.atguigu.springcloud.controller;

import com.atguigu.springcloud.entities.CommonResult;
import com.atguigu.springcloud.entities.Payment;
import com.atguigu.springcloud.service.PaymentService;
import lombok.extern.slf4j.Slf4j;
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 javax.annotation.Resource;

@RestController
@Slf4j
public class PaymentController {
     

    @Resource
    private PaymentService paymentService;

    @PostMapping(value = "/payment/create")
    public CommonResult create(Payment payment){
     
        int result = paymentService.create(payment);
        log.info("*****插入结果:"+result);
        if (result>0){
       //成功
            return new CommonResult(200,"插入数据库成功",result);
        }else {
     
            return new CommonResult(444,"插入数据库失败",null);
        }
    }
    @GetMapping(value = "/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id){
     
        Payment payment = paymentService.getPaymentById(id);
        log.info("*****查询结果:"+payment);
        if (payment!=null){
       //说明有数据,能查询成功
            return new CommonResult(200,"查询成功",payment);
        }else {
     
            return new CommonResult(444,"没有对应记录,查询ID:"+id,null);
        }
    }
}

目录结构
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第35张图片

7、启动PaymentMain8001,进行测试

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第36张图片
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第37张图片
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第38张图片
插入数据
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第39张图片
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第40张图片

三、热部署Devtools

1、在子工程pom.xml添加依赖

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-devtoolsartifactId>
    <scope>runtimescope>
    <optional>trueoptional>
dependency>

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第41张图片

2、在父工程pom.xml添加配置

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.bootgroupId>
      <artifactId>spring-boot-maven-pluginartifactId>
      <configuration>
        <fork>truefork>
        <addResources>trueaddResources>
      configuration>
    plugin>
  plugins>
build>

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第42张图片

3、开启自动编译配置

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第43张图片

4、Update the value of,修改值。

按住快捷键,ctrl+alt+shift+/,弹出弹窗,点击Registry

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第44张图片
下面两个勾住即可
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第45张图片
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第46张图片

5、重启IDEA

重启之后,运行Springboot主类,随便修改java类,稍等片刻,看看控制台有没有日志打出,如果有日志打印出来,就说明修改成功了。
在这里插入图片描述

四、cloud-consumer-order80微服务消费者订单Module模块

1、建工程,跟cloud-provider-payment8001步骤一样

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第47张图片

2、改cloud-consumer-order80的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">
    <parent>
        <artifactId>cloud2020artifactId>
        <groupId>com.atguigu.springcloudgroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>cloud-consumer-order80artifactId>

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>
project>

3、写YML,在resource下,新建application.yaml

server:
  port: 80

4、新建主启动

package com.atguigu.springcloud;

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

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

}

5、创建entities

(将cloud-provider-payment8001工程下的entities包下的两个实体类复制过来)

6、不同服务之间的调用–RestTemplate

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第48张图片

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第49张图片

7、编写config配置类

package com.atguigu.springcloud.config;

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

@Configuration
public class ApplicationContextConfig {
     

    @Bean
    public RestTemplate getRestTemplate(){
     
        return new RestTemplate();
    }

}

8、创建controller

package com.atguigu.springcloud.controller;

import com.atguigu.springcloud.entities.CommonResult;
import com.atguigu.springcloud.entities.Payment;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
@Slf4j
public class OrderController {
     

    public static final String PAYMENT_URL = "http://localhost:8001";

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/consumer/payment/create")
    public CommonResult<Payment>   create(Payment payment){
     
        return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class);  //写操作
    }

    @GetMapping("/consumer/payment/get/{id}")
    public CommonResult<Payment> getPayment(@PathVariable("id") Long id){
     
        return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
    }
}

9、测试

先启动cloud-provider-payment8001
再启动cloud-consumer-order80
测试:http://localhost/consumer/payment/get/2
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第50张图片
http://localhost/consumer/payment/create?serial=12222
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第51张图片

10、补充注解

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第52张图片
目录结构图
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第53张图片

五、工程重构

1、新建module,把共同的部分都放这里

名字叫cloud-api-commons
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第54张图片

2、改cloud-api-commons的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">
    <parent>
        <artifactId>cloud2020artifactId>
        <groupId>com.atguigu.springcloudgroupId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <modelVersion>4.0.0modelVersion>

    <artifactId>cloud-api-commonsartifactId>

    <dependencies>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>

        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>

        
        <dependency>
            <groupId>cn.hutoolgroupId>
            <artifactId>hutool-allartifactId>
            <version>5.1.0version>
        dependency>
    dependencies>

project>

3、创建entities

(将cloud-provider-payment8001工程下的entities包下的两个实体类复制过来)

4、maven命令clean install

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第55张图片
SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第56张图片

SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(1)-- 基础入门_第57张图片
在这里插入图片描述

5、删除entity文件

删除各自的原先有过的entities文件夹,cloud-provider-payment8001,cloud-consumer-order80工程里的entities文件夹都要进行删除

6、在两个工程的pom.xml引入api通用包


<dependency>
     <groupId>com.atguigu.springcloudgroupId>
     <artifactId>cloud-api-commonsartifactId>
     <version>${project.version}version>
 dependency>

7、启动两个工程,测试查询和插入是否成功

周阳老师代码

https://github.com/zzyybs/atguigu_spirngcloud2020

SpringCloud思维导图下载

下一篇:SpringCloud Hoxton版 + SpringCloud alibaba学习笔记(2)-- 服务注册与发现

你可能感兴趣的:(Spring,Cloud)