springboot源码分析之webApplicationType

当springboot项目启动的时候 报这个错误The following profiles are active: dev

我们进入run方法的源码 找到这一行
public SpringApplication(ResourceLoader resourceLoader, Class... primarySources) {
        确定web应用类型                   然后我们点进去这个deduceFromClasspath方法
        this.webApplicationType = WebApplicationType.deduceFromClasspath();
}

我们可以看到他返回的是三种类型
static WebApplicationType deduceFromClasspath() {
    
        if (ClassUtils.isPresent("xxxr") {
      //如果是reactive的jar包,并且没有servlet相关的jar包 返回这个    
            return REACTIVE;
        } else {
                
                if (!ClassUtils.isPresent(className, (ClassLoader)null)) {
        //如果没有servlet的jar包 返回这个
                    return NONE;
                }
    //默认返回servlet
            return SERVLET;
        }
    }

    我们可以看下WebApplicationType的类型注释
   /**
     * 该应用程序不应作为 Web 应用程序运行,也不应启动嵌入式 Web 服务器。

    *  意思就是 这个类型启动springboot web项目的时候 启动不起来 
     */
    NONE,

    /**
     * 该应用程序应作为基于 servlet 的 Web 应用程序运行,并应启动嵌入式 servlet Web 服务器。
     */
    SERVLET,

    /**
     * 该应用程序应作为响应式 Web 应用程序运行,并应启动嵌入式响应式 Web 服务器。
     */
    REACTIVE;


这个pom就是返回的web应用类型REACTIVE

            org.springframework.boot
            spring-boot-starter-webflux

这个pom就是返回的web应用类型SERVLET
 
            org.springframework.boot
            spring-boot-starter-web

这个pom就是返回的web应用类型NONE
 
            org.springframework.boot
            spring-boot-starter

最后返回的web应用类型就是NONE,那么问题我们已经找到了,

就是pom使用spring-boot-starter,
解决方案就是吧spring-boot-starter换成spring-boot-starter-web 就好了,

这样返回的web应用类型就是servlet,
我们的项目就启动成功了

你可能感兴趣的:(springboot,servlet,java)