Springboot架构设计(一)
来源:互联网 发布:淘宝店改区域 编辑:程序博客网 时间:2024/06/07 19:46
本来一直做Android设计,因为工作需要目前负责Java后端。主要使用的框架是SpringBoot。自己习惯在做项目的时候进行架构设计,实现低耦合,高灵活,快速开发。研究的时间不长,目前做了一个简单的Java SpringBoot项目架构,简单梳理一下。
一、建立项目的时候把Mysql选上,创建项目之后需要添加数据库连接信息。数据库是提前创建好的。连接信息可以写在application.properties文件中,也可以建立一个配置类进行设置;
二、配置服务器容器。项目默认使用的是Intellij Idea自带的虚拟容器,我们调试使用的是外部安装的Tomcat,所以要配置Artifacts,把项目发布到外部Tomcat的站点当中,一定要把后加的包都添加进去;
三、Application.java是启动文件,向导已经创建好了,要在外部成功访问,我们需要完善一下:
@SpringBootApplication@EnableJpaRepositories(basePackages = "com.meiyue", repositoryFactoryBeanClass = BaseRepositoryFactoryBean.class)public class Application extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication springApplication=new SpringApplication(Application.class); springApplication.run(args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Application.class); }}
除了main方法,其他方法都是可以放在另外的类中去管理的。
四、讲一下分包,这是我的基本分包
bean:存放实体类,期中又分为base、entity、parameter、protocol四个。
bean/base:存放一些固定规范的类,比如我们自定义的分页模型;
bean/entity:存放根据数据库表映射过来的实体类,以及数据打包需要的实体类;
bean/parameter:用body方式请求时需要添加的参数解析实体类;
bean/protocol:数据请求和返回规范性数据结构的实体类,比如固定参数,请求体结构,返回体结构等等。
以下是四种规范性的实体类:
1.分页模型:
public class PageModel<DataType> { public int page;//当前页码 public int pageSize;//页面大小 public long count;//数据总数 public boolean hasNext;//是否还有下一页 public List<DataType> dataList;//数据列表 public PageModel() { } public PageModel(int page, int pageSize) { this.page = page; this.pageSize = pageSize; } public PageModel(int page, int pageSize, long count) { this.page = page; this.pageSize = pageSize; this.count = count; } public PageModel(int page, int pageSize, List<DataType> dataList) { this.page = page; this.pageSize = pageSize; this.dataList = dataList; }}
2.固定参数(自定义)
public class NetProtocol { private String ver; private String os; private String channel; private String token; private double lng; private double lat; public String getVer() { return ver; } public void setVer(String ver) { this.ver = ver; } public String getOs() { return os; } public void setOs(String os) { this.os = os; } public String getChannel() { return channel; } public void setChannel(String channel) { this.channel = channel; } public String getToken() { return token; } public void setToken(String token) { this.token = token; } public double getLng() { return lng; } public void setLng(double lng) { this.lng = lng; } public double getLat() { return lat; } public void setLat(double lat) { this.lat = lat; }}
3.请求体
public class NetRequest<ParaType> { private NetProtocol protocol;//固定协议参数 private ParaType params;//自定义参数 public NetRequest() { } public NetProtocol getProtocol() { return protocol; } public void setProtocol(NetProtocol protocol) { this.protocol = protocol; } public ParaType getParams() { return params; } public void setParams(ParaType params) { this.params = params; }}
public class NetResult<DataType> { private int code;//错误码 0:请求成功 private String msg;//消息 private DataType data;//数据体 public NetResult() { } public NetResult(int code, String msg) { this.code = code; this.msg = msg; } public NetResult(int code, String msg, DataType data) { this.code = code; this.msg = msg; this.data = data; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public DataType getData() { return data; } public void setData(DataType data) { this.data = data; }}config:存放配置类,可以根据需要把配制方法写入一个类,也可以根据分类写到各自的文件中。其下还分为filter、interceptor和listener三个文件夹,分别存放自定义的过滤器、拦截器和监听器;
constants:专门存放常量的地方,其下有一个sql文件夹,专门设计存放各个数据类型的Repository(DAO层)需要进行数据操作的SQL语句;
library:与项目无关的库,这是架构的核心,是可以移植的。
library/custom:自定义的Repository、Service和Controller,全部都是预封装实现解耦和快速开发的;
library/model:与项目无关的通用的实体类,比如一些常见的body参数解析类:
public class PageRequest { private int page; private int pageSize; public int getPage() { return page; } public void setPage(int page) { this.page = page; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; }}
library/utils:工具类,如:
public class ResultUtils { /** * 构建一个字符串类型的返回结果 * * @param obj * @return */ public static String build(Object obj) { return JsonUtils.toJson(obj); } /** * 构建一个NetResult<DataType>类型的返回结果 * * @param obj * @param <DataType> * @return */ public static <DataType> NetResult<DataType> buildResult(DataType obj) { NetResult<DataType> result = new NetResult<>(0, "success", obj); return result; }}
locallibs:与项目有关的一些封装;
controller:项目展现层,紧密关联前端提供的接口需求文档,对从service层调用的各种数据进行组装,不进行复杂数据处理;
service:业务逻辑层,负责把从repository(DAO层)层或者其他手段获取的原始数据进行规范性加工,形成规范性数据,提供给controller组装发货;
dao:数据访问层,直接面对数据库,进行增删改查。
- Springboot架构设计(一)
- Springboot架构设计(二)封装
- QiYuAdmin-架构搭建一(SpringBoot实战)
- 架构设计(一)架构设计之常用信息格式
- 品《软件架构设计》(一)
- petshop4.0 (一)系统架构设计
- .NET初学者架构设计指南(一)
- 《软件架构设计》读书笔记(一)
- Extjs4 应用架构设计(一)
- ExtJS 4应用架构设计 (一)
- Java爬虫框架(一)--架构设计
- 系统架构的设计学 (一)
- 架构设计方法(一)入门
- 如何精心设计CDN架构(一)
- 初学《软件架构设计》 (一)
- QML程序架构设计(一)
- C#--三层架构设计方法(一)
- 系统架构设计(一)
- 9.16感
- String intern深入浅出
- linux 学习资源
- PIXI.js源码解析(3)——Container
- 如何传参,如何获取参数,如何调用参数
- Springboot架构设计(一)
- 做一个任性又偏执的人
- 算法1-1:统计数字问题
- JS数组去重
- PHP xdebug_debug_zval debug_zval_dump 使用
- oninput、onchange与onpropertychange事件的用法和区别
- 使用jQuery做网页定位导航特效(下)
- 一种二叉树遍历方法
- 2017 ACM-ICPC (西安赛区) C-Sum