美文网首页小菜鸟
SpringBoot多文件配置根据环境加载不同配置

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

作者: 我是一颗小虎牙_ | 来源:发表于2020-09-11 18:28 被阅读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

    相关文章

      网友评论

        本文标题:SpringBoot多文件配置根据环境加载不同配置

        本文链接:https://www.haomeiwen.com/subject/fbubektx.html