springboot 基础+yml【vaynexiao】

新建项目-选择 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,不要犹豫!

发布了49 篇原创文章 · 获赞 103 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/vayne_xiao/article/details/104881153