00.微服务架构编码构建准备工作
代码编写核心贯穿约定 > 配置 > 编码
yml
小总结
测试先启动cloud-provider-payment8001再启动cloud-consumer-order80http://localhost/consumer/payment/get/32
创建create方法,不要忘记@RequestBody注解
将这两个实体类搬到这里
1.IDEA新建project工作空间
微服务cloud整体聚合父工程Project
整个springcloud的学习在建立的父工程基础上,新建模块1.New Project 新建立一个maven的父工程其余东西删除,留下一个pom文件,打包模式 改为pom引入依赖如下 pom
UTF-8
1.8
1.8
4.12
1.2.17
1.16.18
5.1.47
1.1.16
1.3.0
3.2.0
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}
org.mybatis.spring.boot
mybatis-spring-boot-starter
${mybatis.spring.boot.version}
junit
junit
${junit.version}
log4j
log4j
${log4j.version}
org.projectlombok
lombok
${lombok.version}
true
com.baomidou
mybatis-plus-boot-starter
${mybatis-plus.version}
org.springframework.boot
spring-boot-maven-plugin
true
true
maven的dependencyManagement说明
2.Rest微服务工程构建
本次的springcloud学习围绕着- 订单模块
- 支付模块
微服务提供者支付Module模块
新创建cloud-provider-payment8001模块pom<?xml version="1.0" encoding="UTF-8"?>
springcloud2020
com.chl.springcloud
1.0-SNAPSHOT
4.0.0
cloud-provider-payment8001
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.mybatis.spring.boot
mybatis-spring-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
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/springcloud2020?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: 123456
mybatis:
mapperLocations: classpath:mapper/*/*.xml
type-aliases-package: com.chl.springcloud.entity
主启动@SpringBootApplication
public class Payment8001 {
public static void main(String[] args) {
SpringApplication.run(Payment8001.class,args);
}
}
业务类1.建表SQLCREATE TABLE payment (
id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT ID,
'serial' VARCHAR(200) DEFAULT,
PRIMARY KEY(id)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
2.entitiyPayment@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment implements Serializable {
private Long id;
private String serial;
}Json封装体CommonResult@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult {
private Integer code;
private String message;
private T data;
public CommonResult(Integer code,String message){
this(code,message,null);
}
}
3.daoPaymentMapper@Mapper
public interface PaymentMapper{
int savePayment(Payment payment);
Payment getPaymentById(Long id);
}
PaymentMapper.xml 这个位置 src\main\resources\mapper\PaymentMapper.xml<?xml version="1.0" encoding="UTF-8"?>
insert into payment(serial) values(${serial});
4.servicePaymentServicepublic interface {
/**
* 添加payment
* @param payment
* @return
*/
int savePayment(Payment payment);
/**
* 获取payment
* @param id
* @return
*/
Payment getPaymentById(Long id);
}PaymentServiceImpl@Service
public class PaymentServiceImpl implements PaymentService {
@Autowired
private PaymentMapper paymentMapper;
@Override
public int savePayment(Payment payment) {
return paymentMapper.savePayment(payment);
}
@Override
public Payment getPaymentById(Long id) {
return paymentMapper.getPaymentById(id);
}
}5.controllerPaymentController@RestController
@Slf4j
public class PaymentController {
@Autowired
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);
}
}
}测试http://localhost:8001/payment/get/31 小总结
- 1.建module
- 2.改POM
- 3.写YML
- 4.主启动
- 4.主启动
微服务消费者订单Module模块
建cloud-consumer-order80pom<?xml version="1.0" encoding="UTF-8"?>
springcloud2020
com.chl.springcloud
1.0-SNAPSHOT
4.0.0
cloud-consumer-order80
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
ymlserver:
port: 80
spring:
application:
name: cloud-order-service主启动@SpringBootApplication
public class OrderMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderMain80.class,args);
}
}
业务类创建entity(将cloud-provider-payment8001工程下的entity包下的两个实体类复制过来)首说RestTemplate
官网地址:https://docs.spring.io/spring-framework/docs/5.2.2.RELEASE/javadoc-api/org/springframework/web/client/RestTemplate.htmlApplicationContextConfig
要使用restTemplate,要创建restTemplate,放进spring容器@Configuration
public class ApplicationContextConfig {
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}OrderController@RestController
@Slf4j
public class OrderController {
public static final String PAYMENT_URL = "http://localhost:8001";
@Autowired
private RestTemplate restTemplate;
@GetMapping("/consumer/payment/create")
public CommonResult create(Payment payment){
return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class); //写操作
}
@GetMapping("/consumer/payment/get/{id}")
public CommonResult getPayment(@PathVariable("id") Long id){
return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
}
}
测试先启动cloud-provider-payment8001再启动cloud-consumer-order80http://localhost/consumer/payment/get/32
创建create方法,不要忘记@RequestBody注解
3.工程重构
由于两个工程entity下面的payment实体类,还有commonResult所以直接抽取出来,作为通用的新建立模块cloud-api-commons
pom<?xml version="1.0" encoding="UTF-8"?>
springcloud2020
com.chl.springcloud
1.0-SNAPSHOT
4.0.0
cloud-api-commons
org.springframework.boot
spring-boot-devtools
runtime
true
org.projectlombok
lombok
true
cn.hutool
hutool-all
5.1.0
将这两个实体类搬到这里
支付模块还有订单模块的改造
订单80和支付8001分别删除原来的entity文件夹的两个实体类分别引入通用模块
com.chl.springcloud
cloud-api-commons
1.0-SNAPSHOT