SpringBoot Web开发之系统任务启动与路径映射和框架整合

目录
  • 本章概要
  • 启动系统任务
    • CommandLineRunner
    • ApplicationRunner
  • 整合Servlet与Filter和Listener
  • 路径映射

本章概要

  • 启动系统任务
  • 整合 Servlet、Filter 和 Listener
  • 路径映射

启动系统任务

有一些特殊的任务需要在系统启动时执行,例如配置文件加载,数据库初始化等操作。如果没有使用 Spring Boot ,这些问题可以在 Listener 中解决。Spring Boot 对此提供了两种解决方案 CommandLineRunner 和 ApplicationRunner。两者基本一致,差别主要体现在参数上。

CommandLineRunner

Spring Boot 项目在启动时会遍历所有 CommandLineRunner 的实现类并调用其中的 run 方法,如果整个系统中有多个 CommandLineRunner 的实现类,那么可以使用 @Oder 注解对这些实现类的调用顺序进行排序。

在一个 Spring Boot Web 项目中(Spring Boot 项目引入 Web 依赖)添加两个 CommandLineRunner,分别如下:

@Component
@Order(1)
public class MyCommandLineRunner1 implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("Runner1>>>"+ Arrays.toString(args));
    }
}
@Component
@Order(2)
public class MyCommandLineRunner2 implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println("Runner2>>>"+Arrays.toString(args));
    }
}

代码解释:

  • @Order(1) 注解用来描述 CommandLineRunner 的执行顺序,数字越小越先执行。
  • run 方法中是调用的核心逻辑,参数是系统启动时传入的参数,即入口类中 main 方法的参数(在调用 SpringApplication.run 方法时被传入 Spring Boot 项目中)

在系统启动时,配置传入的参数,以 IDEA 为例,配置方式如下:

步骤01:单击右上角的编辑启动配置,如图:

步骤02:在打开的新页面中编辑 Program arguments:

启动项目,启动日志如图:

ApplicationRunner

在一个Spring Boot Web 项目中信件两个 ApplicationRunner,代码如下:

@Component
@Order(2)
public class MyApplicationRunner1 implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        List<String> nonOptionArgs = args.getNonOptionArgs();
        System.out.println("1-nonOptionArgs>>>" + nonOptionArgs);
        Set<String> optionNames = args.getOptionNames();
        for (String optionName : optionNames) {
            System.out.println("1-key:" + optionName + ";value:" +
                    args.getOptionValues(optionName));
        }
    }
}
@Component
@Order(1)
public class MyApplicationRunner2 implements ApplicationRunner {
    @Override
    public void run(ApplicationArguments args) throws Exception {
        List<String> nonOptionArgs = args.getNonOptionArgs();
        System.out.println("2-nonOptionArgs>>>" + nonOptionArgs);
        Set<String> optionNames = args.getOptionNames();
        for (String optionName : optionNames) {
            System.out.println("2-key:" + optionName + ";value:" +
                    args.getOptionValues(optionName));
        }
    }
}

代码解释:

  • @Order 注解依然是用来描述执行顺序的,数字越小越优先执行
  • @不同于 CommandLineRunner 中的 run 方法的 String 数组参数,这里 run 方法的参数是一个 ApplicationArguments 对象,如果想从 ApplicationArguments 对象中获取入口类中的 main 方法接收的参数,调用 ApplicationArguments 中的 getNonOptionArgs 方法即可。ApplicationArguments 中的getOptionNames方法用来获取项目启动命令中参数的 key ,例如将本项目打成 jar 包,运行 java -jar xxx.jar -name=Michael 命令来启动项目,此时 getOptionNames方法获取到的就是 name ,而 getOptionValues 方法则是获取相应的 value。

打包程序,执行如下命令启动项目:

java -jar chapter04-0.0.1-SNAPSHOT.jar --name=Michael --age=99 斗罗大陆 唐家三少

日志如下:

整合Servlet与Filter和Listener

