微服務架構編碼構建
- 1 基礎知識
- 1.1 版本
- 2 微服務cloud整體聚合父工程Project
- 2.1 new project
- 2.2 字符編碼設定 utf-8
- 2.3 pom.xml
- 2.4 父工程創建完成執行mvn:install將父工程發布到倉庫方便子工程繼承
- 3 cloud-provider-payment8001微服務提供者支付Module模塊
- 3.1 建cloud-provider-payment8001
- 3.2 改POM
- 3.3 寫yml
- 3.4 主啟動
- 3.5 資料庫
- 3.6 entity
- 3.7 dao
- 3.8 service
- 3.9 controller
- 4 cloud-consumer-order80 微服務消費者訂單Module模塊
- 4.1 建cloud-consumer-order80
- 4.2 改POM
- 4.3 寫YML
- 4.4 主啟動
- 4.5 業務類
- 4.5.1 entity (同上)
- 4.5.2 RestTemplate使用
- 4.5.3 controller
- 5 工程重構
- 5.1 新建工程 cloud-api-commons
- 5.2 pom
- 5.3 entity
- 5.4 maven命令clean install
- 5.5 訂單80和支付8001分別改造
- 5.5.1 洗掉各自的原先有過的entity檔案夾
- 5.5.2 各自粘貼POM內容
1 基礎知識
1.1 版本
springcloud : CURRENT

springboot : 2.4.3

2 微服務cloud整體聚合父工程Project
2.1 new project
2.2 字符編碼設定 utf-8
2.3 pom.xml
<!-- 統一管理jar包和版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<junit.version>4.12</junit.version>
<mysql.version>8.0.16</mysql.version>
<druid.verison>1.1.16</druid.verison>
<mybatis.spring.boot.verison>2.1.0</mybatis.spring.boot.verison>
<lombok.version>1.18.10</lombok.version>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
</properties>
<!-- 子模塊繼承后提供作用,鎖定版本+子modlue,不用寫groupid和version -->
<dependencyManagement>
<dependencies>
<!-- springboot2.4.3-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.4.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- springcloud CURRENT版本 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>CURRENT</version>
<type>pom</type>
</dependency>
<!-- spring cloud alibaba 2.1.0.RELEASE -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<!-- mysql 8.0.16-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- Druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.verison}</version>
</dependency>
<!-- mybatis-springboot整合 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.spring.boot.verison}</version>
</dependency>
<!-- lombok 1.18.10 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- junit 4.12 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<!-- log4j 1.2.17 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.verson}</version>
</dependency>
</dependencies>
</dependencyManagement>
加一個這個<packaging>pom</packaging>

問題:Maven中的DependencyManagement和Dependencies區別


2.4 父工程創建完成執行mvn:install將父工程發布到倉庫方便子工程繼承
3 cloud-provider-payment8001微服務提供者支付Module模塊
3.1 建cloud-provider-payment8001
3.2 改POM
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
3.3 寫yml
server:
port: 8001
spring:
application:
name: cloud-payment-service
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 當前資料源操作型別
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db2021?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
username: root
password: 18170021
mybatis:
mapperLocations: classpath:mapper/*.xml
type-aliases-package: com.wang.entity
3.4 主啟動
@SpringBootApplication
public class PaymentMain8001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8001.class, args);
}
}
3.5 資料庫

3.6 entity
Payment類
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Payment implements Serializable {
private Long id;
private String serial;
}
CommonResult類
Json封裝體CommonResult
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult<T> {
private Integer code;
private String messag;
private T data;
public CommonResult(Integer code, String messag){
this.code = code;
this.messag = messag;
}
}
3.7 dao

3.8 service
3.9 controller
@RestController
@Slf4j
public class PaymentController {
@Autowired
private PaymentService paymentService;
@PostMapping(value = "/payment/create")
public CommonResult create(@RequestBody 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);
if(payment != null){
return new CommonResult(200, "查詢成功", payment);
}else{
return new CommonResult(444, "查詢失敗", null);
}
}
}
4 cloud-consumer-order80 微服務消費者訂單Module模塊
4.1 建cloud-consumer-order80
4.2 改POM
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
4.3 寫YML
server:
port: 8082
4.4 主啟動
//因為消費者不需要寫dao層資料庫操作 所以yml檔案中沒有資料庫配置,不加后面的就報錯
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
public class OrderMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderMain80.class, args);
}
}
4.5 業務類
4.5.1 entity (同上)
4.5.2 RestTemplate使用


(1) config配置類注冊restTemplate
@Configuration
public class ApplicationContextConfig {
//applicationContext.xml <bean id=? ..... >
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
4.5.3 controller
@RestController
@Slf4j
public class OrderController {
private static final String PAYMENT_URL = "http://localhost:8001";
@Autowired
private RestTemplate restTemplate;
@GetMapping(value = "/consumer/payment/create")
public CommonResult<Payment> create(Payment payment){
return restTemplate.postForObject(PAYMENT_URL + "/payment/create", payment, CommonResult.class);
}
@GetMapping(value = "/consumer/payment/get/{id}")
public CommonResult<Payment> getPayment(@PathVariable("id") Long id){
return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
}
}
5 工程重構
系統中有entity重復
5.1 新建工程 cloud-api-commons
5.2 pom
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.3</version>
</dependency>
</dependencies>
5.3 entity

5.4 maven命令clean install
5.5 訂單80和支付8001分別改造
5.5.1 洗掉各自的原先有過的entity檔案夾
5.5.2 各自粘貼POM內容
<!-- 引入自己的定義的api通用包,可以使用payment支付的entity-->
<dependency>
<groupId>com.wang</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/282904.html
標籤:其他
上一篇:電商后臺管理系統(一)
