10、自定义配置文件和自定义失败分析器

自定义配置文件及失败分析器


自定义配置文件 --> 改变项目配置的方式


默认行为:

Spring Boot默认的配置文件:调用SpringApplication的run()方法启动Spring Boot应用时,Spring Boot会自动加载主配置类(run方法第一个参数、该参数要用@SpringBootApplication修饰)所在包及其子包下所有的配置文件或组件。


自定义配置文件的方式:


方式一:

通过scanBasePackages属性:该属性来自于@ComponentScan,被属性被集成到了@SpringBootApplication中,如果显式指定了scanBasePackages属性,那就相当于覆盖了该属性的默认值。
该属性的默认值就是主配置类所在的包。


方式二:

@Import注解来加载自定义的Java配置类。
如果自定义的配置类已经位于主配置类所在包或其子包下,
该配置类本身就会被自动加载,因此无需使用@Import注解来进行配置。
当自定义的配置类不在于主配置类所在包及其子包下,才需使用@Import注解来进行配置。


方式三:

@ImportResource注解来加载自定义的XML配置文件,如果项目需要使用传统的XML配置文件,就可使用该注解来完成导入
【备注】:XML配置文件,需要显式使用 @ImportResource注解来加载


自定义配置文件的方式 – 代码演示


方式一:

通过scanBasePackages属性:该属性来自于@ComponentScan,被属性被集成到了@SpringBootApplication中,如果显式指定了scanBasePackages属性,那就相当于覆盖了该属性的默认值。
该属性的默认值就是主配置类所在的包。

这里我自定义一个配置类,用注解 @Configuration 表明这个类作为配置类,然后用注解 @Bean 在容器中配置了一个 myDate 的Bean。
因为这个配置类是在主配置类所在的包里面,所以在启动主配置类BootApplication的时候,就会把我自己自定义的配置类的Bean加载到spring的容器中。

通过成功打印出来的myDate,可以看出配置文件已经生效了。

在这里插入图片描述


方式二:

@Import注解来加载自定义的Java配置类。

如果自定义的配置类已经位于主配置类所在包或其子包下,
该配置类本身就会被自动加载,因此无需使用@Import注解来进行配置。

测试这句: 当自定义的配置类不在于主配置类所在包及其子包下,才需使用@Import注解来进行配置。

当自定义的配置类不在于主配置类所在包及其子包下,直接报错:No bean named ‘myDate02’ available在这里插入图片描述


@Import注解来进行配置,把不在主配置类的包及其包下面的自定义配置类,通过@Import(类名.class) 的方法,显示指定要加载MyConfig02这个配置文件。

在这里插入图片描述


方式三:

@ImportResource注解来加载自定义的XML配置文件,如果项目需要使用传统的XML配置文件,就可使用该注解来完成导入
【备注】:XML配置文件,需要显式使用 @ImportResource注解来加载

写一个xml配置文件,然后在主配置类(启动类)里面用注解@ImportResource来显示指定加载这个自定义的xml配置类。
可以看出启动主配置类后,自定义的xml配置类也生效了。
在这里插入图片描述


启动日志和自定义失败分析器

Spring Boot默认显示INFO级别的日志消息,包括一些和启动相关的详情
如果项目作为产品级别进行部署运行的时候,如果不想看到这些详细的启动日志,
要关闭启动日志,在application.properties中设置:spring.main.log-startup-info=false

我个人认为这个失败分析器是springboot自己有的,就是我们项目启动失败或者是打包失败显示的错误信息就是有失败分析器提供的。

启动失败后,由失败分析器负责提供详细的错误信息及修复建议。


下面信息就是来自错误分析器

 ***************************
 APPLICATION FAILED TO START
 ***************************
 Description:(错误描述)
 Web server failed to start. Port 8080 was already in use.
 Action:(建议的修复方式)
 Identify and stop the process that's listening on port 8080 or 
 configure this application to listen on another port

没有失败分析器时,可启动debug模式来显示错误信息

主要有两种方式:

1、运行程序时,添加–debug选项。

  java -jar firstboot-0.0.1-SNAPSHOT.jar --debug

2、将ConditionEvaluationReportLoggingListener的日志级别设置debug

   logging.level.org.springframework.boot.autoconfigure.logging=debug

它意味着将org.springframework.boot.autoconfigure.logging包下所有类的日志级别设为的 debug

logging.level.org.springframework.boot.autoconfigure.logging.ConditionEvaluationReportLoggingListener=debug

自定义失败分析器

没有失败分析器时,可开发自定义的失败分析器

两步:


1、实现失败分析器类

实现失败分析器类, 继承AbstractFailureAnalyzer,其中T代表要处理的异常。

     实现该抽象基类时,就需要实现如下的抽象方法
     
     实现FailureAnalysis analyze(Throwable rootFailure, T cause)方法,
     该方法的返回值就代表了失败分析器所分析得到的结果。
     
     返回的FailureAnalysis 即可包含3个信息:
     - description:失败的描述信息。第1个构造参数。
     - action:针对失败的修复建议。第2个构造参数。
     - cause:导致失败的异常。第3个构造参数。

2、注册失败分析器

通过META-INF/spring.factories文件中注册失败分析器,这个文件是专门用来做注册的,如:

      org.springframework.boot.diagnostics.FailureAnalyzer=\
      cn.ljh.boot.failureanalyze.myFailureAnalyze


注意:当你的失败分析器配置错误时,Spring Boot不会报错,
      Spring Boot将直接使用系统内置的失败分析器,而不是使用自定义的失败分析器。

3、代码演示


第一步:自定义失败分析器的类

在这里插入图片描述


第二步:通过META-INF/spring.factories文件中注册失败分析器

在这里插入图片描述


4、测试:

启动项目的方式有很多中,原本已经用启动类启动项目了,再用maven的插件来启动项目,可以导致端口占用出错,看自己自定义的失败分析器能否有效。

在这里插入图片描述

自定义的失败分析器成功生效。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_L_J_H_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值