SpringBoot2.1版本的我的应用开发框架 - 从0-1搭建我的框架

前言

一直以来写代码都是在别人写好的框架上写代码,其实我一直想本身搭一个框架试一试,正好有机会,我就试着本身搭一下,搭的好与坏我以为不重要,重要的是在此次搭框架的过程当中,必定能学习到不少东西。在这里我借鉴了网上不少大神的博客,主要参考的仍是下面连接的博主博客,第一次搭建也许在大局观以及知识和经验的储备不足,若有什么错误的地方,望即时纠正,项目采用springboot多模块结构。html

后端项目地址:SpringBoot2.1版本的我的应用开发框架前端

前端项目地址:ywh-vue-adminvue

主要参考:基于SpringBoot搭建应用开发框架java

springboot基础学习:springboot学习目录nginx

建立Springboot基础结构

左侧选择Spring Initializr 后选择jdk的版本,我这里用的是jdk1.8版本git

新建项目01

根据本身的命名规范设置Group和Artifact,并选择Type类型为Maven POMgithub

pom

选择依赖那不选择任何依赖直接下一步,直到定义项目的名称,以及项目存储的地方,点击finish完成本次建立,记得选择本项目的存储位置,最终项目的结构如此。web

20190409161436

父pom文件中标签中的jar要改为pom,必定要修改,不然各个模块之间没法传递依赖redis

<groupId>com.ywh</groupId>
<artifactId>springcloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 父pom.xml中的必须为pom类型 便于子模块之间传递依赖 -->
<packaging>pom</packaging>
复制代码

建立Module(子模块)

在根据参考的博客和网上一些博客。分模块有不少种分法,大多数是根据controller、service、dao等等分模块的,这种的分法我认为分的太细了,这种的我以为适用于大公司,人多的那种,每一个人负责一个模块进行开发,出了错误也能够快速定位,而且有具体的人负责修改就能够了(也有多是个人认知太浅薄,理解错了)。算法

我暂时主要分为:

  • ywh-starter-core —— 用来放本身写的业务代码
  • ywh-starter-cache —— 用来放项目缓存
  • ywh-starter-security —— 用来作权限认证
  • ywh-starter-common —— 放一些工具类,以及一些基础的常量、变量、枚举类等

在项目上右键>New>Module,首先建立core子模块

建立子模块

Group

建立Module也是springboot项目,不过在选择项目保存的时候必定要在本项目中新建一个文件来保存咱们的子模块,这样才不会模块的结构跑到咱们的外面来,以下图

保存子模块

按着以上方式建立ywh-starter-core,ywh-starter-cache,ywh-starter-common,ywh-starter-security等模块,建立全部模块之后的项目结构以下:

项目整体结构

修改项目通用配置

项目建立好之后咱们对项目的全部pom.xml文件修改一下,首先是子模块pom.xml中继承父项目而且把spring-boot-starterspring-boot-starter-test依赖删除便可,由于咱们会在父pom.xml中添加web依赖和test依赖,子模块继承之后会使用父pom.xml的依赖,子模块以core为例子,其余按着core修改便可,其次是父pom.xml中添加子模块的配置,父pom就是上图中最外侧的pom文件

<!-- 继承父项目 -->
<parent>
	<groupId>com.ywh</groupId>
	<artifactId>springcloud</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<relativePath>../pom.xml</relativePath> <!-- lookup parent from repository -->
</parent>
复制代码
<!-- 子模块 -->
<modules>
	<module>ywh-starter-cache</module>   <!-- 缓存子模块 -->
	<module>ywh-starter-common</module>   <!-- 工具模块 -->
	<module>ywh-starter-core</module>   <!-- 写代码的子模块 -->
	<module>ywh-starter-security</module>  <!-- 权限子模块 -->
</modules>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>
复制代码

肯定模块之间的依赖关系

子模块之间也是有依赖关系的,不然在core中是没法调用其余模块中的东西的,因此我这里的依赖关系是core->security->cache->common,这里的依赖关系先暂时定下,之后有变化时能够再进行肯定修改,必定要注意不要循环依赖(就是core->security,security->core,这样就会致使循环依赖),以core为例,修改pom.xml以下:

