《SpringBoot篇》03.超详细属性配置介绍

简介: 《SpringBoot篇》03.超详细属性配置介绍

1.临时属性设置


目前我们的程序包打好了,可以发布了。但是程序包打好以后,里面的配置都已经是固定的了,比如配置了服务器的端口是8080。如果我要启动项目,发现当前我的服务器上已经有应用启动起来并且占用了8080端口,难道要重新把打包好的程序修改一下吗?比如我要把打包好的程序启动端口改成80。


SpringBoot提供了灵活的配置方式,如果你发现你的项目中有个别属性需要重新配置,可以使用临时属性的方式快速修改某些配置。方法也特别简单,在启动的时候添加上对应参数就可以了。


java –jar springboot.jar(jar包名称) –-server.port=80

上面的命令是启动SpringBoot程序包的命令,在命令输入完毕后,空一格,然后输入两个-号。下面按照属性名=属性值的形式添加对应参数就可以了。当属性存在多级名称时,中间使用点分隔,和properties文件中的属性格式完全相同。

如果你发现要修改的属性不止一个,可以按照上述格式继续写,属性与属性之间使用空格分隔。


 配置多个临时参数,如下:


java –jar springboot.jar –-server.port=80 --logging.level.root=debug

(1.)属性加载优先级

现在我们的程序配置受两个地方控制了,第一配置文件,第二临时属性。并且临时属性的加载优先级要高于配置文件的。

其实还有很多其他的配置方式,打开官方文档中对应的内容,就可以查看配置读取的优先顺序。

地址:https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config


image.png


 这个表中的优先级是下面的比上面的优先级高.我们可以看到,居然有14种配置的位置,而我们现在使用的是这里面的2个。第3条Config data说的就是使用配置文件,第11条Command line arguments说的就是使用命令行临时参数。而这14种配置的顺序就是SpringBoot加载配置的顺序.


比如你现在加载了一个user.name属性。结果你发现出来的结果和你想的不一样,那肯定是别的优先级比你高的属性覆盖你的配置属性了,那你就可以看着这个顺序挨个排查。哪个位置有可能覆盖了你的属性。


总结


使用jar命令启动SpringBoot工程时可以使用临时属性替换配置文件中的属性

临时属性添加方式:java –jar 工程名.jar –-属性名=值

多个临时属性之间使用空格分隔

临时属性必须是当前boot工程支持的属性,否则设置无效

(2.)开发环境中使用临时属性

临时使用目前是有了,但是上线的时候通过命令行输入的临时属性必须是正确的啊,那这些属性配置值我们必须在开发环境中测试好才行。下面说一下开发环境中如何使用临时属性,其实就是Idea界面下如何操作了。


a.第一种方式:

打开SpringBoot引导类的运行界面,在里面找到配置项。其中Program arguments对应的位置就是添加临时属性的,可以加几个试试效果。


image.png


image.png

b.第二种方式:

做到这里其实可以产生一个思考了,如果对java编程熟悉的小伙伴应该知道,我们运行main方法的时候,如果想使用main方法的参数,也就是下面的args参数,就是在上面这个位置添加的参数。

public static void main(String[] args) {
}

原来是这样,通过这个args就可以获取到参数。再来看我们的引导类是如何书写的


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

这个args参数居然传递给了run方法,看来在Idea中配置的临时参数就是通过这个位置传递到我们的程序中的。

我们可以不传入arg参数,这样外部临时属性就无法进入到SpringBoot程序中了。


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

我们可以直接写成一个字符串数组,传递给程序入口。当然,这种做法并没有什么实际开发意义。


public static void main(String[] args) {
    String[] arg = new String[1];
    arg[0] = "--server.port=8082";
    SpringApplication.run(SSMPApplication.class, arg);
}

2.配置文件分类


SpringBoot提供了配置文件和临时属性的方式来对程序进行配置。前面一直说的是临时属性,这一节要说说配置文件了。其实这个配置文件我们一直在使用,只不过我们用的是SpringBoot提供的4级配置文件中的其中一个级别。4个级别分别是:


类路径下配置文件(一直使用的是这个,也就是resources目录中的application.yml文件)

类路径下config目录下配置文件

程序包所在目录中配置文件

程序包所在目录中config目录下配置文件

 其实上述4种文件是提供给你了4种配置文件书写的位置,功能都是一样的,都是做配置的。就是因为位置不同,产生了差异。总体上来说,4种配置文件如果都存在的话,有一个优先级的问题。上面4个文件的加载优先顺序为


file :config/application.yml 【最高】

file :application.yml

classpath:config/application.yml

classpath:application.yml 【最低】

说一个最典型的应用吧。


