SpringBoot多环境配置问题

2022年05月13日 阅读数:1
这篇文章主要向大家介绍SpringBoot多环境配置问题,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

1、遇到的问题

在进行SpringBoot多环境配置时,想在不一样环境下配置不一样的tomcat端口,出现了:No active profile set, falling back to 1 default profile: "default"错误,连Tomcat端口号都无了java

解决方案 :发现是创建项目时,没有导入spring-boot-starter-web的jar包,导入相关依赖问题便可解决web

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

2、多环境端口配置

通常来讲,一个项目从开始到正式上线运营,大体能够分为四种环境:spring

一、测试环境:test,外部用户没法访问,提供给测试人员使用apache

二、生产环境:pro,面向外部用户的环境,链接上互联网便可访问该环境api

三、开发环境:dev,外部用户没法访问,供开发人员使用tomcat

四、灰度环境:pre,外部用户能够访问,可是服务器配置相对较低,其余和生产环境同样服务器

面对四种环境,想配置不一样的端口号怎么办,在配置好相应的端口号后,发现系统仍是走默认的8080端口。在yaml配置文件中系统会经过"-"的形式来取出对应的环境,.properties文件能够经过spring.profiles.active=xx来激活指定的端口号,.yaml文件能够经过spring:profiles:active:xx来激活,其中“xx”表明“-”以后的(test、dev、pro之类的)。app

好比咱们想指定测试环境下的端口为8083,这里须要注意的是:.yaml文件必定要特别注意空格问题spring-boot

固然,咱们还能够把不一样环境下的配置放入同一个yaml文件中,在yml配置文件中能够经过"---"的形式来划分文档块,但从横杠来看,系统貌似不推荐咱们把不一样环境下的配置放在一块儿测试

 结果:指定8083端口成功 

3、简单实战

好比如今公司有一个需求:用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来写一个接口文档