栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Vue,SpringBoot基础上自己搭建前后端分离应用平台

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Vue,SpringBoot基础上自己搭建前后端分离应用平台

成为一个架构师是我的理想,一路向菜鸟级架构师前进哈哈哈

有些东西记了忘,忘了又记.自少自己觉得记忆力极差,什么AOP IOC的.要是现在有人问AOP有几种通知,好像5种吧,什么before,after,around什么玩意呀哈哈哈。shiro#24#24#24安全验证????

cookie,session,token啊啊啊啊啊啊啊,忘了呀,session存在服务器的是吧?要反问面试官了.

JDK代理,CGLIB代理?????SqlSessionFactory??????一万个问号,只能说时曾相识,他可能还认识我,反正我快不认识了.51一星期时间,将系统的整理边。

前端:

通过Vue脚手架创建Vue项目(需要安装Nodejs)

命令创建项目

 

 

Vue项目已经创建好了.其中的一些命令解释:

 用Vscode打开项目

 接下来,我们开始对原始的Vue项目进行改造,这里使用的UI为Element-UI

查看EelementUI官网 Element - The world's most popular Vue UI framework

 

npm install element-ui

因为项目里用到了less 

如果已经安装less和less-loader

这个是因为版本不兼容问题导致的,不断的报错中总结以下经验,首先去除掉之前的依赖

npm uninstall --save sass-loader

npm uninstall --save less-loader

npm uninstall --save less

然后严格控制版本下载依赖,

如果没有安装less直接用

npm install less-loader@4.1.0 --save-dev

npm install less@3.9.0 --save-dev
 

因为要向后端发送请求安装axios依赖:npm install axios

其实axios和ajax的区别可以简单理解成ajax的升级版

 

接下来,需要修改main.js和路由index.js,都做了解释,我需要将首页改为登录页面

 完整的Login.vue








启动下,Vue首页登录页面做好了

 

 现在开始搭建我们的后台SpringBoot

创建SpringBoot项目方式很多,常见的:

1.用Spring插件

2.直接创建Maven项目导入jar包和yml文件

这里用第二种方式:创建聚合工程,父子依赖

 

 现在也是大部分公司里搭建的项目,基本都是父子依赖,主要是在pom.xml里引入依赖,然后可以将src删除

项目结构

 父级工程引入的依赖项



    4.0.0

    com.test
    boottest
    1.0-SNAPSHOT
    
        test_common
    

    
        8
        8
    
    
    pom

    
    
        org.springframework.boot
        spring-boot-starter-parent
        2.4.5
        
    








    
        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
        
            org.springframework.boot
            spring-boot-starter-aop
        

        
        
            org.springframework.boot
            spring-boot-devtools
            runtime
            true
        
        
        
            org.projectlombok
            lombok
            true
        

        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        

        
        
            mysql
            mysql-connector-java
            runtime
        

        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.4.2
        

        
        
            redis.clients
            jedis
        
        
            org.springframework.data
            spring-data-redis
        


        
        
            io.springfox
            springfox-swagger2
            2.9.2
        
        
            io.springfox
            springfox-swagger-ui
            2.9.2
        

        

    

创建自己工具API

 子集会自动依赖父级

工具API可以写比较常用的比如POJO的基类,任何数据的插入相信创建时间,更新时间是少不了的,还有用户,角色,公用返回类等等可以放在工具API里 

然后创建个具体业务系统 这里取名test_manage

 

 在test_manage的pom.xml文件里我们需要添加依赖,依赖于工具API

然后创建个SpringBoot的启动文件,和yml文件配置端口和 数据库,注意SpringBoot启动文件要放在所有包文件之前,比如说com.test.XX.XX,那么启动文件要放在com或com.test下,不然无法扫描到某些类

大概就先这样配置完成,写个Controller测试下启动

 

 

 OK的,写了半天以为自己写错了.还算顺利边写边发文,一下快4点了

我们先来设置一些配置,比如mybatis或者mybatis-plus,分页,swagger等等

这里统一用mybatis.前面依赖里的mybatis-plus可以注释掉

引入mybatis依赖,和分页依赖



    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    2.2.2




    com.github.pagehelper
    pagehelper-spring-boot-starter
    1.2.10

整体的项目结构:

 

 测试了一下分页,也是OK的

具体的一些代码,感觉写不下去了,累死......

 

这个,那个业务不写了.好累

看两张图,关于过滤器和拦截器

 

 第二张自己画的好累

这里写个过滤器(Filter),拦截器(Interceptor),监听器我也不知道在SpringBoot中如何去写,算了吧,看开点.

这里介绍下过滤器,拦截器,监听器的概念

范围不同:过滤器是Servlet规范规定的,只能用于Web程序中,而拦截器既可以用于Web程序,也可以用于Application、Swing程序中

