资讯专栏INFORMATION COLUMN

Spring Boot - 静态资源处理、启动加载、日志处理

or0fun / 2000人阅读

摘要:静态资源处理启动加载日志处理回顾初识过滤器监听器拦截器我们通过启动日志,可以发现,默认提供了静态资源处理。

Spring Boot - 静态资源处理、启动加载、日志处理 回顾

Spring Boot-初识 Hello World

Spring Boot - Servlet、过滤器、监听器、拦截器

我们通过启动日志,可以发现,spring boot 默认提供了静态资源处理。接下来,我们了解下,该如何应用默认配置,如何自定义静态资源处理。

INFO  o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 
INFO  o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 
INFO  o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 
静态资源处理

建议大家使用Spring Boot的默认配置方式,如果需要特殊处理的再通过配置进行修改。本文主要讲解Spring Boot的默认处理方式

默认资源映射

其中默认配置的 /** 映射到 /static (或/public、/resources、/META-INF/resources)

优先级顺序为:META-INF/resources > resources > static > public

目录结构:

自定义资源映射

上面我们介绍了Spring Boot 的默认资源映射,一般够用了,那我们如何自定义目录?

增加 /2017imgs/ 映射到 classpath:/2017imgs/

实现类Config继承 WebMvcConfigurerAdapter 并重写方法 addResourceHandlers

在resources目录下,增加2017imgs文件夹

package com.wanye;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * Created by wanye on 2017/6/3.
 */
@Configuration
public class Config extends WebMvcConfigurerAdapter{
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/2017imgs/**").addResourceLocations("classpath:/2017imgs/");
    }
}  

访问2017imgs文件夹中的demo.jpg 图片的地址为 http://localhost:8080/2017img...

实际工作中,我们自己处理静态资源的情况是非常少的,静态资源大多数情况,都被放在多带带的静态资源服务器,并且通过cdn来加速访问。

配置特殊的扩展名

2017-06-15追加
看到Springboot 配置*.do请求这样一个问题,作答如下
先说一下思路:
1.dispatcherServlet会接管所有请求(包括静态资源请求),如果修改默认的UrlMapping为*.do,那么一定会导致静态资源无法加载。
2.仔细思考一下题主的的场景,目的希望所有*.do(扩展名)的请求,映射到controller中的method上。(对吗?)
3.那么问题就简单了,参考@RequestMapping所使用的规则

 * 

The mapping matches URLs using the following rules:
*

    *
  • {@code ?} matches one character
  • *
  • {@code *} matches zero or more characters
  • *
  • {@code **} matches zero or more directories in a path
  • *
  • {@code {spring:[a-z]+}} matches the regexp {@code [a-z]+} as a path variable named "spring"
  • *

将映射规则调整为

/**
 * Created by wanye on 2017/5/20.
 */
@RestController // @Controller + @ResponseBody
@RequestMapping("**.do")
public class HelloController {

    @RequestMapping(name = "hello")
    public Map hello(){
        Map hello = new HashMap();
        hello.put("data", "hello 小红");
        hello.put("status", "SUCCESS");
        return hello;
    }
}

当然这只是一个例子,题主可以将@RequestMapping("**.do")配置抽象到基类中。

启动加载

实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求。例如:白名单初始化、缓存加载、消息通知等等。为了解决这样的问题,Spring Boot 为我们提供了一个方法,只需要我们创建类,并实现接口CommandLineRunner,当然这个类需要被spring扫描到(不要忘了增加注解)

package com.wanye;

import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

/**
 * Created by wanye on 2017/6/3.
 */
@Component
@Order(1)
public class CacheInit implements CommandLineRunner {
    @Override
    public void run(String... args) throws Exception {
        System.out.println(">>cache init<<");
    }
}

当有多个启动加载的类,可以通过@Order来指定加载顺序,按value值从小到大顺序来执行。Spring Boot会将启动参数传给自定义启动加载的类中run方法。

日志处理

Spring Boot在所有内部日志中使用Apache Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每种Logger都可以通过配置使用控制台或者文件输出日志内容。本文,主要讲解自定义日志配置,并以logback为例进行演示。

自定义配置

由于日志服务一般都在ApplicationContext创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。

根据不同的日志组件,按如下规则给文件命名,就能被正确加载:

Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2:log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging):logging.properties

Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml)

