springboot微服务--04 spring-boot-starter-logging和spirng-boot-starter-web

  • 了解 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的日志有多种多样,从java.util默认提供的日志支持,到log4j、log4j2、commons logging等,应用日志系统的配置会比较特殊,从而spring-boot-starter-logging的配置也会比较特殊。

1、需要在maven中添加如下配置中之一即可:

#默认的logging
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-loggingartifactId>
dependency>

#log4j
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-logg4jartifactId>
dependency>

#log4j2
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-log4j2artifactId>
dependency>

SpringBoot应用将自动使用logback作为应用日志框架,SpringBoot启动的时候,由org.springframework.boot.logging.Logging-Application-Listener
根据情况初始化并使用。如果要对SpringBoot提供的日志设定做调整,则可以通过以下两种方式:

  • 01 logback约定,在classpath中使用定制的logbak.xml配置文件;
  • 02 通过application.properties中的logging.config配置中制定自己的配置文件;

web应用开发与spirng-boot-starter-web

#添加springMVC依赖
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
dependency>

通过在pom.xml中添加以上依赖,就得到了一个直接可执行的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 更换容器和更换端口
更换容器:在pom.xml中编辑

# 01 去除springboot中默认的嵌入式tomcat依赖
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-starter-tomcatartifactId>
        exclusion>
    exclusions>
dependency>

# 02 添加jetty依赖
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-jettyartifactId>
dependency>

更换端口:编辑application.properties文件,添加如下行:

# server.servlet.context-path=/helloboot
# logging.file=D:/mylog/log.log
# logging.level.org.springframework.web= DEBUG
# book.author=wxh
# book.name=20
# debug=true
# spring.profiles.active=dev
server.port=8888

02 对容器内部进行定制

  • 通过向 IOC 容器注册一个EmbeddedServletContainerCustomizer类型的组件来对嵌入式web容器进行定制:
  • 再深入的定制则需要针对特定的嵌入式web容器,使用实现对应的Factory并注册到 IOC 容器:
    • TomcatEnbeddedServletContainerFactory
    • JettyEnbeddedServletContainerFactory
    • UndertowEnbeddedServletContainerFactory

但是通常不要这么做,事实上spring-boot-starter-web提供的配置列表已经是最简单的方式了。

你可能感兴趣的:(java)