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

 更新时间:2023年04月10日 17:08:07   作者:Vince_YANG_94  
这篇文章主要介绍了springboot指定profiles启动失败问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

springboot指定profiles启动失败

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

凡事总有意外

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

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

没有读取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

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring MVC Controller返回值及异常的统一处理方法

    Spring MVC Controller返回值及异常的统一处理方法

    这篇文章主要给大家介绍了关于Spring MVC Controller返回值及异常的统一处理方法,文中通过示例代码介绍的非常详细,对大家的学习或者使用Spring MVC具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-11-11
  • springboot 场景启动器使用解析

    springboot 场景启动器使用解析

    这篇文章主要介绍了springboot 场景启动器使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • dubbo服务无法注册到zookeeper的问题

    dubbo服务无法注册到zookeeper的问题

    Dubbo+Zookeeper项目服务注册失败,因模块创建时误选Web项目导致main下文件夹名为data,服务未被识别,更改为java后,服务正常注册,Zookeeper心跳及接口调用问题解决
    2025-07-07
  • java中的 toString()方法实例代码

    java中的 toString()方法实例代码

    toString()方法 相信大家都用到过,一般用于以字符串的形式返回对象的相关数据。这篇文章主要介绍了java中的 toString()方法,需要的朋友可以参考下
    2017-05-05
  • IntelliJ IDEA 2021.1 首个 Beta 版本发布

    IntelliJ IDEA 2021.1 首个 Beta 版本发布

    这篇文章主要介绍了IntelliJ IDEA 2021.1 首个 Beta 版本发布,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java常见报错类型及解决方案详细解析(从异常处理到错误排查)

    Java常见报错类型及解决方案详细解析(从异常处理到错误排查)

    这篇文章主要介绍了Java常见报错类型及解决方案的相关资料,文中结合具体案例提供针对性解决方案,帮助开发者快速定位并修复问题,需要的朋友可以参考下
    2025-05-05
  • 如何通过eclipse web项目导入itellij idea并启动

    如何通过eclipse web项目导入itellij idea并启动

    这篇文章主要介绍了如何通过eclipse web项目导入itellij idea并启动,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • 如何使用Springfox Swagger实现API自动生成单元测试

    如何使用Springfox Swagger实现API自动生成单元测试

    Springfox是一个使用Java语言开发开源的API Doc的框架,它的前身是swagger-springmvc,可以将我们的Controller中的方法以文档的形式展现,这篇文章主要介绍了如何使用Springfox Swagger实现API自动生成单元测试,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • java实现双向链表的增删改

    java实现双向链表的增删改

    这篇文章主要为大家详细介绍了java实现双向链表的增删改,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 使用jenkins+maven+git发布jar包过程详解

    使用jenkins+maven+git发布jar包过程详解

    这篇文章主要介绍了使用jenkins+maven+git发布jar包过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07

最新评论