SpringBoot的重载加载器的方法

  

<强>背景
  

  

springboot越来越多的被大家所使用springboot DevTool实现热部署
  

  

出现了相同类castException
  

  

<>强分析
  

  

首先确定出现相同类的castException比如是由于类加载器不同造成的。

  

一个类是否相同取决于两个因素

  
      <李>类加载器相同李   <李>类文件相同李   
  

即不同类加载器解释出来的类是不同的类
  

  

我们在学习jdbc的时候常见的使用
  

     /* *   *返回}{@code类对象与类或相关   用给定的字符串名称*接口。调用此方法   *相当于:   *   * & lt; blockquote>   * {@code类。forName(类名,真的,currentLoader)}   * & lt;/blockquote>   *   *在{@code currentLoader}表示定义的类装入器   *当前类。   *   * & lt; p>例如,下面的代码片段返回   *运行时}{@code类描述符的类命名   * {@code java.lang.Thread}:   *   * & lt; blockquote>   * {@code类t=forname (java.lang.Thread)}   * & lt;/blockquote>   * & lt; p>   *调用{@code forName (" X ")}原因类命名   * {X} @code被初始化。   *   * @param名称所需的类的完全限定名称。   * @return} {@code类对象的类   *指定名称。   * @exception LinkageError如果连接失败   * @exception ExceptionInInitializerError如果初始化了   *用这种方法失败   如果无法找到类* @exception ClassNotFoundException   */公共静态Class<& # 63;比;forName(字符串名称)   抛出ClassNotFoundException {   返回forName0(类名,真的,ClassLoader.getCallerClassLoader ());   }      

从上面我们可以了解不同的类加载器解释的相同阶级也无法互相转换

  

这样我们把目标放在devtools上。

  

我们在springboot中引入了如下依赖

        & lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-devtools   & lt; optional> true   & lt;/dependency>      

那么如何排除devtool的依赖呢?

  

在application.properties中增加

        spring.devtools.restart.enabled=false      

发现启动时仍然可以看出使用的restartedMain

  
  

2018-03-19 22:04:37.641 信息53428 - - - restartedMain s.w.s.m.m.a。RequestMappingHandlerAdapter:寻找@ControllerAdvice: org.springframework.boot.context.embedded。AnnotationConfigEmbeddedWebApplicationContext@7443f7a3:启动日期(Mon 2018年3月19日22:03:34 CST);上下文层次结构的根
  2018-03-19 22:04:37.654 信息53428 - - - restartedMain s.w.s.m.m.a。RequestMappingHandlerAdapter:发现ResponseBodyAdvice org.springframework.boot.actuate.autoconfigure bean。美元EndpointWebMvcHypermediaManagementContextConfiguration ActuatorEndpointLinksAdvice
  2018-03-19 22:04:37.956 信息53428 - - - - - - [restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping :URL路径映射[/swagger-ui.html]>   私人空间alt=" SpringBoot的重载加载器的方法">

        -Dspring.devtools.restart.enabled=false      

果然此时一切就好了

  
  

2018-03-19 22:18:12.928 信息66260 - - - - - -[主要]com.f6car.base.Application ,,,,,,,,,,,,,:以下资料活动:开发
  2018-03-19 22:18:13.131 信息66260 - - - - - -[主要]ationConfigEmbeddedWebApplicationContext:刷新org.springframework.boot.context.embedded。AnnotationConfigEmbeddedWebApplicationContext@2a4354cb:启动日期(Mon 2018年3月19日22:18:13 CST);上下文层次结构的根
  

     

那在春天的配置文件中配置的目的是啥呢?

     /* *   *启动属性。   */公共静态类重启{      私有静态最终字符串DEFAULT_RESTART_EXCLUDES=" meta - inf/maven/* *。”   + " meta - inf/资源/* *、资源/* *,静态/* *,公共/* *,模板/* *,”   + " * */* * */* Test.class Tests.class, git.properties, meta - inf/build-info.properties”;      私有静态最终长DEFAULT_RESTART_POLL_INTERVAL=1000;      私有静态最终长DEFAULT_RESTART_QUIET_PERIOD=400;/* *   *启用自动重启。   */私人布尔启用=true;/* *   *模式,应该排除在触发一个完整的重新启动。   */私人字符串排除=DEFAULT_RESTART_EXCLUDES;/* *   *附加模式,应该排除在触发一个完整的重新启动。   */私人字符串additionalExclude;/* *   *时间(以毫秒为单位)等之间的轮询类路径的变化。   */私人长pollInterval=DEFAULT_RESTART_POLL_INTERVAL;/* *   *所需的安静的时间(以毫秒为单位)没有任何类路径的变化   *重启之前触发。   */私人长quietPeriod=DEFAULT_RESTART_QUIET_PERIOD;/* *   *一个特定文件的名称改变会触发重新启动时检查。如果   *未指定任何类路径文件变化将触发重新启动。   */私人字符串triggerFile;/* *   *附加路径看变化。   */私人List

SpringBoot的重载加载器的方法