一般情况下,使用Spring 、 Spring MVC 这些框架后,基本上就告别 Servlet、Filter 、 Listerer 了,但是有时在整合一些第三方框架时,可能还是不得不使用 Servlet ,比如在整合某报表插件时就需要使用 Servlet。Spring Boot 中对于整合这些基本的 Web 组件也提供了很好的支持。

在一个 Spring Boot Web 项目中添加如下三个组件:

@WebServlet("/my")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp){
        doPost(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp){
        System.out.println("name>>>"+req.getParameter("name"));
    }
}
@WebServlet("/my")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp){
        doPost(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp){
        System.out.println("name>>>"+req.getParameter("name"));
    }
}
@WebFilter("/*")
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig){
        System.out.println("MyFilter>>>init");
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("MyFilter>>>doFilter");
        chain.doFilter(request,response);
    }
    @Override
    public void destroy() {
        System.out.println("MyFilter>>>destroy");
    }
}
@WebListener
public class MyListener implements ServletRequestListener {
    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
        System.out.println("MyListener>>>requestDestroyed");
    }
    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        System.out.println("MyListener>>>requestInitialized");
    }
}

代码解释:

  • 定义了三个基本的组件,分别使用 @WebServlet 、@WebFilter、@WebListener 三个注解进行标记
  • 这里以 ServletRequestListener 为例,但是对于其他的 Listener ,例如 HttpSessionListener、ServletContextListener 等也是支持的

在项目入口类上添加 @ServletComponentScan 注解,实现对 Servlet、Filter 、Listener 的扫码,如下:

@SpringBootApplication
@ServletComponentScan
public class Chapter04Application {
    public static void main(String[] args) {
        SpringApplication.run(Chapter04Application.class, args);
    }
}

最后启动项目,浏览器输入"http://localhost:8081/my?name=Michael",可以看到相关日志,如下:MyListener>>>requestInitialized
MyFilter>>>doFilter
name>>>Michael
MyListener>>>requestDestroyed

路径映射

一般情况下,使用了页面模板后,用户需要通过控制器才能访问页面。有一些页面需要在控制器中加载数据,然后渲染才能显示出来;还有一些页面在控制器中不需要加载数据,只是完成简单的跳转,对于这种页面,可以直接配置路径映射。例如,有两个 Thymeleaf 做模板的页面 login.html 和 index.html ,直接在 addViewControllers 方法配置映射关系即可:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry){
        registry.addViewController("/login").setViewName("login");
        registry.addViewController("/index").setViewName("index");
    }
}

