将单元应用划分为一组小的服务,各服务独立部署,独立运行,服务之间相互调用,互相配合完成。SpringCloud = 分布式微服务架构的一站式解决方案,多种微服务架构落地技术的几何体。 2、技术栈更新
3、版本选型每个版本都有对应的SpringBoot版本,版本选型官网链接:版本选型官网链接
4、环境搭建父工程构建
第一步:新建工程
第二步:字符编码
第三步:注解激活
第四步:编译版本
第五步:文件过滤
父工程pom.xml文件整理
第一步:文件管理
第二步:内容修改
4.0.0 org.example com.cloud2022 1.0-SNAPSHOT pom UTF-8 1.8 1.8 4.12 1.2.17 1.16.18 5.1.47 1.1.16 3.4.3 org.springframework.boot spring-boot-dependencies 2.2.2.RELEASE pom import org.springframework.cloud spring-cloud-dependencies Hoxton.SR1 pom import com.alibaba.cloud spring-cloud-alibaba-dependencies 2.1.0.RELEASE pom import mysql mysql-connector-java ${mysql.version} com.alibaba druid ${druid.version} com.baomidou mybatis-plus-boot-starter ${mybatis-plus.spring.boot.version} junit junit ${junit.version} log4j log4j ${log4j.version} org.projectlombok lombok ${lombok.version} true maven-clean-plugin 3.1.0 maven-site-plugin 3.7.1 maven-project-info-reports-plugin 3.0.0 org.apache.maven.plugins maven-site-plugin en,fr
dependencyManagement与dependencies区别
dependencyManagement用作总pom文件中,便于统一管理版本;dependencyManagement只是声明依赖,并不引入,子项目需重新声明依赖;
其他技巧:
跳过测试
install发布
子模块搭建-支付模块
第一步:建module
第二步:改pom
cloud2022 org.example 1.0-SNAPSHOT 4.0.0 payment8001 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator com.baomidou mybatis-plus-boot-starter com.alibaba druid-spring-boot-starter 1.1.10 mysql mysql-connector-java org.springframework.boot spring-boot-starter-jdbc org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test
第三步:写yml
application.yml
server:
port: 8001
spring:
application:
name : payment8001
datasource:
url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
username: root
password: 123456
driver-class-name=com: mysql.cj.jdbc.Driver
# type: com.alibaba.druid.pool.DruidDataSource
#2、mybatis-plus配置
mybatis-plus:
#2-1 lodging 日志
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#2-2 deleted 逻辑删除
global-config :
db-config:
logic-delete-value: 1
logic-not-delete-value: 0
mapper-locations: classpath:mapper/*.xml
第四步:主启动
PaymentApplication .java
package com.payment;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(scanbasePackages = "com.payment")
@MapperScan("com.payment.Mapper")
public class PaymentApplication {
public static void main(String[] args) {
SpringApplication.run(PaymentApplication.class, args);
}
}
第五步:业务类
执行:http://localhost:8001/payment/1
结果:{“code”:200,“msg”:“成功”,“date”:null}
注意:
——使用result封装数据结果集;
子模块搭建-订单模块
搭建步骤与支付模块相同
注意:
——调用支付模块,不需要业务处理逻辑;
——需要config配置RestTemplate;
package com.consumer.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class ApplicationConfig {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
——controller类
注意:
请求方式为get;post无法使用RequestBody注解;
package com.consumer.Controller;
import com.consumer.Entity.Payment;
import com.consumer.Entity.Result;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping("/consumer")
@Slf4j
@RequiredArgsConstructor
public class PaymentController {
public static final String payment_URL ="http://localhost:8001";
private final RestTemplate restTemplate ;
@GetMapping("/get/save")
public Result saveEntity(Payment payment) {
return restTemplate.postForObject(payment_URL+"/payment/save",payment,Result.class);
}
@GetMapping("/{id}")
public Result getEntity(@PathVariable("id") Integer id) {
return restTemplate.getForObject(payment_URL+"/payment/"+id,Result.class);
}
}
总结
1、子工程-支付模块
pom.xml
cloud2022 org.example 1.0-SNAPSHOT 4.0.0 payment8001 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator com.baomidou mybatis-plus-boot-starter com.alibaba druid-spring-boot-starter 1.1.10 mysql mysql-connector-java org.springframework.boot spring-boot-starter-jdbc org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-devtools runtime true
yml
server:
port: 8001
spring:
application:
name : payment8001
datasource:
url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
username: root
password: 123456
driver-class-name=com: mysql.cj.jdbc.Driver
# type: com.alibaba.druid.pool.DruidDataSource
#2、mybatis-plus配置
mybatis-plus:
#2-1 lodging 日志
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#2-2 deleted 逻辑删除
global-config :
db-config:
logic-delete-value: 1
logic-not-delete-value: 0
mapper-locations: classpath:mapper/*.xml
controller
package com.payment.Controller;
import com.payment.Entity.Payment;
import com.payment.Entity.Result;
import com.payment.Service.PaymentService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/payment")
@Slf4j
@RequiredArgsConstructor
public class PaymentController {
private final PaymentService paymentService ;
@PostMapping("/save")
public Result saveEntity(@RequestBody Payment payment) {
paymentService.saveEntity(payment);
return new Result(200,"成功","");
}
@GetMapping("/{id}")
public Result saveEntity(@PathVariable("id") Integer id) {
System.out.println(id);
return new Result(200,"成功",paymentService.getPayment(id));
}
}
2、子工程-订单模块
pom.xml
cloud2022 org.example 1.0-SNAPSHOT 4.0.0 consumer org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-actuator com.baomidou mybatis-plus-boot-starter com.alibaba druid-spring-boot-starter 1.1.10 mysql mysql-connector-java org.springframework.boot spring-boot-starter-jdbc org.springframework.boot spring-boot-devtools runtime true org.projectlombok lombok true org.springframework.boot spring-boot-starter-test test org.springframework.boot spring-boot-devtools runtime true
yml
server:
port: 8002
spring:
application:
name : consumer
datasource:
url: jdbc:mysql://localhost:3306/springboot-mybatisplus?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8
username: root
password: 123456
driver-class-name=com: mysql.cj.jdbc.Driver
# type: com.alibaba.druid.pool.DruidDataSource
#2、mybatis-plus配置
mybatis-plus:
#2-1 lodging 日志
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#2-2 deleted 逻辑删除
global-config :
db-config:
logic-delete-value: 1
logic-not-delete-value: 0
# mapper-locations: classpath:mapper/*.xml
controller
package com.consumer.Controller;
import com.consumer.Entity.Payment;
import com.consumer.Entity.Result;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping("/consumer")
@Slf4j
@RequiredArgsConstructor
public class PaymentController {
public static final String payment_URL ="http://localhost:8001";
private final RestTemplate restTemplate ;
@GetMapping("get/save")
public Result saveEntity(Payment payment) {
return restTemplate.postForObject(payment_URL+"/payment/save",payment,Result.class);
}
@GetMapping("/{id}")
public Result getEntity(@PathVariable("id") Integer id) {
return restTemplate.getForObject(payment_URL+"/payment/save/"+id,Result.class);
}
}
Result
package com.consumer.Entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class Result{ private Integer code; private String msg; private R Date; }
代码重构
(1)提出公共部分
(2)install发布
(3)在其他服务中引入
com.commons commons 1.0-SNAPSHOT compile
采坑:发布的服务一定要有gruopId字段,与引入的groupId一致
cloud2022 org.example 1.0-SNAPSHOT 4.0.0 com.commons commons



