之前写的程序都是按照Spring Boot的默认设置运行的
当然这些设置都是可以手工配置的
我们可以在项目当中创建一个application.properties
文件
这个文件中用以编写需要指定的配置项
这个文件可以放在下列地方
- 当前目录的
/config
子目录下 - 当前目录下
- classpath根目录的
/config
包下 - classpath的根目录下
1和2适合生产环境 , 3和4适合开发环境
Spring会在这4个位置依次寻找该配置文件 , 先找到的为准
这个配置文件当中可以写Spring Boot预定义的配置项
比如 ( 注意等号的两端不要加空格 )
server.port=8081
server.context-path=/pppp
这些配置项会在程序运行的时候生效 , 也就是在8081端口启动tomcat
访问的根路径是 /pppp
也可以在这个配置文件里编写自定义的配置项
配置项之间可以进行相互引用
test.name=spring
test.desc=${test.name} nice
配置随机变量
利用的是RandomValuePropertySource类
test.secret=${random.value}
test.number=${random.int}
test.number.lessThanTen=${random.int(10)}
test.number.inRange=${random.int[1024,2048]}
注入获取配置项
@RestController
public class HelloController {
@Value("${test.ab}")
private String testStr;
@RequestMapping(value="/", method = RequestMethod.GET)
public String index() {
return "Hello Spring Boot : " + testStr;
}
}
@Value
注解实际上执行的就是Spring当中的设值注入
这个注解也可以加在控制器方法的参数上面
Spring Boot程序运行的时候 , 会把这个配置文件中的内容全部加载到自身的作用域当中
可以使用${}
表达式的形式进行获取
@ConfigurationProperties
使用这个注解可以把配置项当中的属性自动注入到某个bean的属性当中
比如
@Component
@ConfigurationProperties(prefix="test")
public class MyConfig {
private String ab;
private String ac;
//getter与setter方法...
}
注意 :
采用这种方式需要引入这个jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>1.5.4.RELEASE</version>
</dependency>
使用Environment接口
@Autowired
private Environment env;
自动注入之后 , 就可以从该对象中获取配置项的值了 , 比如env.getProperty("test.ac")
使用YAML
YAML是"另一种标记语言"的缩写
它是一种直观的能够被计算机识别的数据序列化格式
而且对于人来说可读性更高
容易和脚本语言交互 , 通常用来表达资料序列
对于spring boot程序来说 , 也可以使用application.yml
来进行配置
server:
port: 8082
context-path: /test
注意不同层级之间的缩进 , 以及在属性值之前 ( 冒号后面 ) 必须有一个空格
YAML采用的就是这种严格的语法格式
命令行参数
所有的配置项都可以通过在运行时从命令行传入
并且这样传入的配置项 优先级是最高的
比如
java -jar app.jar --server.port=8090
外部配置文件
在运行时可以从命令行传参指定外部的一个配置文件 , 作为该应用的配置文件 ( 项目内部的配置文件不会生效 )
java -jar app.jar --spring.config.location=/etc/application.yml
同样可以使用yml文件或者properties文件
多个配置文件
有些情况下 , 我们在开发环境与生产环境 , 需要使用的配置项是不同的
但是在环境切换时 , 逐个修改配置项又十分繁琐 , 所以我们可以使用多个配置文件
只需要指定让哪个生效即可
比如我在这里创建了这几个配置文件 ( 实际上SpringBoot程序启动的时候直接去找的仍然是application.yml )
在application.yml当中只写如下配置项
spring:
profiles:
active: prod
这就代表只让application-prod.yml生效