0

0

springboot指定profiles启动失败问题如何解决

王林

王林

发布时间:2023-05-11 18:46:12

|

1720人浏览过

|

来源于亿速云

转载

    springboot指定profiles启动失败

    平常启动springboot的jar包, 都是通过–spring.profiles.active=dev, 即可读取application-dev.yml的配置文件的信息,进行启动

    凡事总有意外

    这次启动就很奇怪了, 输入这个启动环境参数, 依然不起效果,

    springboot指定profiles启动失败问题如何解决

    就是这么惊悚, 就是这么意外!

    没有读取application-dev.yml而是读取默认的application.yml文件

    但是, 使用jvm的启动参数: java -jar -Dspring.profiles.active=dev, 可以启动, 证明dev的配置文件是有效的

    比较其他项目

    application的入口类发现:

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

    调用run方法的时候, 没有传入args!

    阅读源码发现, 传入启动参数, 再解析传入参数,对properties进行设置

    注意:

    细心细心, 启动代码需要传入启动参数!!! 方能在启动时,输入启动参数生效

    springboot Profiles、配置文件加载优先级

    SpringBoot允许我们有多个配置文件,然后在项目启动时根据条件动态去加载对应的配置文件。

    现在有三个配置,一个默认配置文件(application.properties:因为是SpringBoot指定的名字,所以叫默认配置文件),两个指定环境配置文件(application-prod.properties和application-dev.properties:和对应的环境有关,所以叫它们指定环境配置文件)

    application-dev.properties

    模拟开发配置信息

    person.name=ZhangSan
    person.age=18

    application-prod.properties

    就模拟生产配置信息

    person.name=LiSi
    person.age=19

    application.properties

    Krea AI
    Krea AI

    多功能的一站式AI图像生成和编辑平台

    下载

    就指定一个服务的端口号和工程在启动的时候需要加载的配置文件,SpringBoot会自动去匹配application-{spring.profiles.active}.properties,然后就会找到application-dev.properties配置文件

    server.port=8080
    spring.profiles.active=dev #我们可以指定SpringBoot在启动时加载那个对应的配置文件

    事例代码

    创建了一个事例Person类,让它被实例化的时候从配置文件中读取信息,读取规则:person.{属性名},让把创建new一个Person的实例,添加到IOC容器中。

    创建一个get请求,返回我们的Person的事例,我们看perosn的属性值能否根据我们在application.properties配置文件中指定spring.profiles.active的属性加载对应的配置文件,Person实例中的值是不是预期值

    @ConfigurationProperties(prefix = "person") //初始化的时候从配置文件中读取person.{属性名}的信息赋值给当前对象
    @Data
    public class Person {
        private String name;
        private Integer age;
    }
     
     
     
    @Configuration //配置文件信息,将Person实例注入到IOC容器中
    public class MyConfig {
     
        @Bean
        public Person person() {
            return new Person();
        }
     
    }

    @RestController //创建一个get请求,返回我们的Person的事例,我们看perosn的属性值能否根据我们在application.properties配置文件中指定spring.profiles.active的属性加载对应的配置文件,Person实例中的值是不是预期值

    @RequestMapping("/user")
    public class PersonController {
     
        @Autowired
        private Person person;
     
        @GetMapping
        public Person getPerson() {
            return person;
        }
    }

    工程跑起来,访问http://localhost:8080/user,返回结果:

    {"name":"ZhangSan","age":18}

    把application.properties中的spring.profiles.active的值修改成prod,请求访问http://localhost:8080/user,返回结果:

    {"name":"LiSi","age":19}

    另外如果我们已经将工程打包成jar,可以在启动SpringBoot工程的时候,通过命令行给参数赋值的方式指定spring.profiles.active的值

    java -jar .\web-02-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev

    还有一个比较实用的,就是SpringBoot默认加载application.properties和application.yaml的路径和优先级(从SpringBoot官方文档中看到的:https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config.application-json),加载的优先级:

    • jar包所在的目录下面的/config/{一级子目录}下面的application.properties和application.yaml

    • jar包所在的目录下面的/config下面的application.properties和application.yaml

    • jar包所在的目录下面的application.properties和application.yaml

    • classpath下面/config里面的application.properties和application.yaml

    • classpath下面的application.properties和application.yaml

    场景就是:我们的项目跑了很久了,突发情况需要修改配置文件。但是以前的老配置文件我们也不敢随意修改,这个时候我们就可以在优先级高的地方放我们的新的配合文件了。

    相关专题

    更多
    C++ 高级模板编程与元编程
    C++ 高级模板编程与元编程

    本专题深入讲解 C++ 中的高级模板编程与元编程技术,涵盖模板特化、SFINAE、模板递归、类型萃取、编译时常量与计算、C++17 的折叠表达式与变长模板参数等。通过多个实际示例,帮助开发者掌握 如何利用 C++ 模板机制编写高效、可扩展的通用代码,并提升代码的灵活性与性能。

    10

    2026.01.23

    php远程文件教程合集
    php远程文件教程合集

    本专题整合了php远程文件相关教程,阅读专题下面的文章了解更多详细内容。

    29

    2026.01.22

    PHP后端开发相关内容汇总
    PHP后端开发相关内容汇总

    本专题整合了PHP后端开发相关内容,阅读专题下面的文章了解更多详细内容。

    21

    2026.01.22

    php会话教程合集
    php会话教程合集

    本专题整合了php会话教程相关合集,阅读专题下面的文章了解更多详细内容。

    21

    2026.01.22

    宝塔PHP8.4相关教程汇总
    宝塔PHP8.4相关教程汇总

    本专题整合了宝塔PHP8.4相关教程,阅读专题下面的文章了解更多详细内容。

    13

    2026.01.22

    PHP特殊符号教程合集
    PHP特殊符号教程合集

    本专题整合了PHP特殊符号相关处理方法,阅读专题下面的文章了解更多详细内容。

    11

    2026.01.22

    PHP探针相关教程合集
    PHP探针相关教程合集

    本专题整合了PHP探针相关教程,阅读专题下面的文章了解更多详细内容。

    8

    2026.01.22

    菜鸟裹裹入口以及教程汇总
    菜鸟裹裹入口以及教程汇总

    本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

    55

    2026.01.22

    Golang 性能分析与pprof调优实战
    Golang 性能分析与pprof调优实战

    本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

    9

    2026.01.22

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    Redis6入门到精通超详细教程
    Redis6入门到精通超详细教程

    共47课时 | 5.3万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号