为什么要外置为属性赋值?
说明:当配置需要经常修改的属性值时,如果需要修改源码,则要经常重新编译,在生产中肯定不可取,所有将属性值配置到源码之外,用yml或者properties文件,好处就是随意修改,不用重新编译。
首先要跟目录发布,不然根本读不到文件
#服务器配置
server:
port: 8080 #端口号8080
servlet:
context-path: / #根目录发布
1.用系统配置文件赋值(不推荐)
- 在系统的yml配置属性值
jdbc:
url: 127.0.0.1:3306
username: root
- 创建controllerl类,运用@Value直接赋值
//返回JSON字符传
@RestController
public class TestController {
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@RequestMapping("/jdbc")
public String getMessage() {
return url+"+"+username;}
}
- 输入localhost:8080/jdbc查看
- 批量赋值
如果数据很多,每个都要@Value,肯定不现实
引入jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
改造controller类
@RestController
@ConfigurationProperties(prefix = "jdbc")
public class TestController {
private String url;
private String username;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@RequestMapping("/jdbc")
public String getMessage() {
return url+"+"+username;}
//必须添加set,get方法
}
2.自建文件配置(推荐)
引入jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
YML文件是SpringBoot程序中最为重要的核心配置文件,配置文件本来就很多,在加上赋值,就让可读性变差,另外建立文件,可以分类,更易管理。
- 在resources下创建properties文件夹管理配置文件
- 在properties目录下创建测试文件student.properties
student.id=999
student.name=xxxjjj
- 编辑StudentController类
@RestController
//spring容器启动时加载指定的配置文件
@PropertySource("classpath:/properties/student.properties")
public class StudentController {
@Value("${student.id}")
private Integer id;
@Value("${student.name}")
private String name;
@RequestMapping("/student")
public String getMsg() {
return id+name;
}
}
- 输入localhost:8080/student
3.配置实例化对象
-
创建实体类
//lambok插件
@Data
//链式加载 重写SET
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
//配置初始化数据
@ConfigurationProperties(prefix="user")
public class User {
private Integer id;
private String username;
private Integer age;
private String sex;
}
- 配置文件user.properties
user.id=1001
user.username=tomcat
user.age=18
user.sex=nan
- 配置类
//交给spring容器管理
@Component
//配置文件路径
@PropertySource("classpath:/properties/user.properties")
public class UserConfig {
@Value("${user.id}")
private Integer id;
@Value("${user.username}")
private String username;
@Value("${user.age}")
private Integer age;
@Value("${user.sex}")
private String sex;
//spring通过配置类实例化对象
@Bean
public User user() {
return new User(id, username,age,sex);
}
}
- 测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class Day01DemoApplicationTests {
@Autowired
private User user;
@Test
public void contextLoads() {
System.out.println(user);
}
}