新建项目-选择 spring(maven上面)
如果没有spring选项,看这个连接https://blog.csdn.net/weixin_43164644/article/details/88919223
启动类需要增加一个依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
banner
https://www.bootschool.net/ascii
拷贝生成的字符到一个文本文件中,并且将该文件命名为banner.txt
将banner.txt拷贝到项目的resources目录中:
重新查看效果。
修改端口号
Spring Boot项目使用一个全局的配置文件application.properties或者是application.yml
在文件中添加:
server.port=8081
即可修改为8081
运行原理探究
https://www.cnblogs.com/hellokuangshen/p/12450327.html
初步结论:
SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值
将这些值作为自动配置类导入容器,自动配置类就生效,帮我们进行自动配置工作;
整个J2EE的整体解决方案和自动配置都在springboot-autoconfigure的jar包中;
它会给容器中导入非常多的自动配置类(xxxAutoConfiguration),就是给容器中导入这个场景需要的所有组件,并配置好这些组件;
有了自动配置类,免去了我们手动编写配置注入功能组件等的工作;
yml语法
# 对空格要求极高
# k v
server:
port: 8081
# 对象
student:
name: Alice
age: 24
student2: {name: bob, age: 24}
pets:
- cat
- dog
- pig
pets2: [cat,dog,pig]
还可以注入对象的值
创建Dog和Person实体类
@Data
@Component
public class Dog {
private String name;
private int age;
}
@Data
@Component
@ConfigurationProperties(prefix="person") //默认从全局配置文件中获取值
public class Person {
private String name;
private Integer age;
private Boolean happy;
private Date birth;
private Map<String,Object> maps;
private List<String> lists;
private Dog dog;
}
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
@SpringBootTest
class HelloworldApplicationTests {
@Autowired
Person p;
@Test
void contextLoads() {
System.out.println(p);
}
}
还可以加载指定的配置文件
注释掉该注解 @configurationProperties 替换为 @PropertySource(value = "classpath:person.properties")
在resources目录下新建一个person.properties文件,内容如下
name=kuangshen
@PropertySource(value = "classpath:person.properties")
@Component //注册bean
public class Person {
@Value("${name}")
private String name;
......
}
文件占位符
person:
name: qinjiang${random.uuid} # 随机uuid
age: ${random.int}
happy: false
birth: 2020/03/15
maps: {k1: v1,k2: v2}
lists:
- code
- girl
- music
dog:
name: ${person.hello:Bob} # 若中文出现乱码,将idea中File Encodings改为UTF-8
age: 1
1、@ConfigurationProperties只需要写一次即可 , @Value则需要每个字段都添加
2、松散绑定:这个什么意思呢? 比如我的yml中写的last-name,这个和lastName是一样的, - 后面跟着的字母默认是大写的。这就是松散绑定。可以测试一下
3、JSR303数据校验 , 这个就是我们可以在字段是增加一层过滤器验证 , 可以保证数据的合法性
4、复杂类型封装,yml中可以封装对象 , 使用value就不支持
结论:
配置yml和配置properties都可以获取到值 , 强烈推荐 yml;
如果我们在某个业务中,只需要获取配置文件中的某个值,可以使用一下 @value;
如果说,我们专门编写了一个JavaBean来和配置文件进行一一映射,就直接@configurationProperties,不要犹豫!