logback
在resources下增加logback.xml配置

    
    
        
            %d [%t] %5p %logger - %m%n
        
    
    
        hello.log
        
            hello.%d{yyyy-MM-dd}.log
            30
        
        
            %d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n
        
    
    
        
        
    
 
简单说明logback配置文件中的常用配置

控制台输出ConsoleAppender

在开发过程中最常用的是将日志输出到控制台

文件输出RollingFileAppender

另一种常见的日志输出到文件,随着应用的运行时间越来越长,日志也会增长的越来越多,将他们输出到同一个文件并非一个好办法。RollingFileAppender用于切分文件日志.

其中重要的是rollingPolicy的定义,上例中hello.%d{yyyy-MM-dd}.log定义了日志的切分方式——把每一天的日志归档到一个文件中,30表示只保留最近30天的日志,以防止日志填满整个磁盘空间。同理,可以使用%d{yyyy-MM-dd_HH-mm}来定义精确到分的日志切分方式。

总结

静态资源处理

默认资源映射(/** - > /resources/static) ,重点是默认目录的优先级

⾃定义资源映射 (继承WebMvcConfigurerAdapter 并重写方法addResourceHandlers)

启动加载

CommandLineRunner (实现接⼝,多个类加载的优先级)

日志处理

logback(配置,控制台输出,文件输出)

最后

如果觉得我的文章对您有用,请点赞、收藏。您的支持将鼓励我继续创作!视频课程

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71137.html

相关文章

  • Spring-Boot学习笔记

    摘要:学习笔记使用很容易创建一个独立运行运行内嵌容器准生产级别的基于框架的项目,使用你可以不用或者只需要很少的配置。异常消息如果这个错误是由异常引起的。错误发生时请求的路径。 Spring-Boot 1.5 学习笔记 使用Spring Boot很容易创建一个独立运行(运行jar,内嵌Servlet容器)、准生产级别的基于Spring框架的项目,使用Spring Boot你可以不用或者只需要很...

    curlyCheng 评论0 收藏0
  • Spring Boot - 自定义启动banner

    摘要:背景这段时间较忙,有些想念小红,为了表达我对小红的思念之情,决定将启动的研究一下,看看是否能够自定义,让我天天能够看到她。 背景 这段时间较忙,有些想念小红,为了表达我对小红的思念之情,决定将spring boot启动的banner研究一下,看看是否能够自定义,让我天天能够看到她。 展示 经过调研,发现自定义banner是一个轻松愉快的过程,忍不住让我多启动几次,先看看效果:(省略了一...

    CollinPeng 评论0 收藏0
  • Spring Boot 参考指南(开发Web应用程序)

    摘要:开发应用程序非常适合应用程序开发,通过使用嵌入式或,你可以创建一个自包含的服务器。如果你还没有开发过一个应用程序,你可以按照入门部分中的示例进行操作。自动配置为大多数应用程序提供了良好的自动配置。 27. 开发Web应用程序 Spring Boot非常适合web应用程序开发,通过使用嵌入式Tomcat、Jetty、Undertow或Netty,你可以创建一个自包含的HTTP服务器。大多...

    roadtogeek 评论0 收藏0
  • Spring Boot - 单元测试(Junit4&Mockito)

    摘要:当面讲给你听讲堂地址,或许是最实用的教程,新课促销中,只要你敢来,保你收货满满。优惠报名全程撸码快速入门教程全原价,优惠价全程撸码进阶全原价,优惠价 回顾 Spring Boot - 初识 Hello World Spring Boot - Servlet、过滤器、监听器、拦截器 Spring Boot - 静态资源处理、启动加载、日志处理 Spring Boot - 部署Deplo...

    raoyi 评论0 收藏0
  • Spring Boot 参考指南(开发者工具)

    摘要:触发器文件可以手动更新,也可以使用插件进行更新。例如,要配置重新启动以始终使用触发器文件,你需要添加以下属性远程应用程序开发工具并不局限于本地开发,在远程运行应用程序时,还可以使用几个特性。 20. 开发者工具 Spring Boot包括一组额外的工具,这些工具可以使应用程序开发体验变得更加愉快,spring-boot-devtools模块可以包含在任何项目中,以提供额外的develo...

    APICloud 评论0 收藏0

发表评论

0条评论

or0fun

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<