-
了解 spring-boot-starter
- 应用日志和 spring-boot-starter-logging
-
web应用开发与spirng-boot-starter-web
-
项目结构层面约定
- SpringMVC 框架层面的约定和定制
- 嵌入式Web容器层面的约定和定制
-
项目结构层面约定
了解 spring-boot-starter
springboot微框架从两个层面影响微服务开发者:
- 基于spring框架的“约定优先于配置”理念
- 提供了丰富的spring-boot-starter自动配置依赖模块
我们可以对干预springboot的配置方式进行分类:命令行参数、系统环境变量、位于文件系统中的配置、位于classpath中的配置文件、固化到代码中的配置项;
应用日志和 spring-boot-starter-logging
java的日志有多种多样,从默认提供的日志支持,到log4j、log4j2、commons logging等,应用日志系统的配置会比较特殊,从而spring-boot-starter-logging的配置也会比较特殊。
1、需要在maven中添加如下配置中之一即可:
#默认的logging
<dependency>
<groupId></groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
#log4j
<dependency>
<groupId></groupId>
<artifactId>spring-boot-starter-logg4j</artifactId>
</dependency>
#log4j2
<dependency>
<groupId></groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
SpringBoot应用将自动使用logback作为应用日志框架,SpringBoot启动的时候,由-Application-Listener
根据情况初始化并使用。如果要对SpringBoot提供的日志设定做调整,则可以通过以下两种方式:
- 01 logback约定,在classpath中使用定制的配置文件;
- 02 通过中的配置中制定自己的配置文件;
web应用开发与spirng-boot-starter-web
#添加springMVC依赖
<dependency>
<groupId></groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
通过在中添加以上依赖,就得到了一个直接可执行的web应用,在当前项目下运行mvn spring-boot:run 就可以直接启动一个使用了嵌入式TOMCAT服务请求的web应用,然后在添加一个controller之后就可以实现一个简单的web服务器。简单的背后有很多约定:
项目结构层面约定
对比项 | springboot | 传统打包为war的java web |
---|---|---|
静态文件位置 | src/main/resources/static | src/main/webapp |
模板文件位置 | src/main/resources/templates | src/main/webapp |
SpringMVC 框架层面的约定和定制
spring-boot-starter-web默认会配置一些SpringMVC的必要组件,如下列出一些:
- 必要的ViewResolver,比如ContentNegotiatingViewResolver和BeanNameViewResolver
- 将必要的Converter、GenericConverter和Formatter等bean注册到IOC容器
- 添加一系列HttpMessageConverter以便支持对web请求和相应的类型转换
- 自动配置和注册MessageCodesResolver
注意:任何时候,如果SpringMVC组件不能满足需求,可以在IOC容器中注册同类型的bean来替换,或者直接提供一个基于WebMvcConfigurerAdapter类型的bean定义来定制,甚至可用标注了@EnableWebMvc和@Configuration的配置类来接管SpringMVC的相关配置。
嵌入式Web容器层面的约定和定制
spring-boot-starter-web默认使用嵌入式tomcat作为web容器对外提供HTTP服务,默认使用8080端口对外监听和提供服务,对此都可以实现定制,定制有以下两方面:
01 更换容器和更换端口
更换容器:在中编辑
# 01 去除springboot中默认的嵌入式tomcat依赖
<dependency>
<groupId></groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
# 02 添加jetty依赖
<dependency>
<groupId></groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
更换端口:编辑文件,添加如下行:
# -path=/helloboot
# =D:/mylog/
# = DEBUG
# =wxh
# =20
# debug=true
# =dev
=8888
02 对容器内部进行定制
- 通过向 IOC 容器注册一个EmbeddedServletContainerCustomizer类型的组件来对嵌入式web容器进行定制:
- 再深入的定制则需要针对特定的嵌入式web容器,使用实现对应的Factory并注册到 IOC 容器:
- TomcatEnbeddedServletContainerFactory
- JettyEnbeddedServletContainerFactory
- UndertowEnbeddedServletContainerFactory
但是通常不要这么做,事实上spring-boot-starter-web提供的配置列表已经是最简单的方式了。