基于springboot微服务项目的父工程、common模块的构建
------不完整,待更新概述以微服务项目的方式,对软件体系进行一个简单的探究,简略说明,为什么这样做,软件中这样做的原因是什么,结合一定的案例给出。父工程对于父工程模块中重要的是其中的pom文件,在微服务体系下,不能够过多,比如在子模块中会自己引入的,就不要在父工程的pom文件中引入,避免父工程承担过多的责任,更多的引入权应该交给子模块,让子模块更能自治。结构目录pom文件在pom文件中便是简单
概述
以微服务项目的方式,对软件体系进行一个简单的探究,简略说明,为什么这样做,软件中这样做的原因是什么,结合一定的案例给出。
父工程
对于父工程模块中重要的是其中的pom文件,在微服务体系下,不能够过多,比如在子模块中会自己引入的,就不要在父工程的pom文件中引入,避免父工程承担过多的责任,更多的引入权应该交给子模块,让子模块更能自治。
父工程pom文件
在pom文件中便是简单的引入一些必须的依赖,过多、繁杂的依赖并没有引入。项目是基于springboot的,而springboot一些基础jar包是在一个叫parent标签的依赖中配置的。所以,springboot的parent是必须的。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.1.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
子工程pom文件
在子工程中会引入common模块,及工程所需要的依赖。一般来说,必须的依赖有,mysql连接驱动jar包,dao层所用框架的jar包,及common包,这里使用的是mysql、mybatis-plus,所以,引入了mysql驱动包,mybatis-plus相关jar包。要是不知道mybatis-plus的需要什么jar包,可以到mybats-plus官网上自行查找。
建议的话使用官网上的jar依赖,有时候可能会导致,org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 问题
对于子工程模块的构建,一般生成完Module后,一般要做的事是引入pom文件、配置application.yml、使用easycode等自动生成代码、在启动类中@MapperScan(“com.tensquare.recruit.dao”)配置接口扫描。
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--简化代码的工具包-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--mybatis-plus的springboot支持-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<artifactId>tensquare_common</artifactId>
<groupId>com.itctest</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
common模块
对于common模块,也是公共模块,和父工程有着较多的相似性,其较大的作用在于为其他模块提供 共用 类,但不牵扯到其他模块的具体业务逻辑。如果在一开始模块划分的时候并未划分出common模块,那么可以将全部模块中共用的类抽取出来,放入到common模块中,然后在各个模块引入common模块jar包。完成对项目工程的改造。
在前后端分离的微服务中,公共模块,大多承担的角色是,根据前端所需返回的数据类型,定义出一个或几个共同的类,满足前端类型所需,那么在controller层对数据进行返回的时候,根据所需返回相应类型即可。
通常来说,前端需要返回的类型有状态码code–用于标识状态成功、失败等状态,提示信息message–用于说明状态码怎样,比如添加成功、查询成功等,以及返回数据data,需要返回的数据。
那么要怎么选择数据的具体类型呐?一般来说,code可以选用数据Integer,message选String,而data因为要保存各种对象的数据,为此可以考虑泛型或者所有类的父类Object,使用泛型的时候记得在类上加声明。
在创建类的时候可对code、message提供一个构造函数,对code、message、data提供一个构造函数,方便返回调用。
目录结构
说明:
pageResult:用于返回分页对象
Result:通用分页对象
StatusCode:定义状态码,可对项目代码进行解耦
后端代码
public class Result {
private boolean flag;
private Integer code;
private String message;
private Object data;
public Result() {
}
//增删改
public Result(boolean flag, Integer code, String message) {
this.flag = flag;
this.code = code;
this.message = message;
}
//
public Result(boolean flag, Integer code, String message, Object data) {
this.flag = flag;
this.code = code;
this.message = message;
this.data = data;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public void setCode(Integer code) {
this.code = code;
}
public void setMessage(String message) {
this.message = message;
}
public void setData(Object data) {
this.data = data;
}
public boolean isFlag() {
return flag;
}
public Integer getCode() {
return code;
}
public String getMessage() {
return message;
}
public Object getData() {
return data;
}
}
前端的可能代码
没有data的Result对象
{
"code": 0,
"flag": true,
"message": "string"
}
有data的Result对象
{
"code": 0,
"flag": true,
"message": "string",
"data": [
{
"id": "string",
"labelname": "string",
"state": "string",
"count": 0,
"recommend": "string"
}
]
}
有分页的Result对象,通常可以PageResult可以配合Result对象使用
{
"code": 0,
"flag": true,
"message": "string",
"data": {
"total": 0,
"rows": [
{
"id": "string",
"labelname": "string",
"state": "string",
"count": 0,
"recommend": "string"
}
]
}
}
ps:以上代码均非原创,仅供学习使用,如有侵权请联系删除
更多推荐
所有评论(0)