SpringBoot配置文件(一)https://developer.aliyun.com/article/1393166
Ⅱ、注意事项:value 值加单双引号——字符串🍓
字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。
string: value: hello str1: Hello \n 你好. str2: 'Hello \n 你好.' str3: "Hello \n 你好."
运行下面代码:
package com.example.springbootdemo; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Controller; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.PostConstruct; @Controller//当前类为控制器 @ResponseBody//返回的是数据,而非页面 /*@RestController*/ //复合注解 = @Controller+@ResponseBody //导入外部资源的注解上 加入encoding配置 @PropertySource(value="classpath:/application.properties",encoding = "utf-8") public class TestController { //读取配置文件 myName=张三 // @Value("myName")错误示范 @Value("${string.str1}") private String str1; @Value("${string.str2}") private String str2; @Value("${string.str3}") private String str3; @PostConstruct//声明方法 public void postConstruct(){ System.out.println("string.str1:" + str1); System.out.println("string.str2:" + str2); System.out.println("string.str3:" + str3); } }
可以发现在双引号时str3 \n 进行了换行
由此可以得出结论:
- 字符串默认不用加上单引号或者双引号。
- 单引号会转义特殊字符,特殊字符最终只是⼀个普通的字符串数据。
- 双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思。
Ⅲ、配置对象🍓
我们还可以在 yml 中配置对象,如下配置:
student: id: 1 name: Java age: 18
或者是使用行内写法(与上面的写法作用一致):
student: {id: 1,name: Java,age: 18}
这个时候就不能用 @Value 来读取配置中的对象了(是一整个对象,而不是对象的属性),此时要使用另一个注解 @ConfigurationProperties 来读取,具体实现如下:
新建一个Student类
package com.example.springbootdemo; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "student") @Data //lombok中的注解,提供getter和setter方法还要toString方法 public class Student { private int id; private String name; private int age; }
注意:以上代码中的 getter 和 setter 方法不能省略,要么使用@Data注解,要么生成getter 和 setter 方法。因为类中的值 赋值与取值 需要getter 和 setter 方法。
调用类TestController:
package com.example.springbootdemo; import org.springframework.beans.factory.annotation.Autowired; import javax.annotation.PostConstruct; @Controller//当前类为控制器 @ResponseBody//返回的是数据,而非页面 /*@RestController*/ //复合注解 = @Controller+@ResponseBody public class TestController { //读取配置文件 myName=张三 // @Value("myName")错误示范 @Autowired private Student student; @PostConstruct//声明方法 public void postConstruct(){ System.out.println(student); } }
运行代码:
Ⅳ、配置集合🍓
配置文件也可以配置 list 集合:或者是使用行内写法(与上面的写法作用一致)
types: name: - mysql - sqlserver - db2
或者是使用行内写法(与上面的写法作用一致)
types: {name: [mysql,sqlserver,db2]}
集合的读取和对象一样,也是使用@ConfigurationProperties 来读取的,具体实现如下:
@Component @ConfigurationProperties("dbtypes") @Data public class ListConfig { private List<String> name; }
TestController 类
package com.example.springbootdemo; import org.springframework.beans.factory.annotation.Autowired; import javax.annotation.PostConstruct; @Controller//当前类为控制器 @ResponseBody//返回的是数据,而非页面 /*@RestController*/ //复合注解 = @Controller+@ResponseBody public class TestController { //读取配置文件 myName=张三 // @Value("myName")错误示范 @Autowired private ListConfig listConfig; @PostConstruct//声明方法 public void postConstruct(){ System.out.println(listConfig.getName()); } }
查看更多系统配置项🍓
五、properties VS yml🍭
- properties 是以 key=value 的形式配置的键值类型的配置文件,而 yml 使用的是类似 json 格式的树形配置方式进行配置的,yml 层级之间使用换行缩进的方式配置,key 和 value 之间使用“: ”英文冒号加空格的方式设置,并且空格不可省略。
- properties 为早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用 yml 可以很好的解决数据冗余的问题。
- yml 通用性更好,支持更多语⾔,如 Java、Go、Python 等,如果是云服务器开发,可以使用⼀份配置文件作为 Java 和 Go 的共同配置文件。
- yml 支持更多的数据类型。
六、设置不同环境的配置文件🍭
Ⅰ、创建不同环境的配置文件:🍓
- application-dev.yml(开发环境)
- application-prod.yml(生产环境)
- 其他环境
一定是 application-开头。
Ⅱ、在 application.yml 中设置运行环境🍓
现在设置配置环境可以使用下面很方便的方法,下面active的值为dev,即为开发环境,如果是prod则为生成环境
spring: profiles: active: dev
Ⅲ、代码演示🍓
application-dev.yml
server: port: 9999
application-prod.yml
server: port: 7777
设置不同的端口号,然后运行代码:
可以发现端口号变成了application-dev.yml中设置的端口号,
spring: profiles: active: prod
dev修改成prod,端口号就变成了 7777
这就很方便修改配置环境了




