Springboot架构设计(一)

原创 2017年09月16日 17:01:19

本来一直做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;
    }
}


4.返回体


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:数据访问层,直接面对数据库,进行增删改查。



版权声明:本文为博主原创文章,未经博主允许不得转载。

基于Spring Boot和Spring Cloud实现微服务架构学习(一)-Spring框架介绍

基于Spring Boot和Spring Cloud框架开发的微服务架构学习(一)-Spring框架介绍总结 看了几周Spring相关框架的书籍和官方demo,是时候开始总结下这中间的学习感悟。 首先...
  • zeb_perfect
  • zeb_perfect
  • 2016年07月18日 21:07
  • 57195

初识Spring Boot框架

前面的铺垫文章已经连着写了六篇了,主要是介绍了Spring和SpringMVC框架,小伙伴们在学习的过程中大概也发现了这两个框架需要我们手动配置的地方非常多,不过做JavaEE开发的小伙伴们肯定也听说...
  • u012702547
  • u012702547
  • 2016年12月19日 20:42
  • 105209

Spring 架构篇——使用 Spring Boot 进行高效开发

Spring Boot 化繁为简,简化配置,不需要任何 xml 配置即可实现 Spring 的所有配置,也是微服务的入门级微框架,Spring Boot 的自动配置是通过 Spring 4.x 的条件...
  • smartbetter
  • smartbetter
  • 2016年07月26日 21:46
  • 3577

Spring Boot核心原理-自动配置

作者简介:朱清,毕业于电子科技大学,现任职冰鉴科技高级研发经理,主导冰鉴风控系统架构设计和研发。 之前在公司内部推行spring boot时,有同事跟我提到过,感觉换到spring boot这个...
  • xiaobing_122613
  • xiaobing_122613
  • 2017年02月09日 09:00
  • 6995

Spring Boot 框架介绍和使用

本文参考自Spring Boot文档。Spring Boot 简介Spring框架功能很强大,但是就算是一个很简单的项目,我们也要配置很多东西。因此就有了Spring Boot框架,它的作用很简单,就...
  • u011054333
  • u011054333
  • 2017年03月17日 23:33
  • 4890

springboot 完整企业项目搭建实记

昨天搭建ssm框架时突然想到可以搭建springboot来完美解决配置复杂的问题,今天学习了一下springboot的搭建,在此记录一下搭建的过程和踩过的坑这里给自己定一个该框架搭建完成的目标,如下 ...
  • u013187139
  • u013187139
  • 2017年04月01日 15:27
  • 14416

SpringBoot初始教程之项目结构(一)

SpringBoot初始教程之项目结构1 简介Spring Boot makes it easy to create stand-alone, production-grade Spring base...
  • veZunShao
  • veZunShao
  • 2016年11月07日 19:49
  • 9345

一起学JAVA之《spring boot》03 - 开始spring boot基本配置及项目结构

一、导航本节内容简介: 1. spring boot 配置文件,使用@SpringBootApplication注解 2. spring boot 修改Java版本 和项目编码 ...
  • likeaijiaqi
  • likeaijiaqi
  • 2017年06月27日 23:31
  • 2004

基于SpringBoot的微服务架构实践

引言 微服务是近期火爆IT业界的新概念,在某种意义上这算是一个全新架构,微服务继承了面向服务架构(SOA)的整体思路,强调将巨石型应用或服务拆分为由微小的服务应用。按照通常理解和定义,微服务是指...
  • u013189665
  • u013189665
  • 2017年03月20日 19:03
  • 4578

spring boot(1)-Hello World

spring boot简介 spring boot是由spring官方推出的一个新框架,对spring进行了高度封装,是spring未来的发展方向。spring boot功用众多,其中最主要的功能就是...
  • wangb_java
  • wangb_java
  • 2017年04月15日 19:01
  • 2919
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Springboot架构设计(一)
举报原因:
原因补充:

(最多只允许输入30个字)