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

港控/mmm° 2022-12-28 00:48 264阅读 0赞

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Cloud组件停更说明
在这里插入图片描述

一、IDEA新建project工作空间

1、New Project

在这里插入图片描述

2、聚合总工程名字

在这里插入图片描述

3、Maven选版本

在这里插入图片描述

4、工程名字

在这里插入图片描述

5、字符编码

在这里插入图片描述

6、注解生效激活

在这里插入图片描述

7、java编译版本选8

在这里插入图片描述

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

在这里插入图片描述

9、把src文件夹删掉

在这里插入图片描述

10、修改父工程pom.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.atguigu.springcloud</groupId>
  6. <artifactId>cloud2020</artifactId>
  7. <version>1.0-SNAPSHOT</version>
  8. <packaging>pom</packaging>
  9. <!-- 统一管理jar包版本 -->
  10. <properties>
  11. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  12. <maven.compiler.source>1.8</maven.compiler.source>
  13. <maven.compiler.target>1.8</maven.compiler.target>
  14. <junit.version>4.12</junit.version>
  15. <log4j.version>1.2.17</log4j.version>
  16. <lombok.version>1.16.18</lombok.version>
  17. <mysql.version>5.1.47</mysql.version>
  18. <druid.version>1.1.16</druid.version>
  19. <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
  20. </properties>
  21. <!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version -->
  22. <dependencyManagement>
  23. <dependencies>
  24. <!--spring boot 2.2.2-->
  25. <dependency>
  26. <groupId>org.springframework.boot</groupId>
  27. <artifactId>spring-boot-dependencies</artifactId>
  28. <version>2.2.2.RELEASE</version>
  29. <type>pom</type>
  30. <scope>import</scope>
  31. </dependency>
  32. <!--spring cloud Hoxton.SR1-->
  33. <dependency>
  34. <groupId>org.springframework.cloud</groupId>
  35. <artifactId>spring-cloud-dependencies</artifactId>
  36. <version>Hoxton.SR1</version>
  37. <type>pom</type>
  38. <scope>import</scope>
  39. </dependency>
  40. <!--spring cloud alibaba 2.1.0.RELEASE-->
  41. <dependency>
  42. <groupId>com.alibaba.cloud</groupId>
  43. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  44. <version>2.1.0.RELEASE</version>
  45. <type>pom</type>
  46. <scope>import</scope>
  47. </dependency>
  48. <dependency>
  49. <groupId>mysql</groupId>
  50. <artifactId>mysql-connector-java</artifactId>
  51. <version>${ mysql.version}</version>
  52. </dependency>
  53. <dependency>
  54. <groupId>com.alibaba</groupId>
  55. <artifactId>druid</artifactId>
  56. <version>${ druid.version}</version>
  57. </dependency>
  58. <dependency>
  59. <groupId>org.mybatis.spring.boot</groupId>
  60. <artifactId>mybatis-spring-boot-starter</artifactId>
  61. <version>${ mybatis.spring.boot.version}</version>
  62. </dependency>
  63. <dependency>
  64. <groupId>junit</groupId>
  65. <artifactId>junit</artifactId>
  66. <version>${ junit.version}</version>
  67. </dependency>
  68. <dependency>
  69. <groupId>log4j</groupId>
  70. <artifactId>log4j</artifactId>
  71. <version>${ log4j.version}</version>
  72. </dependency>
  73. <dependency>
  74. <groupId>org.projectlombok</groupId>
  75. <artifactId>lombok</artifactId>
  76. <version>${ lombok.version}</version>
  77. <optional>true</optional>
  78. </dependency>
  79. </dependencies>
  80. </dependencyManagement>
  81. <build>
  82. <plugins>
  83. <plugin>
  84. <groupId>org.springframework.boot</groupId>
  85. <artifactId>spring-boot-maven-plugin</artifactId>
  86. <configuration>
  87. <fork>true</fork>
  88. <addResources>true</addResources>
  89. </configuration>
  90. </plugin>
  91. </plugins>
  92. </build>
  93. </project>

packaging的方式是pom,说明这个是总的父工程
在这里插入图片描述

11、Maven中的dependencyManagement和dependencies

在这里插入图片描述
在这里插入图片描述

12、maven中跳过单元测试

点击之后,test出现横线变灰,跳过单元测试,以便节省时间
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

二、Rest微服务工程构建