<dependency>
    <groupId>com.ywh</groupId>
    <artifactId>security</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 按照上面的所属依赖关系 修改每个子模块的pom.xml -->
复制代码

在父pom.xml中引入一些咱们公用的依赖分别以下,关于什么依赖能够放在父pom.xml下什么能够放在其余子模块下,我是这么理解的,当一个依赖有两个以上的子模块使用的时候,就要把这个依赖提出来放到父pom下,这个依赖只有这一个子模块使用,就能够单独放在某一个子模块下。固然了为了图方即可以把全部的依赖都放在父pom.xml中。

引入公共依赖

在父pom文件中引入一些公用依赖

<!-- web依赖 -->
<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>
 
<!-- 引入fastjson依赖包 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.53</version>
</dependency>
 
<!-- io流的依赖 拥有快速读写,文件目录拷贝与删除等等,io的操做 目录与文件的监听等功能 -->
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
</dependency>
 
<!-- 对文件上传 下载的依赖 -->
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>
 
<!-- 提供了丰富的集合操做 -->
<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.1</version>
</dependency>
 
<!-- 提供了基本编码解码算法,如base64,md5,sha等 -->
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.11</version>
</dependency>
 
<!-- 丰富的工具类 如StringUtils -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.8.1</version>
</dependency>
 
<!-- 链接池 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.6.0</version>
</dependency>
复制代码

建立yml文件并修改banner图

Spring Boot使用一个全局的配置文件application.properties或application.yml,放置在src/main/resources目录下。咱们能够在这个全局配置文件中对一些默认的配置值进行修改,把全部的application.properties的后缀名修改为.yml,这个不是必须的,若是习惯.properties的方式也能够不修改,是同样的,具体有哪些配置可到官网查找,有很是多的配置,不过大部分使用默认便可。 具体有哪些配置可到官网查找,有很是多的配置,不过大部分使用默认便可 SpringBoot官方配置文件参考

我增长了开发环境(dev)和生产环境(prod)的配置文件,并经过在application.yml中设置spring.profiles.active=dev来指定当前环境,yml文件必须以application开头接 -*。

yml文件

替换springboot项目启动时控制台显示的banner图,生成banner图这个网站生成一个本身项目的banner。建立banner.txt并放到resources根目录下,我是以core启动项目的,因此我放到了core的子模块下,启动之后就能看到修改后的banner图了。

banner图

修改启动类CoreApplication,扫描配为com.ywh,若是不增长,在其余的模块中添加的配置类会致使扫描不到的状况

@SpringBootApplication(scanBasePackages = "com.ywh")
复制代码

集成Druid + Mybatis-Plus

实现基础controller、service、前端封装返回json体等

日志自定义和全局异常处理

集成Redis缓存

集成SpringSecurity

整合vue实现先后端分离

使用docker + Nginx打包部署

结语

这一篇笔记终于写完了,从项目的建立到部署的流程所有走了一遍,实现了从0-1,我知道这里的问题还有不少;在搭建这个框架之间解决了之前有的疑问,可是又多了些新的疑问,这都须要以后的学习来解答,成功不是一蹴而就,要慢慢来;我还想把这个框架丰富一下,修改为微服务的架构,下一阶段学习

  • springcloud和dubbo
  • redis进阶
  • nginx的系统学习
  • es搜索引擎
  • 消息队列

等等吧,一些中间件的学习

回看我前几章的笔记,其实还比较墨迹的,并且代码还不优雅(由于理解的仍是不够透彻吧),什么叫作优雅,在我看来就是没有多余的操做,简单明了,不会把一件事情弄得很复杂,这一点还须要很大的努力,其实呢在我写这些笔记的时候,个人想法就是,一是给本身记笔记,之后回看的时候有一个记忆点,二呢就是给像我同样迷茫不知道该学什么的提供一种思路,毕竟我这个所谓的我的框架只是把一些东西放在一块儿了,有点东北乱炖的感受,可是最起码能够当一个参考,这里面用到的东西仍是值得一学的。

我以为做为一个年轻人,要不断的充实本身的知识,只有学的更多,作东西的时候才能思考的更多,解决的办法也就更多。

我喜欢编程,编程让我有成就感,让我有学下去的动力。

相关文章
相关标签/搜索