spring boot 自定义配置文件路径

该博客介绍了如何在SpringBoot应用中设置自定义配置文件`bootstrap.yml`,并从`/opt/appconf/`路径加载。通过`SpringApplicationBuilder`配置额外的属性,并利用`YamlPropertiesFactoryBean`读取`bootstrap.yml`来获取配置项,实现启动时加载特定环境配置。

spring boot 自定义配置文件路径

bootstrap.yml

#系统级别的参数配置,用于应用程序上下文的引导阶段,先于application.yml加载
spring:
  config:
    additional-location: file:/opt/appconf/
  profiles:
    active:
      - 'devd'
      - 'common'

启动类

import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;

/**
 * 入口类
 */
@SpringBootApplication(scanBasePackages = "com")
@EnableCaching
@EnableDiscoveryClient
public class WebApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        new SpringApplicationBuilder(WebApplication.class).properties("spring.config.name:application-additional-location", getAdditionalLocation()).build().run(args);
//			SpringApplication.run(WebApplication.class, args);
    }
    /**
 		* war 启动
 		*/
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(WebApplication.class).properties("spring.config.name:application-additional-location", getAdditionalLocation());
//        return builder.sources(WebApplication.class);
    }
    private static String getAdditionalLocation() {
        //		如果file: 与resource目录相同优先使用file:
        String addClassPath = "spring.config.additional-location:" +
                "file:./config/,file:./," +
                "classpath:/config/," +
                "classpath:/,";
        ResourceLoader resourceLoader = new DefaultResourceLoader();
        Resource inputFile = resourceLoader.getResource("classpath:bootstrap.yml");
        YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean();
        yamlPropertiesFactoryBean.setResources(inputFile);
        yamlPropertiesFactoryBean.afterPropertiesSet();
        if (yamlPropertiesFactoryBean.getObject().containsKey("spring.config.additional-location")) {
            addClassPath = addClassPath.concat(yamlPropertiesFactoryBean.getObject().get("spring.config.additional-location").toString());
            System.out.println(addClassPath);
        }
        return addClassPath;
    }
}

### 如何在 Spring Boot 中指定自定义配置文件位置 在 Spring Boot 应用程序中,可以通过多种方式来指定自定义配置文件的位置。以下是几种常见的方式: #### 使用命令行参数 可以在启动应用程序时通过命令行参数传递配置文件的位置。例如: ```bash java -jar myapp.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties,file:./config/application.properties ``` 这会告诉 Spring Boot 从多个位置加载配置文件,并按照顺序覆盖相同的属性[^1]。 #### 修改 `application.properties` 或 `application.yml` 也可以直接在 `application.properties` 或者 `application.yml` 文件里指明其他外部配置文件的位置: 对于 properties 文件来说: ```properties spring.config.additional-location=file:///path/to/config/ ``` 而对于 yml 文件则是这样写: ```yaml spring: config: additional-location: file:///path/to/config/ ``` 这种方式允许开发者灵活地添加额外的配置源而无需改变原有的配置文件结构[^3]。 #### 利用环境变量 还可以利用操作系统的环境变量来设定配置文件路径,在 Linux/Unix 系统上可以这样做: ```bash export SPRING_CONFIG_LOCATION=/path/to/config/ ``` 而在 Windows 上则应使用 set 命令代替 export 。之后再运行 jar 包即可自动识别该目录下的配置文件[^2]。 以上方法均能有效地帮助用户更改默认情况下位于 classpath 下的应用程序配置文件的位置,从而满足不同场景下对资源配置的需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值