第一个版本结构图
在这里插入图片描述

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

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

在这里插入图片描述
archetype可以不用选了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
移出之后
在这里插入图片描述

3、改payment8001的pom.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  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">
  3. <parent>
  4. <artifactId>cloud2020</artifactId>
  5. <groupId>com.atguigu.springcloud</groupId>
  6. <version>1.0-SNAPSHOT</version>
  7. </parent>
  8. <modelVersion>4.0.0</modelVersion>
  9. <artifactId>cloud-provider-payment8001</artifactId>
  10. <dependencies>
  11. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
  12. <dependency>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-starter-web</artifactId>
  15. </dependency>
  16. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-actuator</artifactId>
  20. </dependency>
  21. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
  22. <dependency>
  23. <groupId>org.mybatis.spring.boot</groupId>
  24. <artifactId>mybatis-spring-boot-starter</artifactId>
  25. </dependency>
  26. <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
  27. <dependency>
  28. <groupId>com.alibaba</groupId>
  29. <artifactId>druid-spring-boot-starter</artifactId>
  30. <version>1.1.10</version>
  31. </dependency>
  32. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  33. <dependency>
  34. <groupId>mysql</groupId>
  35. <artifactId>mysql-connector-java</artifactId>
  36. </dependency>
  37. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc -->
  38. <dependency>
  39. <groupId>org.springframework.boot</groupId>
  40. <artifactId>spring-boot-starter-jdbc</artifactId>
  41. </dependency>
  42. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
  43. <dependency>
  44. <groupId>org.springframework.boot</groupId>
  45. <artifactId>spring-boot-devtools</artifactId>
  46. <scope>runtime</scope>
  47. <optional>true</optional>
  48. </dependency>
  49. <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
  50. <dependency>
  51. <groupId>org.projectlombok</groupId>
  52. <artifactId>lombok</artifactId>
  53. <optional>true</optional>
  54. </dependency>
  55. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
  56. <dependency>
  57. <groupId>org.springframework.boot</groupId>
  58. <artifactId>spring-boot-starter-test</artifactId>
  59. <scope>test</scope>
  60. </dependency>
  61. </dependencies>
  62. </project>

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

在这里插入图片描述

  1. server:
  2. port: 8001
  3. spring:
  4. application:
  5. name: cloud-payment-service
  6. datasource:
  7. type: com.alibaba.druid.pool.DruidDataSource
  8. driver-class-name: org.gjt.mm.mysql.Driver
  9. url: jdbc:mysql://localhost:3306/db2020?useUnicode=true&characterEncoding=utf-8&useSSL=false
  10. username: root
  11. password: 123456
  12. mybatis:
  13. mapperLocations: classpath:mapper/*.xml
  14. type-aliases-package: com.atguigu.springcloud.entities

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

在这里插入图片描述

  1. @SpringBootApplication
  2. public class PaymentMain8001 {
  3. public static void main(String[] args) {
  4. SpringApplication.run(PaymentMain8001.class, args);
  5. }
  6. }

6、业务类

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

在这里插入图片描述

②、新建实体类

在这里插入图片描述

  1. package com.atguigu.springcloud.entities;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. import java.io.Serializable;
  6. @Data
  7. @AllArgsConstructor
  8. @NoArgsConstructor
  9. public class Payment implements Serializable {
  10. private Long id;
  11. private String serial;
  12. }
注意:这里得装lombok插件(百度)
新建Json封装体CommonResult(前端反馈给后端的)
  1. package com.atguigu.springcloud.entities;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. @Data
  6. @AllArgsConstructor
  7. @NoArgsConstructor
  8. public class CommonResult <T>{
  9. private Integer code;
  10. private String message;
  11. private T data;
  12. public CommonResult(Integer code,String message){
  13. this(code,message,null);
  14. }
  15. }
③、新建dao

在这里插入图片描述

  1. package com.atguigu.springcloud.dao;
  2. import com.atguigu.springcloud.entities.Payment;
  3. import org.apache.ibatis.annotations.Mapper;
  4. import org.apache.ibatis.annotations.Param;
  5. @Mapper
  6. public interface PaymentDao {
  7. public int create(Payment payment);
  8. public Payment getPaymentById(@Param("id") Long id);
  9. }
新建mybatis的映射文件PaymentMapper.xml

在这里插入图片描述

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.atguigu.springcloud.dao.PaymentDao">
  4. <resultMap id="BaseResultMap" type="com.atguigu.springcloud.entities.Payment">
  5. <id column="id" property="id" jdbcType="BIGINT"></id>
  6. <id column="serial" property="serial" jdbcType="VARCHAR"></id>
  7. </resultMap>
  8. <insert id="create" parameterType="Payment" useGeneratedKeys="true" keyProperty="id">
  9. insert into payment(serial) values(#{serial});
  10. </insert>
  11. <select id="getPaymentById" parameterType="Long" resultMap="BaseResultMap">
  12. select * from payment where id=#{id}
  13. </select>
  14. </mapper>
④、service

接口PaymentService

  1. package com.atguigu.springcloud.service;
  2. import com.atguigu.springcloud.entities.Payment;
  3. import org.apache.ibatis.annotations.Param;
  4. public interface PaymentService {
  5. public int create(Payment payment); //写
  6. public Payment getPaymentById(@Param("id") Long id); //读取
  7. }

实现类PaymentServiceImpl

  1. package com.atguigu.springcloud.service.impl;
  2. import com.atguigu.springcloud.dao.PaymentDao;
  3. import com.atguigu.springcloud.entities.Payment;
  4. import com.atguigu.springcloud.service.PaymentService;
  5. import org.springframework.stereotype.Service;
  6. import javax.annotation.Resource;
  7. @Service
  8. public class PaymentServiceImpl implements PaymentService {
  9. @Resource
  10. private PaymentDao paymentDao;
  11. public int create(Payment payment){
  12. return paymentDao.create(payment);
  13. }
  14. public Payment getPaymentById( Long id){
  15. return paymentDao.getPaymentById(id);
  16. }
  17. }
⑤、新建controller
  1. package com.atguigu.springcloud.controller;
  2. import com.atguigu.springcloud.entities.CommonResult;
  3. import com.atguigu.springcloud.entities.Payment;
  4. import com.atguigu.springcloud.service.PaymentService;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.PathVariable;
  8. import org.springframework.web.bind.annotation.PostMapping;
  9. import org.springframework.web.bind.annotation.RestController;
  10. import javax.annotation.Resource;
  11. @RestController
  12. @Slf4j
  13. public class PaymentController {
  14. @Resource
  15. private PaymentService paymentService;
  16. @PostMapping(value = "/payment/create")
  17. public CommonResult create(Payment payment){
  18. int result = paymentService.create(payment);
  19. log.info("*****插入结果:"+result);
  20. if (result>0){ //成功
  21. return new CommonResult(200,"插入数据库成功",result);
  22. }else {
  23. return new CommonResult(444,"插入数据库失败",null);
  24. }
  25. }
  26. @GetMapping(value = "/payment/get/{id}")
  27. public CommonResult getPaymentById(@PathVariable("id") Long id){
  28. Payment payment = paymentService.getPaymentById(id);
  29. log.info("*****查询结果:"+payment);
  30. if (payment!=null){ //说明有数据,能查询成功
  31. return new CommonResult(200,"查询成功",payment);
  32. }else {
  33. return new CommonResult(444,"没有对应记录,查询ID:"+id,null);
  34. }
  35. }
  36. }

目录结构
在这里插入图片描述

7、启动PaymentMain8001,进行测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
插入数据
在这里插入图片描述
在这里插入图片描述

三、热部署Devtools

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

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-devtools</artifactId>
  4. <scope>runtime</scope>
  5. <optional>true</optional>
  6. </dependency>

在这里插入图片描述

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

  1. <build>
  2. <plugins>
  3. <plugin>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-maven-plugin</artifactId>
  6. <configuration>
  7. <fork>true</fork>
  8. <addResources>true</addResources>
  9. </configuration>
  10. </plugin>
  11. </plugins>
  12. </build>

在这里插入图片描述

3、开启自动编译配置

在这里插入图片描述

4、Update the value of,修改值。

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

在这里插入图片描述
下面两个勾住即可
在这里插入图片描述
在这里插入图片描述

5、重启IDEA

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

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

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

在这里插入图片描述

2、改cloud-consumer-order80的pom.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  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">
  3. <parent>
  4. <artifactId>cloud2020</artifactId>
  5. <groupId>com.atguigu.springcloud</groupId>
  6. <version>1.0-SNAPSHOT</version>
  7. </parent>
  8. <modelVersion>4.0.0</modelVersion>
  9. <artifactId>cloud-consumer-order80</artifactId>
  10. <dependencies>
  11. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
  12. <dependency>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-starter-web</artifactId>
  15. </dependency>
  16. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-actuator</artifactId>
  20. </dependency>
  21. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-devtools</artifactId>
  25. <scope>runtime</scope>
  26. <optional>true</optional>
  27. </dependency>
  28. <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
  29. <dependency>
  30. <groupId>org.projectlombok</groupId>
  31. <artifactId>lombok</artifactId>
  32. <optional>true</optional>
  33. </dependency>
  34. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
  35. <dependency>
  36. <groupId>org.springframework.boot</groupId>
  37. <artifactId>spring-boot-starter-test</artifactId>
  38. <scope>test</scope>
  39. </dependency>
  40. </dependencies>
  41. </project>

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

  1. server:
  2. port: 80

4、新建主启动

  1. package com.atguigu.springcloud;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @SpringBootApplication
  5. public class OrderMain80 {
  6. public static void main(String[] args) {
  7. SpringApplication.run(OrderMain80.class,args);
  8. }
  9. }

5、创建entities

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

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

在这里插入图片描述

在这里插入图片描述

7、编写config配置类

  1. package com.atguigu.springcloud.config;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.web.client.RestTemplate;
  5. @Configuration
  6. public class ApplicationContextConfig {
  7. @Bean
  8. public RestTemplate getRestTemplate(){
  9. return new RestTemplate();
  10. }
  11. }

8、创建controller

  1. package com.atguigu.springcloud.controller;
  2. import com.atguigu.springcloud.entities.CommonResult;
  3. import com.atguigu.springcloud.entities.Payment;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.PathVariable;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import org.springframework.web.client.RestTemplate;
  9. import javax.annotation.Resource;
  10. @RestController
  11. @Slf4j
  12. public class OrderController {
  13. public static final String PAYMENT_URL = "http://localhost:8001";
  14. @Resource
  15. private RestTemplate restTemplate;
  16. @GetMapping("/consumer/payment/create")
  17. public CommonResult<Payment> create(Payment payment){
  18. return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class); //写操作
  19. }
  20. @GetMapping("/consumer/payment/get/{id}")
  21. public CommonResult<Payment> getPayment(@PathVariable("id") Long id){
  22. return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
  23. }
  24. }

9、测试

先启动cloud-provider-payment8001
再启动cloud-consumer-order80
测试:http://localhost/consumer/payment/get/2
在这里插入图片描述
http://localhost/consumer/payment/create?serial=12222
在这里插入图片描述

10、补充注解

在这里插入图片描述
目录结构图
在这里插入图片描述

五、工程重构

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

名字叫cloud-api-commons
在这里插入图片描述

2、改cloud-api-commons的pom.xml文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  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">
  3. <parent>
  4. <artifactId>cloud2020</artifactId>
  5. <groupId>com.atguigu.springcloud</groupId>
  6. <version>1.0-SNAPSHOT</version>
  7. </parent>
  8. <modelVersion>4.0.0</modelVersion>
  9. <artifactId>cloud-api-commons</artifactId>
  10. <dependencies>
  11. <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
  12. <dependency>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-devtools</artifactId>
  15. <scope>runtime</scope>
  16. <optional>true</optional>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.projectlombok</groupId>
  20. <artifactId>lombok</artifactId>
  21. <optional>true</optional>
  22. </dependency>
  23. <!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
  24. <dependency>
  25. <groupId>cn.hutool</groupId>
  26. <artifactId>hutool-all</artifactId>
  27. <version>5.1.0</version>
  28. </dependency>
  29. </dependencies>
  30. </project>

3、创建entities

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

4、maven命令clean install

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5、删除entity文件

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

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

  1. <!-- 引入自己定义的api通用包 -->
  2. <dependency>
  3. <groupId>com.atguigu.springcloud</groupId>
  4. <artifactId>cloud-api-commons</artifactId>
  5. <version>${project.version}</version>
  6. </dependency>

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

周阳老师代码

https://github.com/zzyybs/atguigu_spirngcloud2020

SpringCloud思维导图下载

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

发表评论

表情:
评论列表 (有 0 条评论,264人围观)

还没有评论,来说两句吧...

相关阅读