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
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

这个pom就是返回的web应用类型SERVLET
  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
</dependency>

这个pom就是返回的web应用类型NONE
  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
</dependency>

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值