场景A:你作为一个开发者,你做程序的时候为了方便自己写代码,配置的数据库肯定是连接你自己本机的,咱们使用4这个级别,也就是之前一直用的application.yml。

场景B:现在项目开发到了一个阶段,要联调测试了,连接的数据库是测试服务器的数据库,肯定要换一组配置吧。你可以选择把你之前的文件中的内容都改了,目前还不麻烦。

场景C:测试完了,一切OK。你继续写你的代码,你发现你原来写的配置文件被改成测试服务器的内容了,你要再改回来。场景B中把你的内容都改掉了,你现在要重新改回来,一直改,非常的麻烦。

解决方案很简单,用上面的3这个级别的配置文件就可以快速解决这个问题,再写一个配置就行了。两个配置文件共存,因为config目录中的配置加载优先级比你的高,所以配置项如果和级别4里面的内容相同就覆盖了。


级别1和2什么时候使用呢?程序打包以后就要用这个级别了,管你程序里面配置写的是什么?我的级别高,可以轻松覆盖你,就不用考虑这些配置冲突的问题了。


总结


配置文件分为4种


项目类路径配置文件:服务于开发人员本机开发与测试

项目类路径config目录中配置文件:服务于项目经理整体调控

工程路径配置文件:服务于运维人员配置涉密线上环境

工程路径config目录中配置文件:服务于运维经理整体调控

多层级配置文件间的属性采用叠加并覆盖的形式作用于程序


3.自定义配置文件

之前咱们做配置使用的配置文件都是application.yml,其实这个文件也是可以改名字的,这样方便维护。

自定义配置文件方式有如下两种:


方式一:使用临时属性设置配置文件名,注意仅仅是名称,不要带扩展名


image.png


方式二:使用临时属性设置配置文件路径,这个是全路径名


image.png


也可以设置加载多个配置文件


image.png


使用的属性一个是spring.config.name,另一个是spring.config.location,这个一定要区别清楚。


注:


我们现在研究的都是SpringBoot单体项目,就是单服务器版本。其实企业开发现在更多的是使用基于SpringCloud技术的多服务器项目。这种配置方式和我们现在学习的完全不一样,所有的服务器将不再设置自己的配置文件,而是通过配置中心获取配置,动态加载配置信息,为了集中管理。


总结


配置文件可以修改名称,通过启动参数设定

配置文件可以修改路径,通过启动参数设定

微服务开发中配置文件通过配置中心进行设置


相关文章
|
4月前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。
|
1月前
|
druid Java Maven
|
1月前
|
Java 应用服务中间件 Maven
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
SpringBoot Maven 项目打包的艺术--主清单属性缺失与NoClassDefFoundError的优雅解决方案
329 0
|
3月前
|
缓存 Java 数据库连接
Spring Boot 资源文件属性配置,紧跟技术热点,为你的应用注入灵动活力!
【8月更文挑战第29天】在Spring Boot开发中,资源文件属性配置至关重要,它让开发者能灵活定制应用行为而不改动代码,极大提升了可维护性和扩展性。Spring Boot支持多种配置文件类型,如`application.properties`和`application.yml`,分别位于项目的resources目录下。`.properties`文件采用键值对形式,而`yml`文件则具有更清晰的层次结构,适合复杂配置。此外,Spring Boot还支持占位符引用和其他外部来源的属性值,便于不同环境下覆盖默认配置。通过合理配置,应用能快速适应各种环境与需求变化。
45 0
|
5月前
|
Java 关系型数据库 MySQL
SpringBoot系列教程之事务传递属性
SpringBoot系列教程之事务传递属性
|
6月前
|
Java Maven
springboot jar包启动提示没有主清单属性
springboot jar包启动提示没有主清单属性
204 1
|
6月前
|
Java 开发者 Spring
Spring Boot中的资源文件属性配置
【4月更文挑战第28天】在Spring Boot应用程序中,配置文件是管理应用程序行为的重要组成部分。资源文件属性配置允许开发者在不重新编译代码的情况下,对应用程序进行灵活地配置和调整。本篇博客将介绍Spring Boot中资源文件属性配置的基本概念,并通过实际示例展示如何利用这一功能。
64 1
|
6月前
|
XML 设计模式 Java
springboot创建并配置环境3 - 配置扩展属性(下)
springboot创建并配置环境3 - 配置扩展属性(下)
springboot创建并配置环境3 - 配置扩展属性(下)
|
6月前
|
JSON Java 数据库连接
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
111 1
|
6月前
|
SQL Java
【SpringBoot】List<实体类>如何去重,单、多属性去重
【SpringBoot】List<实体类>如何去重,单、多属性去重
423 0