大家好,欢迎来到IT知识分享网。
Spring Boot是简化Spring应用的开发的一个框架。
优点:
- 快速创建独立运行的Spring项目以及与主流框架集成。
- 使用嵌入式的Servlet容器,比如Tomcat、Jetty,应用无需打成war包。
- starters自动依赖与版本控制。
- 大量的自动配置,简化开发,也可修改默认值。
- 无需配置XML,无代码生成,开箱即用。
- 准生产环境的运行时应用监控。
- 与云计算的天然集成。
搭建环境基本要求:必须JDK版本在1.7以上。
一、如何快速搭建Spring Boot项目?
- 1、打开IDEA窗口
- 2、设置MAVEN
- 3、创建项目
- 4、新建一个控制类
- 5、启动spring boot项目
- 6、访问spring boot项目
二、固定的配置文件application.properties或者application.yml
yml:这种语言以数据做为中心,比json、xml更适合做配置文件。
1、yml的基本语法:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- ‘#’表示注释
2、yml支持的数据类型:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值
3、数据类型对象、数组、纯量举例
- 对象:对象键值对使用冒号结构表示,key: value,冒号后面必须加空格。
也可以使用 key:{key1: value1, key2: value2, ...} 还可以使用 key: child-key: value child-key2: value2 较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value ? - complexkey1 - complexkey2 : - complexvalue1 - complexvalue2 意思即对象的属性是一个数组 [complexkey1,complexkey2],对应的值也是一个数组 [complexvalue1,complexvalue2]
- A - B - C
多维数组
key: [value1, value2, ...]
数据结构的子成员是一个数组,则可以在该项下面缩进一个空格。
- - A - B - C
一个相对复杂的例子:意思是 companies 属性是一个数组,每一个数组元素又是由 id、name、price 三个属性构成。
companies: - id: 1 name: company1 price: 200W - id: 2 name: company2 price: 500W
数组也可以使用流式(flow)的方式表示:
companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]
复合结构:数组和对象组合。比如:
languages: - Ruby - Perl - Python websites: YAML: yaml.org Ruby: ruby-lang.org Python: python.org Perl: use.perl.org
转换为 json 为:
{ languages: [ 'Ruby', 'Perl', 'Python'], websites: { YAML: 'yaml.org', Ruby: 'ruby-lang.org', Python: 'python.org', Perl: 'use.perl.org' } }
boolean: - TRUE #true,True都可以 - FALSE #false,False都可以 float:# - 3.14 - 6.e+5 #可以使用科学计数法 int: - 123 - 0b1010_0111_0100_1010_1110 #二进制表示 null: nodeName: 'node' parent: ~ #使用~表示null string: - 哈哈 - 'Hello world' #可以使用双引号或者单引号包裹特殊字符 - newline newline2 #字符串可以拆成多行,每一行会被转化成一个空格 date: - 2018-02-17 #日期必须使用ISO 8601格式,即yyyy-MM-dd datetime: - 2018-02-17T15:02:31+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
三、使用代码读取yml配置文件
- 新建bean
package com.test.demo.springbootdemo01.bean; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; / * 读取yml配置文件 * @author yang33 * @date 2020/4/18 16:42 */ @Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private int age; private Boolean boss; private Date birthDate; private Map
maps; private List
lists; private Dog dog; public class Dog { private String name; private int age; private String sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Boolean getBoss() { return boss; } public void setBoss(Boolean boss) { this.boss = boss; } public Date getBirthDate() { return birthDate; } public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } public Map
getMaps() { return maps; } public void setMaps(Map
maps) { this.maps = maps; } public List
getLists() { return lists; } public void setLists(List
lists) { this.lists = lists; } public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", boss=" + boss + ", birthDate=" + birthDate + ", maps=" + maps + ", lists=" + lists + ", dog=" + dog + '}'; } }
package com.test.demo.springbootdemo01.bean; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.Map; / * 读取yml配置文件 * @author yang33 * @date 2020/4/18 16:42 */ @Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private int age; private Boolean boss; private Date birthDate; private Map
maps; private List
lists; private Dog dog; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Boolean getBoss() { return boss; } public void setBoss(Boolean boss) { this.boss = boss; } public Date getBirthDate() { return birthDate; } public void setBirthDate(Date birthDate) { this.birthDate = birthDate; } public Map
getMaps() { return maps; } public void setMaps(Map
maps) { this.maps = maps; } public List
getLists() { return lists; } public void setLists(List
lists) { this.lists = lists; } public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", boss=" + boss + ", birthDate=" + birthDate + ", maps=" + maps + ", lists=" + lists + ", dog=" + dog + '}'; } }
注解@ConfigurationProperties,是要告诉spring boot将本类的所有属性与配置文件中的相关配置进行绑定,prefix = “person”对配置文件中person下的所有属性一一映射。
刚加上@ConfigurationProperties,会报错:spring boot configuration annotation processor not configured
在pom.xml文件中加上下面依赖就可以了
org.springframework.boot
spring-boot-configuration-processor
true
加上这个依赖后,再次在配置文件中修改或者添加内容,就会有提示,方便很多。
代码提示
@Value注解的功能与@ConfigurationProperties类似,都是获取配置文件中属性的值,并且与配置文件的属性一一映射。
@Value注解的功能与@ConfigurationProperties类似,都是获取配置文件中属性的值,并且与配置文件的属性一一映射。
两种方式的应用场景视情况而定,如果只是仅仅获取几个配置文件的属性值,可以使用@Value;如果是批量的,比如映射一个JavaBean,那么就使用@ConfigurationProperties。
@ConfigurationProperties和@Value对比
- application.yml配置文件这样写:
person: name: 张三 age: 25 boss: true birthDate: 1995/2/15 maps: {k1: v1,k2: v2} lists: - 李四 - 王五 dog: name: 小白 age: 3 sex: 雄性- 输出配置文件信息
代码如下:
package com.test.demo.springbootdemo01; import com.test.demo.springbootdemo01.bean.Person; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class SpringbootDemo01ApplicationTests { @Autowired private Person person; @Test void contextLoads() { System.out.println(person.toString()); } }
启动报错:Error running ‘SpringbootDemo01ApplicationTests.contextLoads’: Failed to resolve org.junit.platform:junit-platform-launcher:1.5.2
原因是:IntelliJ试图在不使用IDE中配置的Maven“用户设置文件”(settings.xml)的情况下,解决所需的工件本身。它将直接连接到Maven Central,但被我的雇主屏蔽了。
解决办法:在pom.xml文件添加依赖:
org.junit.platform
junit-platform-launcher
test
最后输出:
Person{name='张三', age=25, boss=true, birthDate=Wed Feb 15 00:00:00 CST 1995, maps={k1=v1, k2=v2}, lists=[李四, 王五], dog=Dog{name='小白', age=3, sex='雄性'}}
Spring Boot系列知识,下章节内容更加有料,请加关注,不会迷路的。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/89995.html