父工程SpringBoot、SpringCloud、SpringCloudAlibaba版本对应关系

(aligithub)spring-cloud-alibaba与springcloud、springboot对应关系
https://spring.io/projects/spring-cloud
阿里maven仓库最新镜像(官网)

复习

Maven中的DependencyManagement和Dependencies

dependencyManagement
Maven 使用dependencyManagement 元素来提供了一种管理依赖版本号的方式。
通常会在一个组织或者项目的最顶层的父POM 中看dependencyManagement 元素。
使用pom.xml 中的dependencyManagement 元素能让所有在子项目中引用一个依赖而不用显式的列出版本号。
Maven 会沿着父子层次向上走,直到找到一个拥有dependencyManagement 元素的项目,然后它就会使用这个
dependencyManagement 元素中指定的版本号。
image.png
这样做的好处就是:如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改 ;另外如果某个子项目需要另外的一个版本,只需要声明version就可。

  • dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显示的声明需要用的依赖。
  • 如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;
  • 如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
  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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <groupId>com.atguigu.springcloud</groupId>
  6. <artifactId>cloud2021</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>8</maven.compiler.source>
  13. <maven.compiler.target>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>8.0.22</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>

微服务模块的构建—服务端8001

建module

改pom

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>cloud2021</artifactId>
  7. <groupId>com.atguigu.springcloud</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>cloud-provider-payment8001</artifactId>
  12. <dependencies>
  13. <dependency>
  14. <groupId>org.springframework.boot</groupId>
  15. <artifactId>spring-boot-starter-web</artifactId>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.springframework.boot</groupId>
  19. <artifactId>spring-boot-starter-actuator</artifactId>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.mybatis.spring.boot</groupId>
  23. <artifactId>mybatis-spring-boot-starter</artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>com.alibaba</groupId>
  27. <artifactId>druid-spring-boot-starter</artifactId>
  28. <version>1.1.10</version>
  29. </dependency>
  30. <!--mysql-connector-java-->
  31. <dependency>
  32. <groupId>mysql</groupId>
  33. <artifactId>mysql-connector-java</artifactId>
  34. </dependency>
  35. <!--jdbc-->
  36. <dependency>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-starter-jdbc</artifactId>
  39. </dependency>
  40. <dependency>
  41. <groupId>org.springframework.boot</groupId>
  42. <artifactId>spring-boot-devtools</artifactId>
  43. <scope>runtime</scope>
  44. <optional>true</optional>
  45. </dependency>
  46. <dependency>
  47. <groupId>org.projectlombok</groupId>
  48. <artifactId>lombok</artifactId>
  49. <optional>true</optional>
  50. </dependency>
  51. <dependency>
  52. <groupId>org.springframework.boot</groupId>
  53. <artifactId>spring-boot-starter-test</artifactId>
  54. <scope>test</scope>
  55. </dependency>
  56. </dependencies>
  57. </project>

写YML

  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: com.mysql.cj.jdbc.Driver
  9. url: jdbc:mysql://localhost:3306/dbCloud?useUnicode=true&characterEncoding=utf-8&useSSL=false
  10. username: root
  11. password: 10086
  12. mybatis:
  13. mapperLocations: classpath:mapper/*.xml
  14. type-aliases-package: com.atguigu.springcloud.entities # 所有Entity别名类所在包

主启动

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

业务类

image.png

遇到的坑

项目,模块jdk,pom的jdk版本一定要一致!
解决jdk无效版或需要发行版
修改新建项目默认的maven
注意事项:视频里面使用的jdk8,各个组件的版本号一一对应,如果不相同会导致mybatis报警告WARNING: An illegal reflective access operation has occurred,虽然不影响使用

开启热部署

导入依赖、在父工程的pom中加入插件

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-devtools</artifactId>
  4. <scope>runtime</scope>
  5. <optional>true</optional>
  6. </dependency>
  7. <build>
  8. <finalName>你自己的工程名字</finalName> //加不加无所谓
  9. <plugins>
  10. <plugin>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-maven-plugin</artifactId>
  13. <configuration>
  14. <fork>true</fork>
  15. <addResources>true</addResources>
  16. </configuration>
  17. </plugin>
  18. </plugins>
  19. </build>

开启自动build
image.png
按两下shift,搜索registry,勾选如下两项
image.png

微服务模块的构建—客户端80

为什么客户端是80端口?
因为浏览网页服务默认的端口号就是80,因此还需要输入网址即可,80可以省略。e.g. www.baidu.com:80

RestTemplate

因为客户端跟服务端是两个不同的模块,所以我们需要通过http访问支付模块。
RestTemplate提供了多种便捷访问远程Http服务的方法,是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集。

使用restTemplate访问restful接口非常的简单粗暴无脑。
(url, requestMap, ResponseBean.class)这三个参数分别代表
REST请求地址、请求参数、HTTP响应转换被转换成的对象类型。

  1. @RestController
  2. @Slf4j
  3. public class OrderController {
  4. public static final String PAYMENT_URL = "http://localhost:8001";
  5. @Resource
  6. private RestTemplate restTemplate;
  7. @GetMapping("/consumer/payment/create")
  8. public CommonResult<Payment> create(Payment payment) {
  9. log.info("80收到的参数:" + payment.toString());
  10. return restTemplate.postForObject(PAYMENT_URL + "/payment/create", payment, CommonResult.class);
  11. }
  12. @GetMapping("/consumer/payment/get/{id}")
  13. public CommonResult<Payment> getPayment(@PathVariable("id") Long id) {
  14. return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
  15. }
  16. }

工程重构

我们发现在支付模块的客户端和服务端均有entities,且内容相同;因此将相同的重复代码提取到一个公开共用的工程中
这里说到一个hutool工具包