持续学习&持续更新中…
守破离
【Java从零到架构师第③季】【41】SpringBoot-配置文件_YAML_lombok_设置BannerL
应用程序配置文件
比如:
注意:
- 是项目(project)的根路径,而不是模块(module)的根路径
- Maven管理的项目,resources目录下的文件会被编译到classpath(target/calsses/)下
配置文件的内容
https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config-application-property-files
server.port=8080
server.servlet.context-path=/sb_cf
运行参数、VM选项
不想通过命令行启动jar,而是想通过IDEA设置让IDEA启动项目的话,配置步骤如下:
或者通过VM选项:
application配置文件
application.properties:
plain=normal_plain
names=lpruoyu, lp, ruoyu
scores={'lpruoyu':111, 'lp':222, 'ruoyu':333}
homes={'lpruoyu':'SX', 'lp':'BJ', 'ruoyu':'NF'}
@RestController
public class TestController {
@Value("${plain}")
private String plain;
@Value("${names}")
private String[] names;
@Value("#{${scores}}")
private Map<String, Integer> scores;
@Value("#{${homes}}")
private Map<String, String> homes;
@GetMapping("/test")
public String test() {
for (String name : names) {
System.out.println(name);
}
scores.forEach((k, v) -> {
System.out.println(k + "_" + v);
});
homes.forEach((k, v) -> {
System.out.println(k + "_" + v);
});
return "running success!";
}
}
lombok
官网:https://projectlombok.org/
我的这个IDEA版本已经自动安装好了lombok插件,因此不用安装插件。
lombok依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
@Component
@ConfigurationProperties("person")
@Data
public class Person {
private Integer id;
private Integer age;
private String name;
private String[] nickNames;
}
person:
id: 1
age: 22
name: lpruoyu
nick-names:
- lp2
- ruoyu2
- lpx2
YAML
server:
port: 8888
servlet:
context-path: /yml
name: "lp\truoyu"
@RestController
public class TestController {
@Value("${name}")
private String name;
@GetMapping("/test")
public String test() {
System.out.println(name);
return "test" + name;
}
}
YAML—属性绑定1
属性绑定的本质是通过setter方法设置的
第一种绑定方式:
application.yml:
id: 10
age: 22
@Component
public class Person {
@Value("${id}")
private Integer id;
@Value("${age}")
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", age=" + age +
'}';
}
}
@RestController
public class TestController {
@Value("${name}")
private String name;
@Autowired
private Person person;
@GetMapping("/test")
public String test() {
System.out.println(person);
return "test" + name;
}
}
第二种绑定方式:
application.yml:
person:
id: 1
age: 22
@Component
@ConfigurationProperties("person")
public class Person {
private Integer id;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", age=" + age +
'}';
}
}
YAML—属性绑定2
person:
id: 1
name: lpruoyu
nick-names: [ lp1, ruoyu1, lpx1 ]
dog:
age: 10
name: hz
dogs:
- age: 10
name: hz1
- age: 11
name: hz2
hobbies:
- childhood: run
- youth: basketball
- manhood: infinity
@Component
@ConfigurationProperties("person")
@Data
public class Person {
private Integer id;
private String name;
private String[] nickNames;
private Map<String, String> hobbies;
private Dog dog;
private List<Dog> dogs;
@Data
private static class Dog {
private Integer age;
private String name;
}
}
@RestController
public class TestController {
@Autowired
private Person person;
@GetMapping("/test")
public String test() {
System.out.println(person);
return "test";
}
}
@ConfigurationProperties("student")
@Data
public class Student {
private Integer id;
private String name;
private String[] nickNames;
private Map<String, String> hobbies;
private Dog dog;
private List<Dog> dogs;
@Data
private static class Dog {
private Integer age;
private String name;
}
}
student:
id: 1
name: lpruoyu
nick-names:
- lp1
- ruoyu1
- lpx1
dog:
age: 10
name: hz
dogs:
- age: 10
name: hz1
- age: 11
name: hz2
hobbies:
- childhood: run
- youth: basketball
- manhood: infinity
@RestController
@EnableConfigurationProperties(Student.class)
public class TestController {
@Autowired
private Student student;
@GetMapping("/test")
public String test() {
System.out.println(student);
return "test";
}
}
YAML—构造方法绑定
cat:
id: 1
name: lpruoyu
nick-names:
- lp
- ruoyu
- lpx
dog:
age: 10
name: hz
dogs:
- age: 10
name: hz
- age: 11
name: hz
hobbies:
- childhood: run
- youth: basketball
- manhood: infinity
@ConfigurationProperties("cat")
@ToString
@ConstructorBinding
public class Cat {
private Integer id;
private String name;
private String[] nickNames;
private Map<String, String> hobbies;
private Dog dog;
private List<Dog> dogs;
public Cat(Integer id, String name, String[] nickNames, Map<String, String> hobbies, Dog dog, List<Dog> dogs) {
this.id = id;
this.name = name;
this.nickNames = nickNames;
this.hobbies = hobbies;
this.dog = dog;
this.dogs = dogs;
}
@ToString
@ConstructorBinding
public static class Dog {
private Integer age;
private String name;
public Dog(Integer age, String name) {
this.age = age;
this.name = name;
}
}
}
@RestController
@EnableConfigurationProperties(Cat.class)
public class TestController {
@Autowired
private Cat cat;
@GetMapping("/test")
public String test() {
System.out.println(cat);
return "test";
}
}
YAML—@ConfigurationProperties与@Bean
@Data
public class Person {
private Integer id;
private String name;
private String[] nickNames;
private Map<String, String> hobbies;
private Dog dog;
private List<Dog> dogs;
@Data
public static class Dog {
private Integer age;
private String name;
}
}
person:
id: 1
name: lpruoyu
nick-names:
- lp
- ruoyu
- lpx
dog:
age: 10
name: hz
dogs:
- age: 10
name: hz
- age: 11
name: hz
hobbies:
- childhood: run
- youth: basketball
- manhood: infinity
@Configuration
public class BeanConfiguration {
@Bean
@ConfigurationProperties("person")
public Person person() {
return new Person();
}
}
@RestController
public class TestController {
@Autowired
private Person person;
@GetMapping("/test")
public String test() {
System.out.println(person);
return "test";
}
}
YAML—宽松绑定
拆分配置文件
@Component
@ConfigurationProperties("jdbc")
@Data
public class JdbcProperties {
private String driverClassName;
private String username;
private String password;
private String url;
}
@RestController
public class TestController {
@Autowired
private JdbcProperties jdbcProperties;
@GetMapping("/test")
public String test() {
return jdbcProperties.toString();
}
}
application.yml:
spring:
profiles:
active: development
server:
port: 8888
servlet:
context-path: /yml
---
spring:
profiles: development
jdbc:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test_mybatis?useSSL=false
username: employee01
password: employee01
---
spring:
profiles: production
jdbc:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/lp_resume?useSSL=false
username: root
password: root
application.yml:
spring:
profiles:
active: development
server:
port: 8080
application-development.yml:
jdbc:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test_mybatis?useSSL=false
username: employee01
password: employee01
application-production.yml:
jdbc:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/lp_resume?useSSL=false
username: root
password: root
如果公共配置文件(application.yml)内容过多的话,还可以将公共配置文件的内容再拆分出来:
application.yml:
spring:
profiles:
active:
- development
- port
- ctx
application-ctx.yml:
server:
servlet:
context-path: /yml
application-port.yml:
server:
port: 8080
设置Banner
- Banner官网说明:https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-banner
- Banner生成:http://patorjk.com/software/taag
resources/banner.txt:
_
| |
| | _ __ _ __ _ _ ___ _ _ _ _
| | | '_ \ | '__| | | | | / _ \ | | | | | | | |
| | | |_) | | | | |_| | | (_) | | |_| | | |_| |
|_| | .__/ |_| \__,_| \___/ \__, | \__,_|
| | __/ |
|_| |___/
┌─┐ ┌─┐
┌──┘ ┴───────┘ ┴──┐
│ │
│ ─── │
│ ─┬┘ └┬─ │
│ │
│ ─┴─ │
│ │
└───┐ ┌───┘
│ │
│ │ ${AnsiColor.BRIGHT_MAGENTA}神兽保佑,永无bug${AnsiColor.DEFAULT}
│ │
│ └──────────────┐
│ │
│ ├─┐
│ ┌─┘
│ │
└─┐ ┐ ┌───────┬──┐ ┌──┘
│ ─┤ ─┤ │ ─┤ ─┤
└──┴──┘ └──┴──┘
${AnsiColor.BRIGHT_YELLOW}
.::::.
.::::::::.
:::::::::::
..:::::::::::'
'::::::::::::'
.::::::::::
'::::::::::::::..
..::::::::::::.
``::::::::::::::::
::::``:::::::::' .:::.
::::' ':::::' .::::::::.
.::::' :::: .:::::::'::::.
.:::' ::::: .:::::::::' ':::::.
.::' :::::.:::::::::' ':::::
.::' :::::::::::::::' ::::.
...::: ::::::::::::::' ::::.
````':. ':::::::::' ::::..
':::::' ':'````..
${AnsiColor.DEFAULT}
.::::.
.::::::::.
:::::::::::
..:::::::::::'
'::::::::::::'
.::::::::::
'::::::::::::::..
..::::::::::::.
``::::::::::::::::
::::``:::::::::' .:::.
::::' ':::::' .::::::::.
.::::' :::: .:::::::'::::.
.:::' ::::: .:::::::::' ':::::.
.::' :::::.:::::::::' ':::::
.::' :::::::::::::::' ::::.
...::: ::::::::::::::' ::::.
````':. ':::::::::' ::::..
':::::' ':'````..
spring-boot.version : ${spring-boot.version}
运行效果:
注意
- 也可以在IDEA中配置Program arguments:
--spring.profiles.active=development,port,ctx 来配置 - 对应的VM options:
-Dspring.profiles.active=development,port,ctx - 可以在Program arguments(或者VM options)中配置:
--server.port=8888 ,使用这两种方式设置配置信息的优先级是最高的。 - Program arguments和VM options的多个配置使用
空格 隔开,例如:--spring.profiles.active=production,port,ctx --server.port=9999 - 当然也可以通过Program arguments和VM options传入其他配置信息:
- Program arguments:
--name=lp --age=20 - VM options:
-Dname=lp -Dage=20 - 使用
@Value("name") 、@Value("age") 就可以注入到对象的属性中使用。
参考
小码哥-李明杰: Java从0到架构师③进阶互联网架构师.
本文完,感谢您的关注支持!
|