之前写的程序都是按照Spring Boot的默认设置运行的
当然这些设置都是可以手工配置的

我们可以在项目当中创建一个application.properties文件
这个文件中用以编写需要指定的配置项

这个文件可以放在下列地方

  1. 当前目录的/config子目录下
  2. 当前目录下
  3. classpath根目录的/config包下
  4. 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;
    }
}
@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方法...
}
@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;
@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 使用aes_springboot 使用aes


比如我在这里创建了这几个配置文件 ( 实际上SpringBoot程序启动的时候直接去找的仍然是application.yml )

application.yml当中只写如下配置项

spring:
  profiles:
    active: prod

这就代表只让application-prod.yml生效