目录
第一种方式(命令行参数):ApplicationArgument对象注入参数
第二种方式(配置文件):application*.properties
SpringBoot的参数设置
SpringBoot在应用启动过程中,可以通过启动参数给应用传递一些额外的参数来控制应用的运行。接下来介绍这种参数设置的集中方式。
-
一、Spring注入参数的介绍 ~ ~
根据配置的优先级进行排序如下,如果有相同的配置,高优先级的会覆盖掉低优先级的。
- 命令行参数。
- ServletCoinfg和ServletContext。
- 操作系统环境变量。
- application-{profile}.properties或者YAML文件。
- application. properties或者YAML文件。
第一种方式(命令行参数):ApplicationArgument对象注入参数
- 在main方法中可以直接使用注入的参数。Main方法有个args的参数。
- 可以在任何类中,直接通过@Autowired的方式注入一个ApplicationArgument对象,通过对象的方法来使用注入参数。
@Controller |
3. 直接启动项目访问会看到:输入为空
4.这时候我们可以在启动配置里面,配置参数如下:
author=xiaozheng
重启项目,再次访问可以看到如下:说明参数确实已经注入了。我们也获取到参数。
【扩展:】通过jar方式给项目注入参数
java -jar demo-0.0.1-SNAPSHOT.jar username=root password=123456789
第二种方式(配置文件):application*.properties
其他ServletConfig或系统环境变量就不讲,很少通过这种方式去配置SpringBoot,接下来重点讲 配置文件的方式,这种也是最常见的方式。
- 在java同级目录建:resource文件夹,并且将文件夹指定为Sources Root
- 创建application.properties即可。可以看到文件前面有个“小绿叶”表示成功
- 输入server.port=8070,重新启动项目
可以看到项目的启动端口已经修改为:8070,表示配置成功。这里的话,不需要了解application.properties里面的详细配置,后面会整理出来,统一分享。
-
二、Spring提供方面的properties绑定机制
- 默认从application.properties中加载配置。
- 资源文件(application.properties)加载顺序:
- 当前目录/config子目录。
- 当前目录。
- classpath下的config目录。
- classpath目录。
优先级从上到下,如果有相同配置的话,会覆盖。
做个小实验,分别在上面的四个位置新建一个application.properties配置文件
- -> 7000
- -> 7001
- -> 7002
- –>7003
启动项目,它的端口时候7000。说明a)配置优先级最高。
在d)添加下面配置:server.context-path=/test
发现需要:http://localhost:7000/test/hello
才能访问到原来的控制器。说明配置是叠加的。
删除a)配置文件,启动项目,端口为:7001
删除b)配置文件,启动项目,端口为:7002
删除c)配置文件,启动项目,端口为:7003
上述实验,证明了配置文件加载的优先级问题。其实在一般的项目中,配置文件都是在d的目录,在比较大的项目中,有多数据源,就会采用多数据源配置,上述优先级就用到了。
-
三、扩展知识~
我们可以通过命令行参数配置的方式去更改配置文件的名字
Spring.config.name:文件名称
做个小实验:
如果说,我将配置文件改名为:xiaozheng.properties
启动项目:显示8080端口,说明该配置文件没有被加载到。
利用第一种方式,使用命令行对下面的参数进行设置
java -jar demo-0.0.1-SNAPSHOT.jar --spring.config.name=xiaozheng
注意这里不需要加:properties
“ ——“ 表示命令行。
或者是在:IDEA中
也是可以的。