咱们经过启动日志,能够发现,spring boot 默认提供了静态资源处理。接下来,咱们了解下,该如何应用默认配置,如何自定义静态资源处理。web
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的默认处理方式spring
上面咱们介绍了Spring Boot 的默认资源映射,通常够用了,那咱们如何自定义目录?segmentfault
增长 /2017imgs/ 映射到 classpath:/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/"); } }
2017-06-15追加
看到Springboot 配置*.do请求这样一个问题,做答以下
先说一下思路:
1.dispatcherServlet会接管全部请求(包括静态资源请求),若是修改默认的UrlMapping为*.do,那么必定会致使静态资源没法加载。
2.仔细思考一下题主的的场景,目的但愿全部*.do(扩展名)的请求,映射到controller中的method上。(对吗?)
3.那么问题就简单了,参考@RequestMapping所使用的规则服务器
* <p>The mapping matches URLs using the following rules:<br> * <ul> * <li>{@code ?} matches one character</li> * <li>{@code *} matches zero or more characters</li> * <li>{@code **} matches zero or more <em>directories</em> in a path</li> * <li>{@code {spring:[a-z]+}} matches the regexp {@code [a-z]+} as a path variable named "spring"</li> * </ul>
将映射规则调整为app
/** * Created by wanye on 2017/5/20. */ @RestController // @Controller + @ResponseBody @RequestMapping("**.do") public class HelloController { @RequestMapping(name = "hello") public Map<String, String> hello(){ Map<String, String> hello = new HashMap<String, String>(); hello.put("data", "hello 小红"); hello.put("status", "SUCCESS"); return hello; } }
固然这只是一个例子,题主能够将@RequestMapping("**.do")配置抽象到基类中。ide
实际应用中,咱们会有在项目服务启动的时候就去加载一些数据或作一些事情这样的需求。例如:白名单初始化、缓存加载、消息通知等等。为了解决这样的问题,Spring Boot 为咱们提供了一个方法,只须要咱们建立类,并实现接口CommandLineRunner,固然这个类须要被spring扫描到(不要忘了增长注解)spa
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方法。debug
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)
<configuration debug="false" scan="true" scanPeriod="30 seconds"> <property name="FILE_PATTERN" value="%d [%t] %5p %c - %m%n"/> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d [%t] %5p %logger - %m%n</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>hello.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>hello.%d{yyyy-MM-dd}.log</FileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="FILE"/> </root> </configuration>
控制台输出ConsoleAppender
文件输出RollingFileAppender
静态资源处理
启动加载
日志处理
若是以为个人文章对您有用,请点赞、收藏。您的支持将鼓励我继续创做!视频课程