2021-06-02 Spring Web中各类配置文件解析

Spring Web中各类配置文件解析

在做项目中我们经常会遇到各类配置文件的情况,很多时候是知道怎么用,但不知道为什么用;我最近也在做一个修改类的项目,所以我就想说借用我正在做的项目来详细解析一下各类的配置文件

1. 背景:

通常一个project的机构如下:

Project:
-----src:
----------main:
---------------java
---------------resource
--------------------META-INF
---------------webapp
--------------------META-INF
--------------------WEB-INF
----------test:
-----pom.xml

一般配置文件都会放在resource下面的一个自建config包中,和webapp的WEB-INF中,至于原因是什么,后面我会具体讲到;

2. 配置文件

本文以springboot web项目为例子

2.1 配置文件的作用是什么

  1. 是用来修改Springboot等框架的默认配置;一般根据自己的需求替换默认配置的话,可以通过配置文件修改。e.g.服务器port/数据库的port
  2. 是用来导入一些数据常量。e.g.一些template/一些接口信息

SpringBoot默认会从Resources目录下加载application.properties文件 注:配置文件名是固定的吗,可以改成yml/yaml/xml格式!(一般都采用yml/yaml/properties格式,因为较为简单但这些只适用于简单的配置;xml格式较为繁琐,容易出错,但配置文件内容多且复杂的时候用xml更好)
关于配置文件xml和properties的对比详情请参考:https://blog.csdn.net/weixin_44165280/article/details/109371127

2.2 配置文件的额加载顺序是什么

  1. 启动后:springboot启动会扫描一下位置的application.properties或者application.yml作为默认的配置文件(最先加载的根本原因是web.xml中Context配置通常都会首先配置 application)
  2. 工程根目录:./config/
  3. 工程根目录:./
  4. classpath:/config/
  5. classpath:/
    加载的优先级顺序是从上向下加载,并且所有的文件都会被加载,高优先级的内容会覆盖底优先级的内容,形成互补配置
    补充:也可以通过指定配置spring.config.location来改变默认配置,一般在项目已经打包后,我们可以通过指令 java -jar xxxx.jar --spring.config.location=D:/kawa/application.yml来加载外部的配置

优先级排序:
1.当前项目根目录下的config目录下
2.当前项目的根目录下
3.resources目录下的config目录下
4.resources目录下

关于配置文件地址优先级原文请参考:https://www.cnblogs.com/hlkawa/p/9723838.html

2.3 怎么写配置文件

  1. xml:标准xml格式
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="testBeanService" class="com.liyu.helloworld.service.TestBeanService"></bean>
</beans>

注:xml一般都是采用bean注入

  1. yml:标准格式
spring:
  datasource:
    url: jdbc:oracle:thin:@localhost:1521:XE
    username: admin
    password: admin
    driver-class-name: oracle.jdbc.driver.OracleDriver
  1. properties:标准格式
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE
spring.datasource.username=admin
spring.datasource.password=admin
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver

2.4配置文件加载流程

web.xml —> applicationContext.properties —> 各种serivice/web服务/业务逻辑

2.5 常见配置文件

  1. web.xml
  2. applicationContext.yml
  3. pom.xml
    (主要是依赖管理)
  4. jboss-web.xml
    (在JBoss 下web工程,为了使用容器提供的一些特性,需要使用jboss-web.xml进行配置,详情可以参考:https://www.huaweicloud.com/zhishi/JBoss.html

3. web.xml

3.1 作用

  1. 解决字符串编码问题:过滤器 CharacterEncodingFilter(filter-name)
  2. 配置监听器ContextLoaderListener(listener-class)
    (ContextLoaderListener的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法)
  3. 部署applicationContext的xml文件:contextConfigLocation(context-param下的param-name)
  4. DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。
    DispatcherServlet(servlet-name、servlet-class、init-param、param-name(contextConfigLocation)、param-value)
    在DispatcherServlet的初始化过程中,框架会在web应用的 WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml 的配置文件,生成文件中定义的bean
    原文请参考:https://blog.csdn.net/u012850192/article/details/100133808
  1. 启动WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml的两个节点: 和 ;
  2. 容器创建一个ServletContext(上下文);
  3. 容器将转化为键值对,并交给ServletContext;
  4. 容器创建中的类实例,即创建监听;
  5. 容器初始化,web.xml中可以定义多个 filter,初始化每个 filter 时,是按照 filter 配置节出现的顺序来初始化的,当请求资源匹配多个 filter-mapping 时,filter 拦截资源是按照
    filter-mapping 配置节出现的顺序来依次调用 doFilter() 方法的;
  6. 容器初始化, servlet 同 filter 类似。 那么,web项目启动时,可以知道web.xml文件各个节点的加载顺序:context-param -> listener -> filter
    -> servlet。
    参考: https://www.cnblogs.com/jing99/p/10914953.html

PS: 详解Spring 启动时解析WEB.xml过程请参考:https://blog.csdn.net/hou512504317/article/details/79261342

3.2 常见问题:为什么Springboot中web.xml没有了

servlet3.0
Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布。该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web
应用的开发和部署。其中一项新特性便是提供了无 xml 配置的特性。
servlet3.0 首先提供了 @WebServlet,@WebFilter 等注解,这样便有了抛弃 web.xml
的第一个途径,凭借注解声明 servlet 和 filter 来做到这一点。

除了这种方式,servlet3.0 规范还提供了更强大的功能,可以在运行时动态注册 servlet ,filter,listener。
详情参考:https://blog.csdn.net/weixin_34128501/article/details/92424885

关于配置文件,有太多的细节和需要理解的点,我这里就不一一列举了,我也会在以后的工作实践中积累更多关于配置文件的详细信息,希望以后再跟大家分享
继续愉快学习
涂涂努力ing

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值