项目中有许多公共使用的变量,例如端口号,连接数据库的配置,还有我们自己创建的变量,这些可以放到SpringBoot的配置文件中统一调配使用
properties
基本语法格式:
key=value
例如配置项目的端口号为8888:
server.port=8888
在配置文件中自定义一个变量:
myTest=zhangsan
在类中读取该变量:
使用@Value()注解
@Controller//当前类为控制器
@ResponseBody//返回的是数据,而不是页面
public class TestController {
@Value("myTest")
private String myTest;
@RequestMapping("/getConfig")
public String getConfig(){
return myTest;
}
}
可以看到最终的结果与我们预期的不一致,这是因为@Value(“myTest”)的含义是将"myTest"字符串赋值给了myTest变量
正确的写法应该是:
@Value(${myTest})
还可以使用配置文件链接数据库:
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=1234
yml
基本语法格式:
key: value
注意:冒号后面有一个空格,不可以省略
例如使用yml进行端口号的变更:
server:
port: 6666
例如使用yml进行数据库链接:
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8
username: root
password: 1234
需要注意的是,存储字符串时不用加"",如果加了双引号,转义字符会转义
application.yml:
myString: 你好,\n世界
myString2: '你好,\n世界'
myString3: "你好,\n世界"
TestController:
@Controller//当前类为控制器
@ResponseBody//返回的是数据,而不是页面
public class TestController {
@Value("${myString}")
public String myString;
@Value("${myString2}")
public String myString2;
@Value("${myString3}")
public String myString3;
@PostConstruct
public void postConstruct(){
System.out.println("myString:" + myString);
System.out.println("myString2:" + myString2);
System.out.println("myString3:" + myString3);
}
}
yml存储对象
例如存储student对象:
student:
id: 1
name: xiao
age: 19
还可以写成一行的形式:
student: {id: 1,name: xiao,age: 19}
专门创建一个类,属性名和配置中的key值相同,并且需要包含setter和getter方法(这里使用lombok的@Data)
package com.example.demo;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@ConfigurationProperties("student")
@Component
@Data
public class StudentComponent {
private int id;
private String name;
private int age;
}
在Controller类中可以获取student对象
@Controller//当前类为控制器
@ResponseBody//返回的是数据,而不是页面
public class TestController {
@Autowired
private StudentComponent studentComponent;
@PostConstruct
public void postConstruct(){
System.out.println(studentComponent);
}
}
配置集合
yml文件:
all-star:
name:
- curry
- lebron
- durant
还可以写成一行的格式:
all-star: {name: [curry,lebron,durant]}
AllStarComponent文件:
@Component
@Data
@ConfigurationProperties("all-star")
public class AllStarComponent {
private List<String> name;
}
Controller文件:
@Controller//当前类为控制器
@ResponseBody//返回的是数据,而不是页面
public class TestController {
@PostConstruct
public void postConstruct(){
System.out.println(allStarComponent);
}
@Autowired
private AllStarComponent allStarComponent;
}
配置文件的使用
当我们一个项目中有多个配置文件,可以指定类使用哪个配置文件,以及编码格式
@PropertySource(value = "application.properties", encoding = "utf-8")
一个项目分为开发环境和生产环境,我们可以直接在配置文件中设置不同环境的配置文件
命名规范是前面必须是application,-后面的可以自定义
例如在开发环境中设置端口号为8888
# 配置开发环境
server:
port: 8888
在生产环境中设置端口号为9999
# 配置生产环境
server:
port: 9999
在application.yml中选择使用哪个环境的配置文件,这里了使用生产环境的
spring:
profiles:
active: prod
可以看到运行时端口号确实是9999