SpringCloud基本Rest微服务工程搭建过程

网友投稿 239 2022-11-05


SpringCloud基本Rest微服务工程搭建过程

1. 父工程构建

1.1 Maven项目搭建

环境

版本JDK1.8Maven3.6+Maven模板maven-archetype-size删除父工程src文件

环境

版本

JDK

1.8

Maven

3.6+

Maven模板

maven-archetype-size

删除父工程src文件

1.2 父工程pom文件

回顾:

① Maven中dependencyManagement和dependencies的区别

​ Maven使用dependencyManagement元素来提供一种管理依赖版本号的方式。通常会在一个组织或者项 目的最顶层的父POM中看到。使用pom.xml中 的dependencyManagement元素能让所有中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上找,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用这个元素中指定的版本号。另外如果某个子项目需要使用另外的版本只需要声明version即可。注意:dependencyManagement里只是声明依赖,并不实现引入,因此子项目要显示的声明需要的依赖。

② Maven中如何跳过单元测试

​ 在Idea的Maven侧栏点击闪电图标,使Maven跳过test生命周期即可。

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.polaris

com.polaris.springcloud

1.0-SNAPSHOT

pom

UTF-8

1.8

1.8

4.12

1.2.17

1.16.18

5.1.47

1.1.16

1.3.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

org.springframework.boot

spring-boot-maven-plugin

true

true

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.polaris

com.polaris.springcloud

1.0-SNAPSHOT

pom

UTF-8

1.8

1.8

4.12

1.2.17

1.16.18

5.1.47

1.1.16

1.3.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

org.springframework.boot

spring-boot-maven-plugin

true

true

2. 微服务提供者支付Module模块

cloud-provider-payment8001

2.1 pom.xml

xmlns:xsi="http://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">

com.polaris.springcloud

com.polaris

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

xmlns:xsi="http://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">

com.polaris.springcloud

com.polaris

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

2.2 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 # mysql驱动包

url: jdbc:mysql://mpolaris.top:3306/cloud-test?useUnicode=true&characterEncoding=utf-8&useSSL=false

username: root

password: 123456

mybatis:

mapperLocations: classpath:mapper/*.xml

type-aliases-package: com.polaris.springcloud.entities # 所有Entity别名类所在包

2.3 主启动类

/**

* @Author polaris

* @Date 2021/1/21 1:00

*/

@SpringBootApplication

public class PaymentMain {

public static void main(String[] args) {

SpringApplication.run(PaymentMain.class,args);

}

}

2.4 业务类(简单演示)

建表

entities

主实体 与 json封装体

@Data

@AllArgsConstructor

@NoArgsConstructor

public class Payment implements Serializable {

private Long id;

private String serial;

}

@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);

}

}

dao

接口PaymentDao与mybatis映射文件PaymentMapper

@Mapper

public interface PaymentDao {

int save(Payment payment);

Payment getPaymentById(@Param("id") Long id);

}

insert into payment(serial) values(#{serial});

select * from payment where id=#{id};

service

接口与实现类

@Service

public class PaymentServiceImpl implements PaymentService {

@Resource

private PaymentDao paymentDao;

@Override

public int save(Payment payment) {

return paymentDao.save(payment);

}

@Override

public Payment getPaymentById(Long id) {

return paymentDao.getPaymentById(id);

}

}

controller

@RestController

@Slf4j

@RequestMapping("/payment")

public class PaymentController {

@Resource

private PaymentService paymentService;

@PostMapping("/save")

public CommonResult save(Payment payment) {

int result = paymentService.save(payment);

log.info("===> result: " + result);

if(result > 0) {

return new CommonResult(200,"保存到数据库成功",result);

}

return new CommonResult(400,"保存到数据库失败",null);

}

@GetMapping("/get/{id}")

public CommonResult save(@PathVariable("id") Long id) {

Payment paymentById = paymentService.getPaymentById(id);

log.info("===> payment: " + paymentById);

if(paymentById != null) {

return new CommonResult(200,"查询成功",paymentById);

}

return new CommonResult(400,"查询失败",null);

}

}

3. 开启Devtools热部署

3.1 聚合父类总工程pom.xml添加配置

org.springframework.boot

spring-boot-maven-plugin

true

true

3.2 当前工程添加devtools依赖

org.springframework.boot

spring-boot-devtools

runtime

true

3.4 开启热注册

快捷键 ctrl + shift + alt + /,打开Registry

勾选

重启Idea,即可测试代码时不用手动重启

注意:该功能只能在开发阶段使用,上线前一定要关闭

4. 微服务消费者订单Module模块

cloud-consumer-order80

4.1 pom.xml

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

4.2 yml配置文件

server:

  port: 80

4.3 主启动类

4.4 RestTemplate引入

是什么

RestTemplate提供了多种便捷 访问远程Http服务 的方法,是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的 客户端模板工具类

如何使用

官网使用:https://docs.spring.io/spring-framework/docs/5.2.2.RELEASE/javadoc-api/org/springframework/web/client/RestTemplate.html

使用restTemplate访问restful接口非常的简单粗暴。

url REST请求地址

requestMap 请求参数

ResponseBean.classs HTTP响应转换被转换成的对象类型

config配置类

@Configuration

public class ApplicationContextConfig {

@Bean

public RestTemplate getRestTemplate() {

return new RestTemplate();

}

}

4.5 业务类

entities

与提供者支付模块一致

controller

@RestController

@Slf4j

@RequestMapping("/consumer")

public class OrderController {

@Resource

private RestTemplate restTemplate;

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

@GetMapping("/payment/save")

public CommonResult save(Payment payment) {

return restTemplate.postForObject(PAYMENT_URL + "/payment/save",

payment,CommonResult.class);

}

@GetMapping("/payment/get/{id}")

public CommonResult get(@PathVariable("id") Long id) {

return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id,

CommonResult.class);

}

}

4.6 启动两个模块测试

启动两个模块没有出现Run Dashbord的问题

在工程目录下找.idea文件夹下的workspace.xml添加如下代码即可

插入成功但是没有内容的问题

解决:支付模块这里一定要加@RequestBody注解

@PostMapping("/save")

public CommonResult save(@RequestBody Payment payment) {

int result = paymentService.save(payment);

log.info("===> result: " + result);

if(result > 0) {

return new CommonResult(200,"保存到数据库成功",result);

}

return new CommonResult(400,"保存到数据库失败",null);

}

5. 工程重构 - 公共工程模块

5.2 新建公共工程 cloud-api-common

重复代码,公共接口,第三方接口,工具类等都可以放在这里

pom.xml

Hutool是一个小而全的Java工具类库,是项目中“util”包友好的替代

org.springframework.boot

spring-boot-devtools

runtime

true

org.projectlombok

lombok

true

cn.hutool

hutool-all

5.1.0

5.3 抽取多个模块的共同代码

将cloud-api-common安装到maven仓库

修改订单80和支付8001代码

删除各自原先的enntities

各自添加pom内容

com.polaris

cloud-api-common

${project.version}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:周公解梦大全查询免费API(周公解梦大全查询免费版)
下一篇:vue下载excel以及自适应表格宽度
相关文章

 发表评论

暂时没有评论,来抢沙发吧~