springboot整合logback日志框架

一、添加依赖

但是呢,实际开发中我们不需要直接添加该依赖,你会发现spring-boot-starter其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 Logback+SLF4J。而 spring-boot-starter-web 包含了spring-boot-stater,所以我们只需要引入web组件即可:

二、默认配置

默认情况下Spring Boot将日志输出到控制台,不会写到日志文件。如果要编写除控制台输出之外的日志文件,则需在application.properties中设置logging.file或logging.path属性

三、logback-spring.xml

可以看到上面那种方式配置简单,但是能实现的功能也非常有限,如果想要更复杂的需求,就需要下面的定制化配置了。

Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,将xml放至 src/main/resource下面。

 

 

0

Spring boot 2.0 版本报错 ResourceHttpRequestHandler cannot be cast to HandlerMethod

报错

java.lang.ClassCastException: org.springframework.web.servlet.resource.ResourceHttpRequestHandler cannot be cast to org.springframework.web.method.HandlerMethod

原因

Spring boot 2.0对静态资源也进行了拦截,当拦截器拦截到请求之后,但controller里并没有对应的请求时,该请求会被当成是对静态资源的请求。此时的handler就是 ResourceHttpRequestHandler,就会抛出上述错误。

解决办法

在WebMvcConfiguration的拦截器那里排除静态资源的请求路径

然后再preHandler报错那里加上 instanceof关键字进行判断。

0

使用maven-assembly-plugin插件进行自定义打包

介绍

Maven的Assembly Plugin使开发人员能够将项目输出组合到一个可分发的存档中,该存档还包含依赖项,模块,站点文档和其他文件。

您的项目可以使用预制的装配体描述符之一轻松构建分发“装配体”。 这些描述符处理许多常见的操作,例如将项目的文件以及生成的文档打包到单个zip存档中。 或者,您的项目可以提供自己的描述符,并且可以对程序集中的依赖项,模块,文件集和单个文件的打包方式进行更高级别的控制。

当前,它可以创建以下格式的发行版:

  • zip
  • tar
  • tar.gz (or tgz)
  • tar.bz2 (or tbz2)
  • tar.snappy
  • tar.xz (or txz)
  • jar
  • dir
  • war
  • 等等

实战

pom.xml

工程截图

package.xml

pid文件

web-server.bat脚本

web-server.sh脚本

打包命令

打包完的截图

打包完的截图
打包完的截图
解压后的文件
解压后的文件

lib文件下放了所有用到的jar包,要想运行程序,直接运行脚本文件即可。很方便。使用maven-assembly-plugin插件进行自定义打包就介绍完成了。

0

Spring Boot项目使用Docker和Kubernetes(k8s)进行容器化部署

Spring Boot项目的结构

项目名称是Test

  1. 项目根据环境不同需要读取不同的application.yml
  2. 项目使用logback作为日志工具,需要读取一个logback-spring.xml的配置文件。
  3. 项目还需要读取一个properties文件。
  4. 为方便,所有Kubernetes资源均在default namespace下。
namespace

Kubernetes的许多资源对象都隶属于某个namespace,namespace是对资源的逻辑划分,不同namespace下的资源可以做到简单隔离。

准备工作

镜像

针对项目jar包,我们需要将其打成一个Docker镜像,而Dockerfile就是打包过程的指导文件,类似于make过程中的Makefile

jar->Docker镜像

以下是Dockerfile的内容。


  1. FROM表示要生产的镜像的基础镜像,我们使用jdk8。
  2. VOLUME表示定义一个匿名卷,也可以理解为创建一个目录,这里的/tmp是由于tomcat的需要。
  3. ADD表示将项目编译后的jar包拷贝到镜像里,默认为根目录/
  4. ENTRYPOINT表示入口点,即容器启动时执行的命令,通过上述组合,实际执行的命令为:java -Djava.security.egd=file:/dev/./urandom -jar -Dspring.config.location=/etc/config/application.yml -Dlogging.config=/etc/config/logback-spring.xml -DconfPath=/etc/config /test.jar
    注意这里的配置路径/etc/config还不存在,下文中会创建和用到。

配置

Kubernetes ConfigMap

ConfigMap可以用来保存单个的键值对,也可以保存配置文件。

配置文件->ConfigMap

针对项目配置,需要做的改造就是把配置文件(应用、日志、业务)转化成ConfigMap对象,从而让Kubernetes化后的应用能够读取。

以下是test-config.yml的内容。


  1. 注意配置文件按照yaml规范缩进。
  2. data属性里记录实际的配置,本质上仍是键值对,如第一个数据的key为application-yml,内容为其配置内容。

应用部署定义

Kubernetes Deployment

Deployment是一种控制容器组的对象,在Deployment中定义一个期望的容器组的数量,Deployment在创建后会维持这个数量,当数量少于期望时会新建容器组,反之会停止超额的容器组。

部署->Deployment

