1.配置文件的优先级顺序:
最高的是项目文件路径下的config中的配置文件,其次是项目文件下的配置文件,其次是类路径下的config,最后是我们的默认路径!
springboot的多环境配置
多个yml配置文件;在spring boot中是被允许的。这些配置文件的名称必须为application-***.yml,并且这些配置文件必须要在application.yml配置文件中激活之后才可以使用。
#激活配置文件;需要指定其它的配置文件名称
spring:
profiles:
active: **,**
除此之蛙,多环境可以写在一个配置文件内,使用- - -分开!比如:(配置多的情况下不建议使用!)
配置文件能配置那些
配置文件能配置的东西,都存在一个固有的规律:
在spring.factories中,有许多的xxxAutoConfiguration。xxxAutoConfiguration有默认值,如果需要修改的话,就按照规则配置yaml文件!
xxxAutoConfiguration将xxxProperties装配,然后xxxProperties就和我们的配置文件绑定。
总结
根据当前不同的条件判断,决定这个配置类是否生效!一旦这个配置类生效;这个配置类就会给容器中添加各种组件;这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的。
因此我们可以从上一篇文章和这里得出:
自动装配的原理(精髓)
- SpringBoot启动会加载大量的自动配置类
- 我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;
- 我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)
- 给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;
- xxxxAutoConfigurartion:自动配置类;给容器中添加组件
- xxxxProperties:封装配置文件中相关属性;
我们可以通过在配置文件中配置:debug: true
开启自动配置类是否生效的日志输出!
thymeleaf模板引擎(了解)
1.添加依赖
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>
2.通过查看源码我们可以发现:
2.1 所有的thymeleaf模板引擎都放在templates这个文件下,其次文件的后缀名是以。html结尾的。
Spring Boot整合Spring MVC端口和静态资源
目标:可以修改tomcat的端口和访问项目中的静态资源。
-
修改tomcat端口
查询**Properties,设置配置项(前缀+类变量名)到application配置文件中。
#tomcat端口修改
server:
port: 80
- 访问项目中的静态资源
静态资源放置的位置;放置静态资源并访问这些资源。
存放静态资源的位置通过源代码可以得知有以下4个路径:
优先级:resources > static(默认的)>public
Spring Boot整合Spring MVC拦截器
目标:可以在Spring Boot项目中配置自定义SpringMVC拦截器
分析:
- 编写拦截器(实现HandlerInterceptor);
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Slf4j
public class Interceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.debug("这是Interceptor的 preHandle方法");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.debug("这是Interceptor的 PostHandle方法");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
log.debug("这是Interceptor的 afterHandle方法");
}
}
没有业务;因此使用日志来记录信息。
2. 编写配置类实现 WebMvcConfigurer,在该类中添加各种组件;
@Configuration
public class MvcConfig implements WebMvcConfigurer {
//注册拦截器
@Bean
public Interceptor interceptor(){
return new Interceptor();
}
//添加拦截器到spring mvc拦截器链
@Override
public void addInterceptors(InterceptorRegistry registry) {
//拦截所以请求路径
registry.addInterceptor(interceptor()).addPathPatterns("/*");
}
}
- 测试
拦截器不是一个普通属性,而是一个类,所以就要用到java配置方式了。(在SpringBoot官方文档中有以下说明:)
如果你想要保持Spring Boot的一些默认MVC特征,同时又想自定义一些MVC配置(包括:拦截器,格式化器,视图控制器、消息转换器等等),你应该让一个类实现WebMvcConfigurer,并且添加@configuration注解,但是千万不要加@Enablewebwvc注解。如果你想要自定义HandlerMapping、HandlerAdapter .ExceptionReso1ver等组件,你可以创建一个webMvcRegistrationsAdapter实例来提供以上组件。如果你想要完全自定义SpringMVC,不保留SpringBoot提供的一切特征,你可以自己定义类并且添加@configuration注解和@EnablewebMvc注解。
通过源码可知:这个注解类导入的类DelegatingWebMvcConfiguration实现了WebMvcConfigurationSupport,而在WebMvcConfigurationSupport装配的时候做了判断,需要这个类不存在!否则默认配置都会失效!
在WebMvcAutoConfiguration中,