简单介绍⼀下:spring-boot-starter-logging和spring-boo。。
应⽤⽇志和spring-boot-starter-logging
ava的⽇志系统多种多样,从 java.util 默认提供的⽇志⽀持,到 log4j,log4j2,commons logging 等,复杂繁多,所以,应⽤⽇志系统的配置就会⽐较特殊,从⽽ spring-boot-starter-logging 也⽐较特殊⼀些,下⾯将其作为我们第⼀个了解的⾃动配置依赖模块。
假如 maven 依赖中添加了 spring-boot-starter-logging,如以下代码所⽰:
<dependency>
<groupId> org.springframework.boot </groupId>
<artifactId> spring-boot-starter-logging </artifactId>
</dependency>
那么,我们的 SpringBoot  应⽤将⾃动使⽤ logback 作为应⽤⽇志框架,Boot 启动的时候,由
org.springframework.boot.logging.Logging-Application-Listener 根据情况初始化并使⽤。
SpringBoot 为我们提供了很多默认的⽇志配置,所以,只要将 spring-boot-starter-logging 作为依赖加⼊到当前应⽤的 classpath,
则“开箱即⽤”,不需要做任何多余的配置,但假设我们要对默认 SpringBoot 提供的应⽤⽇志设定做调整,则可以通过⼏种⽅式进⾏配置调整:
遵循 logback 的约定,在 classpath 中使⽤⾃⼰定制的 l 配置⽂件。
在⽂件系统中任何⼀个位置提供⾃⼰的 l 配置⽂件,然后通过 fig 配置项指向这个配置⽂件来启⽤它,⽐如在application.properties 中指定如下的配置。
SpringBoot 默认允许我们通过在配置⽂件或者命令⾏等⽅式使⽤ logging.file 和 logging.path 来⾃定义⽇志⽂件的名称和存放路径,不过,这只是允许我们在 SpringBoot 框架预先定义的默认⽇志系统设定的基础上做有限的设置,如果我们希望更灵活的配置,最好通过框架特定的配置⽅式提供相应的配置⽂件,然后通过 fig 来启⽤。
如果⼤家更习惯使⽤ log4j 或者 log4j2,那么也可以采⽤类似的⽅式将它们对应的 spring-boot-starter 依赖模块加到  依赖中即可:
<dependency>
<groupId> org.springframework.boot </groupId>
<artifactId> spring-boot-starter-log4j </artifactId>
</dependency>
或者
<dependency>
<groupId> org.springframework.boot </groupId>
<artifactId> spring-boot-starter-log4j2 </artifactId>
</dependency>
但⼀定不要将这些完成同⼀⽬的的 spring-boot-starter 都加到依赖中。
快速 Web 应⽤开发与 spring-boot-starter-web
在这个互联⽹时代,使⽤ Spring 框架除了开发少数的独⽴应⽤,⼤部分情况下实际上在使⽤ SpringMVC 开发 web 应⽤,为了帮我们简化快速搭建并开发⼀个 Web 项⽬,SpringBoot 为我们提供了 spring-boot-starter-web ⾃动配置模块。
只要将 spring-boot-starter-web 加⼊项⽬的 maven 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
我们就得到了⼀个直接可执⾏的 Web 应⽤,当前项⽬下运⾏ mvn spring-boot:run 就可以直接启动⼀个使⽤了嵌⼊式 tomcat 服务请求的 Web 应⽤,只不过,我们还没有提供任何服务 Web 请求的 Controller,所以,访问任何路径都会返回⼀个 SpringBoot 默认提供的错误页⾯(⼀般称其为 whitelabel error page),我们可以在当前项⽬下新建⼀个服务根路径 Web 请求的 Controller 实现:
@RestController
public class IndexController {
@RequestMapping("/")
public String index() {
return "hello, there";
}
}
重新运⾏ mvn spring-boot:run 并访问 localhost:8080,错误页⾯将被我们的 Controller 返回的消息所替代,⼀个简单的 Web 应⽤就这样完成了。
但是,简单的背后,其实却有很多“潜规则”(约定),我们只有充分了解了这些“潜规则”,才能更好地应⽤ spring-boot-starter-web。
项⽬结构层⾯的约定
项⽬结构层⾯与传统打包为 war 的 Java Web 应⽤的差异在于,静态⽂件和页⾯模板的存放位置变了,原来是放在 src/main/webapp ⽬录下的⼀系列资源,现在都统⼀放在 src/main/resources 相应⼦⽬录下,⽐如:
src/main/resources/static ⽤于存放各类静态资源,⽐如 css,js 等。
src/main/resources/templates ⽤于存放模板⽂件,⽐如 *.vm。
当然,如果还是希望以 war 包的形式,⽽不是 SpringBoot 推荐使⽤的独⽴ jar 包形式发布 Web 应⽤,也可以继续原来 Java Web 应⽤的项⽬结构约定。
SpringMVC 框架层⾯的约定和定制
spring-boot-starter-web 默认将为我们⾃动配置如下⼀些 SpringMVC 必要组件:
必要的 ViewResolver,⽐如 ContentNegotiatingViewResolver 和 Bean-NameViewResolver。
将必要的 Converter、GenericConverter 和 Formatter 等 bean 注册到 IoC 容器。
添加⼀系列的 HttpMessageConverter 以便⽀持对 Web 请求和相应的类型转换。
spring mvc和boot区别⾃动配置和注册 MessageCodesResolver。
其他。
任何时候,如果我们对默认提供的 SpringMVC 组件设定不满意,都可以在 IoC 容器中注册新的同类型的 bean 定义来替换,或者直接提供⼀个基于 WebMvcConfigurerAdapter 类型的 bean 定义来定制,甚⾄直接提供⼀个标注了 @EnableWebMvc 的 @Configuration 配置类完全接管所有 SpringMVC 的相关配置,⾃⼰完全重新配置。