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

各位看官可以关注博主个人博客,了解更多信息。
作者: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请求发现没有问题,注意看属性message的值

进行多文件配置

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信息。

我们可以看到message的信息就是application-uat.yml里面配置的,同时还能注意到当我们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会根据你的配置去打包相应的文件,打包完成后如图包含的配置文件。

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SpringBoot中可以通过配置profile来实现多环境配置文件,只需要在application.properties或application.yml中添加spring.profiles.active属性,指定当前激活的环境即可。例如,可以在application.properties中添加:spring.profiles.active=dev,这样SpringBoot就会激活dev环境加载application-dev.properties等配置文件。 ### 回答2: SpringBoot配置环境配置文件可以通过以下步骤实现: 1. 创建配置文件:在项目的资源文件夹下创建多个不同环境配置文件,通常以"application-"开头,并在文件名中添加环境标识,如"application-dev.properties"、"application-test.properties"等。 2. 配置文件内容:在各个配置文件中,根据不同环境的需求,设置不同配置属性。可以设置数据库连接、服务端口、日志级别等等。 3. 设置激活环境:在主配置文件(通常是"application.properties")中,通过设置"spring.profiles.active"属性来指定当前激活的环境。例如,设置为"dev"表示激活开发环境。 4. 使用配置属性:在代码中,可以使用"@Value"注解或者使用"Environment"对象来获取配置文件中的属性。通过这种方式,可以根据不同环境配置来动态改变应用程序的行为。 5. 多个配置文件的优先级:当存在多个配置文件时,SpringBoot将按照一定的优先级进行加载。其中,主配置文件具有最低优先级,而具体环境配置文件具有更高的优先级。因此,如果某个配置属性在多个文件中都存在,那么后加载配置文件会覆盖前面加载配置。 通过以上步骤,我们就可以在SpringBoot项目中实现多环境配置文件。这样,我们可以根据不同环境需求,灵活地配置应用程序的各个属性,提高了适应不同环境变化的能力。 ### 回答3: Spring Boot配置环境配置文件可以通过使用不同配置文件来实现。一种常用的配置方式是通过在application.properties(或application.yml)文件中使用不同的profile来指定环境。 首先,在src/main/resources目录下创建application-{profile}.properties(或application-{profile}.yml)文件,其中{profile}代表环境名称,例如application-dev.properties(或application-dev.yml)代表开发环境配置文件,application-prod.properties(或application-prod.yml)代表生产环境配置文件。 然后,在application.properties(或application.yml)文件中,添加一个配置spring.profiles.active={profile}来指定使用哪个环境配置文件。例如,如果想要使用开发环境配置文件,可以设置spring.profiles.active=dev。 接下来,在具体的配置文件中,可以根据不同的需要设置不同配置项。例如,在开发环境配置文件中可以设置数据库连接的URL为本地环境的URL,而在生产环境配置文件中可以设置数据库连接的URL为线上环境的URL。 最后,在代码中通过注解@Value("${配置项名称}")来获取配置文件中的配置项的Spring Boot会根据当前使用的环境自动加载相应的配置文件,并将对应的配置项的注入到相应的字段中。 通过这种方式,我们可以根据不同环境使用不同配置文件,方便地进行开发、测试和部署。同时,Spring Boot还支持其他灵活的配置方式,例如使用命令行参数或环境变量来指定使用哪个环境配置文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值