当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,
我们的项目就启动成功了