规范不同:过滤器是在Servlet规范中定义的,是Servlet容器支持的。而拦截器是在Spring容器内的,是Spring框架支持的

深度不同:过滤器只能在Servlet前后起作用,而拦截器能够深入到方法前后、异常抛出前后等,因为拦截器的使用具有更大的弹性,在Spring框架中优先使用拦截器

机制不同:过滤器是基于函数回调的,而拦截器是基于Java的反射机制拦截器只能对controller请求起作用,而过滤器则可以对几乎所有的请求起作用

拦截器可以访问controller的上下文、值栈里的对象,而过滤器不能访问

在controller的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑

简单些讲,过滤器是属于servlet规范的,学习过servlet的应该指导DisPatcherServlet的由来,因为原先要写N多Servlet, 而过滤器拦截在DisPatcherServlet之前,SpringMVC的拦截器在去找具体Controller前进行拦截.,一般拦截器很多公司用来查看token,至少我看到的是这样

两步:1.自定义一个拦截器实现HandlerInterceptor ;2.注册拦截器实现WebMvcConfigurer

写个拦截器

 注册拦截器

简单用的话,你也可以看下一个请求从Controller到返回所用的时间,而且一个系统允许有多个拦截器

先后顺序看你注册前后感觉象切面,但是看了下源码又像另开线程做的.不懂啊。

关于跨域:

前端启动端口设置了8080.而后端是8090端口,这样就产生了跨域问题

百度了下跨域的准确解释:

浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域。
在前后端分离的模式下,前后端的域名是不一致的,此时就会发生跨域访问问题。在请求的过程中我们要想回去数据一般都是post/get请求,所以..跨域问题出现。

对于后端SpringBoot项目来说,很简单在控制器上加

@CrossOrigin注解

该注解可以指定具体某个方法

跨域问题:前端启动端口号为8080,

而后端是8090,这样就存在跨域问题

具体的可百度对跨域的解释

来个好玩的AOP,那个忘记了的5种通知哈哈哈哈

AOP(面向切面编程),比如说系统需要记录用户行为日志.

我们以登录来说,比如记录登录ip,时间,访问的接口传入参数等等

具体做法有很多.这只是其中一种方式

1.自定义注解

 2.在需要记录的接口加该注解

 3.写AOP

 可以设计对应的表.那么存在的问题是,客户体验不好,毕竟耗时.如何在做好用户行为日志同时,又不影响用户体验.

那么我们可以将记录用户行为日志的方法另开一个线程

具体的做法比如说

一招搞定,加@Async

 

 注意:

在Spring框架里除了Aop类需要写 @Aspect 还需要在启动类加@EnableAspectJAutoProxy  SpringBoot里默认都已经配置好了  不需要在启动类加注解

而@Async注解需要在启动类加注解

 这里另外给大家一个方法,我们不用spring初始化线程池,自己来

public class TaskExcutor {
    private TaskExcutor(){}

    
    private static class ExcutorHolder{
        
        private static final ExecutorService EXCUTOR = new ThreadPoolExecutor(
                5,30,60L, TimeUnit.SECONDS,
                new SynchronousQueue(),
                new ThreadPoolExecutor.CallerRunsPolicy());
    }
    
    private static class SchedulerHolder{
        private static final ScheduledExecutorService SCHEDULER =
                Executors.newScheduledThreadPool(5);
    }

    
    public static Future submit(Runnable task){
        return ExcutorHolder.EXCUTOR.submit(task);
    }

    
    public static ScheduledFuture schedule(Runnable task,long delay, TimeUnit unit){
        return SchedulerHolder.SCHEDULER.schedule(task,delay,unit);
    }
}

具体使用方法,我们就不加@Async了能怎么地.很少写lamda表达式,以显风骚

 关于SpringMvc的全局异常处理,其实用到的也是AOP,所以AOP用处还是很强大的.

改天继续

关于全局异常处理.

具体异常该怎么办

比如new 一个返回类

if(e instanceof UnknownAccountException){
    result.setMessage("用户名不存在");
}else if(e instanceof LockedAccountException){
    result.setMessage("账户已被锁定");
}else if(e instanceof IncorrectCredentialsException){
    result.setMessage("密码不正确");
}else if(e instanceof AuthorizationException){
    result.setMessage("没有权限");
}else{
    result.setMessage("认证或授权失败");
}
return result;

等等随自己喜欢

关于SpringBoot的定时任务

超级简单

 其实工作中常用到的基本就这些了.

另外说个

pro环境:生产环境

test环境:测试环境

dev环境:开发环境

开发中,各个环境的端口,数据库可能不同。

其实很简单.


 

那么我们就可以指定配置文件,还可以通过maven配置profiles打包,自己选择dev配置还是prod配置,以及打包完整指令

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/850520.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号