项目初始化
目录
1. 项目结构
目录如下:
解释:
- moyu-bom 负责管理依赖
- moyu-common 公共依赖部分
- moyu-auth 授权服务
- moyu-gateway 网关服务
- moyu-modules 业务服务模块集合
- moyu-product 商品业务服务模块
- moyu-product-api 商品业务服务模块controller相关接口及相关实体类(controller实现fegin接口)
- moyu-product-biz 商品业务服务模块具体实现
- moyu-order 订单业务服务模块
- moyu-order-api 订单业务服务模块controller相关接口及相关实体类(controller实现fegin接口)
- moyu-order-biz 订单业务服务模块具体实现
- moyu-account 账户服务模块
- moyu-account-api 账户业务服务模块controller相关接口及相关实体类(controller实现fegin接口)
- moyu-account-biz 账户业务服务模块具体实现
2. 技术选型
maven:3.3.9
数据库:MySQL 5.7
持久层: SpingData Jpa
其他: SpringCloud Alibaba 技术栈
3. maven依赖
代码如下(示例):
1. 父工程: moyu-alibaba的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ymh</groupId>
<artifactId>moyu-alibaba</artifactId>
<packaging>pom</packaging>
<version>1.0.0</version>
<modules>
<module>moyu-bom</module>
<module>moyu-common</module>
<module>moyu-modules</module>
<module>moyu-gateway</module>
<module>moyu-auth</module>
</modules>
<properties>
<java.version>1.8</java.version>
<spring-boot.version>2.2.5.RELEASE</spring-boot.version>
<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
<spring-cloud.version>Hoxton.SR3</spring-cloud.version>
<moyu-bom.version>1.0.0</moyu-bom.version>
<encoding>UTF-8</encoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.ymh</groupId>
<artifactId>moyu-bom</artifactId>
<version>${moyu-bom.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
在父pom中我们为全局引入test 和lombok简化我们的开发,大家可以看情况添加。
2. 版本管理模块moyu-boom的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.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">
<groupId>com.ymh</groupId>
<artifactId>moyu-bom</artifactId>
<packaging>pom</packaging>
<version>1.0.0</version>
<modelVersion>4.0.0</modelVersion>
<properties>
<mysql.version>5.1.47</mysql.version>
<moyu.version>1.0.0</moyu.version>
<swagger.version>3.0.0</swagger.version>
<collections4.version>4.4</collections4.version>
</properties>
<dependencyManagement>
<dependencies>
<!--moyu 公共包 版本-->
<dependency>
<groupId>com.ymh</groupId>
<artifactId>moyu-common</artifactId>
<version>${moyu.version}</version>
</dependency>
<dependency>
<groupId>com.ymh</groupId>
<artifactId>moyu-account-api</artifactId>
<version>${moyu.version}</version>
</dependency>
<dependency>
<groupId>com.ymh</groupId>
<artifactId>moyu-order-api</artifactId>
<version>${moyu.version}</version>
</dependency>
<dependency>
<groupId>com.ymh</groupId>
<artifactId>moyu-product-api</artifactId>
<version>${moyu.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
<version>${collections4.version}</version>
</dependency>
<!--database-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>${swagger.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
在moyu-boom中我们定义我们需要引入jar的版本号,基于我们自定义模块的版本,moyu-boom 在父pom中被依赖进来。
3. moyu-common模块
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.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">
<parent>
<artifactId>moyu-alibaba</artifactId>
<groupId>com.ymh</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>moyu-common</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-json</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
</dependency>
</dependencies>
</project>
4. moyu-modules模块
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.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">
<parent>
<artifactId>moyu-alibaba</artifactId>
<groupId>com.ymh</groupId>
<version>1.0.0</version>
</parent>
<artifactId>moyu-modules</artifactId>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<modules>
<module>moyu-account</module>
<module>moyu-order</module>
<module>moyu-product</module>
</modules>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
</project>
5. moyu-order模块
moyu-account,moyu-product类似。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.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">
<parent>
<artifactId>moyu-modules</artifactId>
<groupId>com.ymh</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>moyu-order</artifactId>
<packaging>pom</packaging>
<modules>
<module>moyu-order-api</module>
<module>moyu-order-biz</module>
</modules>
</project>
1. moyu-order-api模块
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.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">
<parent>
<artifactId>moyu-order</artifactId>
<groupId>com.ymh</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>moyu-order-api</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>com.ymh</groupId>
<artifactId>moyu-common</artifactId>
</dependency>
</dependencies>
</project>
- 编码
在此模块我们放入order需要提供fegin的接口以及相关的实体类
OrderDTO 实体类:
package com.ymh.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.math.BigDecimal;
import lombok.Data;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;
@Data
@Slf4j
@Accessors(chain = true)
public class OrderDTO {
@JsonIgnore
private Integer id;
@JsonIgnore
private String orderNo;
private String accountCode;
private String productCode;
private Integer count;
@JsonIgnore
private BigDecimal amount;
private BigDecimal price;
}
OrderFeignfegin接口类
package com.ymh.feign;
import com.ymh.common.domain.ResultData;
import com.ymh.domain.OrderDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* @author: 13590
* @date: 2020/10/27 19:36
* @description:
*/
@FeignClient("order-service")
public interface OrderFeign {
@PostMapping("/create")
ResultData<OrderDTO> create(@RequestBody OrderDTO orderDTO);
}
2. moyu-order-biz模块
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.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">
<parent>
<artifactId>moyu-order</artifactId>
<groupId>com.ymh</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>moyu-order-biz</artifactId>
<dependencies>
<dependency>
<groupId>com.ymh</groupId>
<artifactId>moyu-common</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.ymh</groupId>
<artifactId>moyu-order-api</artifactId>
</dependency>
<dependency>
<groupId>com.ymh</groupId>
<artifactId>moyu-product-api</artifactId>
</dependency>
<dependency>
<groupId>com.ymh</groupId>
<artifactId>moyu-account-api</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
</project>
- 编码
OrderDO实体类
package com.ymh.domain;
import java.math.BigDecimal;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* @author: 13590
* @date: 2020/10/26 21:07
* @description:
*/
@Data
@Accessors(chain = true)
@Entity(name = "`order`")
public class OrderDO {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(length = 64)
private String orderNo;
@Column(length = 32)
private String accountCode;
@Column(length = 32)
private String productCode;
private Integer count;
private BigDecimal amount;
}
OrderDAO类如下:
package com.ymh.dao;
import com.ymh.domain.OrderDO;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @author: 13590
* @date: 2020/10/26 21:11
* @description:
*/
public interface OrderDao extends JpaRepository<OrderDO, Integer> {
}
到此为止我们前期所需要的定义pom已经基本完成,其他模块的pom我们使用到了再来定义。