针对本项目,对应的Deployment配置如下。

test-deployment.yml内容如下。


  1. replicas即为此Deployment期望的容器组的数量。
  2. metadata.labels用于跟下文中的Service对接。
  3. spec.selector.matchLabels与容器组的spec.template.metadata.labels对接。
  4. spec.template.spec.volumes定义了一些卷,name为卷名。
    • 如果定义了configMap属性,则items属性的key对应上文中ConfigMap对象的名称,path则为要输出的文件,如第一个item的行为是读取ConfigMap对象test-config的第一个数据的内容(key=application-yml),并将其保存为application.yml配置文件。
    • 如果定义了hostPath属性,则是宿主机上的同名目录,如此处将容器日志输出到宿主机的/var/log/test路路径。
  5. spec.template.spec.containers定义了容器组中的容器,包括容器名、镜像、容器暴露的端口,以及要挂载的卷,在volumeMounts中,name为上述卷名,mountPath为挂载路径,从而容器内部存在/etc/config路径,且可以读取到上述配置文件。

服务定义

Kubernetes Service

默认情况下,Kubernetes集群内的容器是不能被集群外访问的。此时我们需要将应用连接到Service,Service可以对集群内部暴露,也可以对外暴露宿主机端口,还能通过LB VIP暴露服务。

外部访问->Service

针对本项目,对应的Service配置如下。

test-service.yml内容如下。


  1. spec.selector用于连接容器组,与上文中Deployment定义的容器组的labels对应。
  2. spec.type定义Service的暴露方式,NodePort为对集群外暴露,用户通过宿主机端口访问应用,即:
    • 用户->宿主机IP:30777->Service:7777->容器:7777

部署工作

编译jar包

不论使用Maven还是Gradle,生成jar包,此处不细说。

生成Docker镜像

使用以下命令生成Docker镜像,当然,前提是生成镜像的机器上需要有基础镜像openjdk:8-jdk-alpine


同时,需要让所有Kubernetes的Node能获取到该镜像,有两种途径:

  1. 将该镜像打包并在所有Node上加载。

  2. 将该镜像推送到所有Node均能访问的镜像仓库里。
创建Kubernetes资源

分别创建ConfigMap、Deployment、Service。


验证

查看资源对象是否正常。


访问服务。


0

vue + springboot + poi 实现模板文件下载

前文《el-upload+springboot实现excel文件手动上传导入数据》讲了数据导入功能,但其实在导入之前一般都是要有个下载导入模板的功能。这篇文章介绍下这个功能。

element-ui的button代码

js代码

springboot的controller代码

0

el-upload+springboot实现excel文件手动上传导入数据

vue 前端代码

springboot 后端代码

0

vue+springboot+hutool-poi实现导出excel

vue

springboot

hutool-poi pom 依赖

总结

以上就是vue+springboot+hutool-poi实现导出excel核心代码

+2

使用Dockerfile为SpringBoot应用构建Docker镜像

Dockerfile常用指令

ADD

用于复制文件,格式:

示例:

ENTRYPOINT

指定docker容器启动时执行的命令,格式:

示例:

ENV

用于设置环境变量,格式:

示例:

EXPOSE

声明需要暴露的端口(只声明不会打开端口),格式:

示例:

FROM

指定所需依赖的基础镜像,格式:

示例:

MAINTAINER

指定维护者的名字,格式:

示例:

RUN

在容器构建过程中执行的命令,我们可以用该命令自定义容器的行为,比如安装一些软件,创建一些文件等,格式:

示例:

使用Dockerfile构建SpringBoot应用镜像

编写Dockerfile文件

使用maven打包应用

在IDEA中双击package命令进行打包:

打包成功后展示:

将应用jar包及Dockerfile文件上传到linux服务器:

在Linux上构建docker镜像

在Dockerfile所在目录执行以下命令:

输出如下信息:

查看docker镜像:

展示图片

运行mysql服务并设置

1.使用docker命令启动:

2.进入运行mysql的docker容器:

3.使用mysql命令打开客户端:

4.修改root帐号的权限,使得任何ip都能访问:

5.创建mall数据库:

6.将mall.sql文件拷贝到mysql容器的/目录下:

7.将sql文件导入到数据库:

运行mall-tiny-docker-file应用

访问接口文档地址http://192.168.3.101:8080/swagger-ui.html:

0

RequestMapping注解中consumes与produces的区别

说到这两个参数,不得不先回顾一下HTTP协议Header中的两个东西
ContentType 和Accept

在Request中
ContentType 用来告诉服务器当前发送的数据是什么格式
Accept 用来告诉服务器,客户端能认识哪些格式,最好返回这些格式中的其中一种

consumes 用来限制ContentType
produces 用来限制Accept

0

一般服务器生产环境SpringBoot里使用AsyncEventBus的参考配置

yml配置

对应映射bean

eventBus配置类

这边需要关注下ExecutorService的配置

订阅异常处理类

0