到此这篇关于SpringBoot Web开发之系统任务启动与路径映射和框架整合的文章就介绍到这了,更多相关SpringBoot 框架整合内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java SpringBoot安全框架整合Spring Security详解

    目录 1.工业级安全框架介绍 2.建议搭建Spring Security环境 2.1在pom.xml中添加相关依赖 2.2创建Handler类 2.3创建简单的html和配置相关thymeleaf的路径 2.4最后再加个启动类,那么我们的整合测试就完成勒 2.5成果展示 用户名默认user,密码则随机生成的这串数字 3.进阶版使用 3.1用户名和密码自定义 3.2在config包下创建Encoder 3.3赋予账号角色权限 总结 1.工业级安全框架介绍 Spring Security基于Spri

  • 使用SpringBoot设置虚拟路径映射绝对路径

    目录 SpringBoot 设置虚拟路径映射绝对路径 下面我们就来代码实现下 springboot打war包图片的虚拟路径映射 在html图片的路径如图 然后要映射到阿里云Linux服务器上路径 映射方法 在Host节点加上下面的 这里顺便放上后台接收上传头像的代码 SpringBoot 设置虚拟路径映射绝对路径 上传图片到本地路径,得到的是一个绝对路径例如:D:\picpath\O48681516429132485.png 但是前台需要的数据是这样的 :http://localhost:808

  • SpringBoot框架整合SwaggerUI的示例代码

    整合swagger进行模块测试 注意事项:为方便SpringBoot更好的整合Swagger,需要专门放置在一个模块中(maven子工程) 创建公共模块,整合swagger,为了所有模块进行使用 common/pom.xml,导入相关的依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-

  • Springboot框架整合添加redis缓存功能

    目录 一:安装Redis 二:添加Redis依赖 三:添加Redis配置信息 四:创建RedisConfigurer 五:创建Redis常用方法 六:接口测试 Hello大家好,本章我们添加redis缓存功能 .另求各路大神指点,感谢 一:安装Redis 因本人电脑是windows系统,从https://github.com/ServiceStack/redis-windows下载了兼容windows系统的redis 下载后直接解压到自定义目录,运行cmd命令,进入到这个文件夹,在这个文件夹下运

  • SpringBoot路径映射实现过程图解

    这篇文章主要介绍了SpringBoot路径映射实现过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 当然这个功能并非是springboot特有的,只是springboot提供了更简便的方法以供使用. 传统情况下我们跳转一个动态页面且并没有数据,也需要在controller中写一个跳转的controller. 也就是下面情况 这个时候我们就可以使用springboot的路径映射 我们只需要创建一个WebMvconfig类实现WebMvcCo

  • springboot文件虚拟路径映射方式

    目录 springboot文件虚拟路径映射 在application.properties配置文件中配置 springboot 配置文件虚拟路径 供外部访问 第一步:配置application.yml 第二步:添加 Configuration 文件 重启 springboot文件虚拟路径映射 在application.properties配置文件中配置 spring.http.multipart.location= D:/ spring.mvc.static-path-pattern=/** s

  • SpringBoot框架整合Mybatis简单攻略

    目录 步骤 1 添加mybatis-starter依赖 步骤 2 如何配置mybatis到SpringBoot项目 步骤 3 测试查询 步骤 4 mybatis注解方式 步骤 5 用注解方式做一个新增操作 步骤 6 整合PageHelper分页插件 步骤 7 拓展知识:mybatis四种传参方式 步骤 8 Mybatis中#{}和${}的区别是什么? 步骤 9 Mybatis中模糊查询like语句该怎么写? 步骤 10 SpringBoot整合Mybatis-plus 步骤 11 Mybatis

  • SpringBoot图片上传和访问路径映射

    简介 做移动端对接,框架用的SpringBoot,接口RESTful,实现一个图片上传功能,图片上传是个经典的应用场景了,完成后,做个笔记记录一下,希望能帮到攻城狮们 开发步骤 1.先贴图片上传工具类 package com.prereadweb.utils; import java.io.File; import java.io.FileOutputStream; import java.util.UUID; /** * @Description: 文件工具类 * @author: Yangx

  • Springboot安全框架整合SpringSecurity实现方式

    目录 1.工业级安全框架介绍 2.建议搭建Spring Security环境 2.1在pom.xml中添加相关依赖 2.2创建Handler类 2.3创建简单的html和配置相关thymeleaf的路径 2.4最后再加个启动类,那么我们的整合测试就完成勒 2.5成果展示 用户名默认user,密码则随机生成的这串数字 3.进阶版使用 3.1用户名和密码自定义 3.2在config包下创建Encoder进行密码的校验和转码操作 3.3赋予账号角色权限 1.工业级安全框架介绍 Spring Secur

  • SpringBoot Web开发之系统任务启动与路径映射和框架整合

    目录 本章概要 启动系统任务 CommandLineRunner ApplicationRunner 整合Servlet与Filter和Listener 路径映射 本章概要 启动系统任务 整合 Servlet.Filter 和 Listener 路径映射 启动系统任务 有一些特殊的任务需要在系统启动时执行,例如配置文件加载,数据库初始化等操作.如果没有使用 Spring Boot ,这些问题可以在 Listener 中解决.Spring Boot 对此提供了两种解决方案 CommandLineR

  • SpringBoot +Vue开发考试系统的教程

    一.考试系统简介 新鲜出炉的一款SpringBoot +Vue的考试系统,支持多种题型:选择题.多选题.判断题.填空题.综合题以及数学公式.支持在线考试,教师在线批改试卷. 二.项目架构 后端技术栈 SpringBoot: SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建.运行.调试.部署等. Mybatis: 一个持久层的框架,与数据库进行交互,将数据持久化到关系型数据库中 Shiro: 一个功能强大且易于使用的Java安全框架,进行身份验证

  • 一篇文章带你了解SpringBoot Web开发

    目录 SpringBoot Web开发 静态资源 定制首页 thymeleaf模板引擎 1.导入依赖 2.controller书写 源码分析 Thymeleaf语法 基本语法: MVC配置原理 总结 SpringBoot Web开发 springboot到底帮我们配置了什么?我们能不能修改?能修改那些东西?能不能扩展? xxxAutoConfiguration: 向容器中自动配置组件 xxxProperties:自动配置类,装配配置文件中自定义的一些内容 要解决的问题: 导入静态资源 首页 js

  • Java web开发中加载图片路径的两种方式

    (1)   src="/image/1_it.jpg" (2)   src="http://localhost:8080/image/1_it.jpg" 其中localhost可以换位你的电脑IP,端口号也要相应改变. 以上均在基于编译器idea以及tomcat服务器开发的web中测试可行!都是要先定位到项目的位置! 以上所述是小编给大家介绍的Java web开发加载图片路径的两种方式,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

  • SpringBoot web开发源码深入分析

    目录 一.MVC自动配置 1.默认支持的功能 2.静态资源与首页相关源码解析 3.Rest映射及源码分析 4.请求映射原理 一.MVC自动配置 1.默认支持的功能 Spring Boot为Spring MVC提供了自动配置,默认支持以下功能 ContentNegotiatingViewResolver和BeanNameViewResolver视图解析器 支持静态资源,包括webjars 转换器的自动注册.自定义转换器GenericConverter与格式化 支持http消息转换(请求与响应) M

  • SpringBoot整合Web开发之文件上传与@ControllerAdvice

    目录 本章概要 文件上传 单文件上传 多文件上传 @ControllerAdvice 全局异常处理 添加全局数据 请求参数预处理 本章概要 文件上传 @ControllerAdvice 文件上传 Java 中的文件上传一共涉及两个组件,一个是 CommonsMultipartResolver,另一个是 StandardServletMultipartResolver ,其中 CommonsMultipartResolver 使用 commons-fileupload 来处理 multipart

  • Java Web开发之访问路径问题分析

    本文实例讲述了Java Web开发之访问路径问题.分享给大家供大家参考.具体如下: Web应用是由大量的文件组成的,系统等运行主要是靠文件之间的相互调用来完成,调用就是根据文件的位置来确定的.如果你在访问某个文件的时候,系统报下面这样的错误,如果你的文件名没有写错,就是路径出错了. 为了说明路径问题,我们假设有以下的文档结构: 这是JBuilder2006下的一个截图,应用的名字是filepathweb,有两个文件夹,aa和bb,其中aa下有a_a.jsp和a_b.jsp两个文件,bb下有b_a

  • springboot配置开发和测试环境并添加启动路径方式

    目录 springboot配置开发和测试环境并添加启动路径 SpringBoot配置文件(多环境配置dev.test.prod.启动器类的位置) 多环境配置 启动器类的位置 springboot配置开发和测试环境并添加启动路径 嗯,开发和测试环境要分离,这是一般共识(虽然我工作过的公司都没有这种分离),spring boot也可以按照配置文件的读取来做到这一点. 上图有三个application开头的配置文件,要达到能够读取外部配置文件的目的,我们需要引入一个依赖包,就是红色箭头所指的那个,把这

  • SpringBoot基本web开发demo过程解析

    这篇文章主要介绍了SpringBoot基本web开发demo过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.在创建的springboot项目中的pom.xml中导入Lombok的依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18

随机推荐