一、遇到的问题

在进行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来写一个接口文档

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