小菜鸟

SpringBoot多文件配置根据环境加载不同配置

2020-09-11  本文已影响0人  我是一颗小虎牙_

各位看官可以关注博主个人博客,了解更多信息。
作者:Surpasser
链接地址:https://surpass.org.cn

在平时开发时,会发现公司的项目会不同的环境使用到不同的配置。如本地,测试,预发布,发布等环境,像数据库这些都要使用到不同的配置。如果只有一个配置文件,发布到不同环境的时候都要去修改一遍那简直就是遭罪,那么,如何实现SpringBoot根据需要去加载不同的配置文件?

项目构建

SpringBoot提供简单配置能够让我们进行不同配置文件的加载。

创建Maven项目

这里简单的常见一个用户类和控制器模仿一般的逻辑,获取用户的信息。

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.68</version>
        </dependency>
    </dependencies>

用户类

public class User {
    private String username;
    private String address;
    private String email;
    private String id;
    private String message;

    public User(String id) {
        this.username = "张三";
        this.address = "亚历山大";
        this.email = "sing@example.com";
        this.id = id;
    }
}

控制器

@RestController
public class Controller {
    @Value("${custom.value}")
    private String customValue;

    @RequestMapping(value = "/userInfo/{id}",method = RequestMethod.GET)
    public JSON getUserInfo(@PathVariable("id")String id){
        User user = new User(id);
        user.setMessage(customValue);
        return JSONObject.parseObject(JSON.toJSONString(user));
    }
}

启动器

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

说明:这里利用Restful风格的请求方式,获取用户的个人信息,从配置文件中获取message复制给用户,然后以JSON的形式返回给页面。

这里来看配置配置文件

application.yml

server:
  port: 8000  #指定端口号
  
custom:
  value: This Is Application   #自定义的value值(message)

利用postman请求发现没有问题,<font color=red>注意看属性message的值</font>。

image

进行多文件配置

application-dev.yml

server:
  port: 8001 #指定端口号
  
custom:
  value: This Is Application-dev  ##自定义的value值(message)

application-uat.yml

server:
  port: 8002  #指定端口号

custom:
  value: This Is Application-uat  #自定义的value值(message)

application-pro.yml

server:
  port: 8003 #指定端口号

custom:
  value: This Is Application-pro  #自定义的value值(message)

如果要启动使用不同的配置配置文件name就需要在application.yml中添加额外的配置

spring:
 profiles:
    active: uat

这样在启动的时候就使用的是uat的配置了,启动查看message信息。

image

我们可以看到message的信息就是application-uat.yml里面配置的,同时还能注意到<font color=red>当我们application.ymlapplication-uat.yml进行相同的配置是,SpringBoot会优先使用指定配置profiles的值。如果没有才会去application.yml里面找。

补充

Maven打包

那么说到了SpringBoot加载不同的配置文件启动,那么不妨说一下Maven根据不同环境用不同的配置文件打包。

在pom.xml中添加配置:

    <profiles>
        <profile>
            <id>dev</id>    <!--为env起一个名字-->
            <properties>
                <env>dev</env>
            </properties>
        </profile>
        <profile>
            <id>uat</id>
            <properties>
                <env>uat</env>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>  <!--默认加载uat,实际根据环境需求-->
            </activation>
        </profile>
        <profile>
            <id>pro</id>
            <properties>
                <env>pro</env>
            </properties>
        </profile>
    </profiles>

    <!--build标签中添加如下的配置>
    <resources>
        <resource>
            <directory>src/main/resources</directory>   <!--指定文件下-->
            <filtering>true</filtering>      <!--动态配置-->
            <excludes>       <!--去除多余的文件-->
                <exclude>application.yml</exclude>
                <exclude>application-dev.yml</exclude>
                <exclude>application-pro.yml</exclude>
                <exclude>application-uat.yml</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>    <!--动态配置  ${env}-->
            <includes>     <!--包含加载的文件(env  默认加载uat 具体看配置)-->
                <include>application-${env}.yml</include>
                <include>application.yml</include>
            </includes>
        </resource>
    </resources>

配置完成后依次执行命令mvn clean ; mvn package进行打包,maven会根据你的配置去打包相应的文件,打包完成后如图包含的配置文件。

[图片上传失败...(image-5331af-1599820046417)]

使用postman去请求得到的结果,如图:

image
上一篇下一篇

猜你喜欢

热点阅读