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

这篇文章主要讲解了“springboot指定profiles启动失败问题如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springboot指定profiles启动失败问题如何解决”吧!

    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

    就指定一个服务的端口号和工程在启动的时候需要加载的配置文件,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

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

    感谢各位的阅读,以上就是“springboot指定profiles启动失败问题如何解决”的内容了,经过本文的学习后,相信大家对springboot指定profiles启动失败问题如何解决这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程之家,小编将为大家推送更多相关知识点的文章,欢迎关注!

    版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

    相关推荐


    今天小编给大家分享的是Springboot下使用Redis管道(pipeline)进行批量操作的介绍,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起...
    本篇文章和大家了解一下springBoot项目常用目录有哪些。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。springBoot项目常用目录springBoot项...
    本篇文章和大家了解一下Springboot自带线程池怎么实现。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。一: ThreadPoolTaskExecuto1 ThreadP...
    这篇文章主要介绍了SpringBoot读取yml文件有哪几种方式,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。Spring Boot读取yml文件的主要方式...
    今天小编给大家分享的是SpringBoot配置Controller实现Web请求处理的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧...
    本篇文章和大家了解一下SpringBoot实现PDF添加水印的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。简介PDF(Portable Document Form...
    本篇文章和大家了解一下解决Springboot全局异常处理与AOP日志处理中@AfterThrowing失效问题的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有...
    本篇文章和大家了解一下IDEA创建SpringBoot父子Module项目的实现方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。目录前言1. 软硬件环...
    今天小编给大家分享的是springboot获取项目目录路径的方法,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收...
    本篇内容主要讲解“SpringBoot+Spring Security无法实现跨域如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面...
    这篇文章主要介绍“vue怎么发送请求到springboot程序”,在日常操作中,相信很多人在vue怎么发送请求到springboot程序问题上存在疑惑,小编查阅了各式资料,整理...
    本篇内容主要讲解“Springboot内置的工具类CollectionUtils如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家...
    本文小编为大家详细介绍“SpringBoot上传文件大小受限如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot上传文件大小受限如何解决”文章能帮...
    本文小编为大家详细介绍“springboot拦截器如何创建”,内容详细,步骤清晰,细节处理妥当,希望这篇“springboot拦截器如何创建”文章能帮助大家解决疑惑,下面...
    本文小编为大家详细介绍“Hikari连接池使用SpringBoot配置JMX监控的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Hikari连接池使用SpringBoot配...
    今天小编给大家分享一下SpringBoot如何使用Sa-Token实现权限认证的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大...
    这篇文章主要介绍“SpringBoot如何集成SFTP客户端实现文件上传下载”,在日常操作中,相信很多人在SpringBoot如何集成SFTP客户端实现文件上传下...
    本篇内容主要讲解“Springboot插件怎么开发”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Springboot插件怎
    这篇文章主要介绍“Springboot怎么解决跨域请求问题”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇...
    今天小编给大家分享一下如何在SpringBoot2中整合Filter的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文...