application.yml配置信息:
likes:
- gamelol
- music
- sleep
likes2: [gamelol,music,sleep]
users:
- name: zhangsan
age: 18
- name: lisi
age: 20
第一种方式:通过@Value("${users}") 注解,但一般只适用于配置的数据比较少的情况:
@RestController
@RequestMapping("/books")
public class BookController {
/** 通过注解的方式获取application的配置值 */
//创建成员变量以便方法获取
@Value("${likes[0]}")
private String likes;
@Value("${likes2[0]}")
private String likes2;
@Value("${users[0].age}")
private String age;
@GetMapping
public String test1(){
System.out.println(likes);
System.out.println(likes2);
System.out.println(age);
}
}
通过运行结果我们可以通过第一种方式获取括号里的值:
第二种方式:注入import org.springframework.core.env.Environment对象:
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private Environment environment;
/**
* Description: 通过注入Environment的方式获取application配置的值
* date: 2022/10/26 10:31
* @author kx
* @since JDK 1.8
*/
@GetMapping("/test")
public String test2(){
String parent =environment.getProperty("name");
System.out.println("....."+parent);
return "springboot is running...03_yaml...222";
}
打印结果如下,这种方式跟第一种大同小异:
第三种方式: 通过@ConfigurationProperties(prefix = "demo.user")配置类的形式创建一个实体类,这种方式常用于配置的数据较多的场合,为前两种方式的优化:
1、在application.properties中进行配置:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:localhost:3306/db1?serverTimezone=UTC
username: root
password: 123456
2、创建实体类:
@Data
@Component
@ConfigurationProperties("spring.datasource")
public class MyDataSource {
private String driver;
private String url;
private String username;
private String password;
3、进行test测试:
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired
private MyDataSource myDataSource;
/**
* Description: 通过创建实体类配置ConfigurationProperties的方式获取application配置的值
* date: 2022/10/26 10:40
* @author kx
* @since JDK 1.8
*/
@GetMapping("/test")
public String test3(){
System.out.println("springboot is running ...03_yaml... ");
System.out.println(myDataSource);
return "springboot is running...03_yaml...333";
}
参数较多时,通过Map集合的形式接收多个参数: