SpringBoot多环境配置问题
一、遇到的问题
在进行SpringBoot多环境配置时,想在不同环境下配置不同的tomcat端口,出现了:No active profile set, falling back to 1 default profile: "default"错误,连Tomcat端口号都无了
解决方案 :发现是建立项目时,没有导入spring-boot-starter-web的jar包,导入相关依赖问题即可解决
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
二、多环境端口配置
一般来说,一个项目从开始到正式上线运营,大致可以分为四种环境:
1、测试环境:test,外部用户无法访问,提供给测试人员使用
2、生产环境:pro,面向外部用户的环境,连接上互联网即可访问该环境
3、开发环境:dev,外部用户无法访问,供开发人员使用
4、灰度环境:pre,外部用户可以访问,但是服务器配置相对较低,其他和生产环境一样
面对四种环境,想配置不同的端口号怎么办,在配置好相应的端口号后,发现系统还是走默认的8080端口。在yaml配置文件中系统会通过"-"的形式来取出对应的环境,.properties文件可以通过spring.profiles.active=xx来激活指定的端口号,.yaml文件可以通过spring:profiles:active:xx来激活,其中“xx”代表“-”之后的(test、dev、pro之类的)。
比如我们想指定测试环境下的端口为8083,这里需要注意的是:.yaml文件一定要特别注意空格问题
当然,我们还可以把不同环境下的配置放入同一个yaml文件中,在yml配置文件中可以通过"---"的形式来划分文档块,但从横杠来看,系统貌似不推荐我们把不同环境下的配置放在一起
结果:指定8083端口成功
三、简单实战
比如现在公司有一个需求:用Swagger来写一个接口文档,只在开发中使用,在生产环境下不能使用
application-pro.properties:
server.port=8082
------------------------------------
application-dev.properties
server.port=8081
------------------------------------
application.properties
spring.profiles.active=dev
SwaggerConfig:
package com.study.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import java.util.ArrayList;
@Configuration
@EnableOpenApi
public class SwaggerConfig {
@Bean //配置了swagger的Docket的bean实例
public Docket docket(Environment environment) {
//设置要显示的Swagger环境
Profiles profiles=Profiles.of("dev");
//判断是否处在自己设定的环境当中
boolean flag = environment.acceptsProfiles(profiles);
//获取项目的环境
return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
.enable(flag)
.select()
.apis(RequestHandlerSelectors.basePackage("com.study.contoller")
.build();
}
//配置swagger信息:通过覆盖默认的apiInfo
private ApiInfo apiInfo() {
//配置作者的信息
Contact contact = new Contact("全村第二帅", "https://blog.csdn.net/qq_53860947?type=blog", "279618364@qq.com");
return new ApiInfo("自定义api文档",
"码道万古如长夜",
"v3.0",
"https://blog.csdn.net/qq_53860947?type=blog",
contact,
"Apache 2.0",
"http://www.apache.org/licenses/LICENSE-2.0",
new ArrayList());
}
}
结果:
在开发环境中,即定义的8081端口,实现了用Swagger来写一个接口文档
更多推荐
所有评论(0)