引言

在之前的博客中说到了怎么样去创建一个SpringBoot的项目以及创建这个Spring项目之后怎么去启动使用这个SpringBoot的项目文件,还有就是SpringBoot项目的启动原理。下面的博客中就开始进入到SpringBoot关于配置的学习。

项目介绍

在使用IDEA创建好SpringBoot项目的时候IDEA会自动为我们创建一些东西,下面来对这些内容进行简单的说明。

  • 在使用IDEA创建的时候主程序是已经被创建好了
  • resources文件夹中的目录结构
    static:保存项目中所用到的静态资源,例如在项目中使用的css,JavaScript文件等等
    templates:保存所有模板页面,因为在SpringBoot中默认是使用jar包的方式,并且在这个jar包中嵌入了Tomcat,所以默认是不支持jsp的页面的,但是我们可以使用模板引擎来进行设置。
    application.properties:应用的配置的文件。这个里面主要是对SpringBoot的应用的配置,在之前我们提到的SpringBoot是使用默认的配置。但是在很多得情况下不需要使用到默认的配置,就可以使用这个配置文件进行设置。这个文件默认是啥都没有的

下面就来说说SpringBoot的配置文件。

server.port=8081

例如使用上面这个配置来指定对应的应用端口。当然在eclipse中使用STS工具也是一样的设置。

SpringBoot的配置
配置文件

SpringBoot 使用的是一个全局的配置文件,就是上面提到的application.properties配置文件,这个文件的路径放在src/main/resources/目录下面或者放在类路径下面,并且这个文件名是固定的。上面的例子中也可以看到,IDEA工具默认创建的时候创建到对应的第一个目录下面。既然是全局的配置文件,那么就可以对全局的默认配置进行修改。

关于这个配置文件有两种格式

  • application.properties
  • application.yml

下面的内容就是关于专门讲解yml的配置文件。这个也是目前比较流行的一种配置文件的格式

  • YAML A Markup Language :是一种标记语言。
  • YAML is not Markup Language:不是一个标记文件

而在Spring中经常使用到的配置文件的形式都是以XML后缀的文件。但YAML文件是以数据为中心的,所以说这个标记文件比json或者是xml等一些配置文件更适合当配置文件。所以在SpringBoot中使用了这个文件作为配置文件。

下面创建一个application.yml的配置文件。

YAML语法
server:port: 8081
XML 语法
<server><port>8081</port>
</server>

从上面的配置中可以看到使用XML将大多的数据浪费在了标签的开闭上,真正有用的数据很少,这个也是xml和json格式的数据两者在数据传输领域的差别。

知识扩展:
在这里做一个简单的知识扩展,在做移动端,或者是前端开发的时候很多的时候数据传输格式都是以JSON格式的数据为主,这个主要是为了节省流量。很多的时候XML格式的数据是比较浪费流量的。所以在移动开发的时候,在数据的传输和加载过程中为了用户考虑,更多的使用的是JSON格式的数据,比较节省流量。具体的两者之间的区别可以通过具体的了解来进行详细了解。

那么配置了这两个文件之后,SpringBoot到底应该加载那个配置文件呢!启动整个SpringBoot中

看到启动日志中打印出来的端口号是8080端口号,在默认加载配置的时候使用的是application.properties配置文件

YAML语法
YAML基本语法

k:v :表示键值对(这里注意一点就是在键和值之间有一个空格),以空格的缩进来控制层级关系。(空格的多少没有关系,只要空格对齐就表示属于同一层的元素,只要是左对齐的一列数据,都是同一层级的)

server:port: 8080servlet-path: /hello
值的写法

字面量:普通的值(数字,字符串,布尔)

  • k: v:通过直接来写的形式
  • 字符串默认不用加上单引号或者双引号。
  • “” 双引号:不会转义字符串,特殊字符会作为本身想要表达的意思。
name:"zhangsan \n lisi"

输出的内容

zhangsan
lisi

  • ‘’ 单引号:会转义特殊字符,特殊字符会作为字符串来输出
name:"zhangsan \n lisi"

输出

zhangsan \n lisi

对象:Map 属性和值(也是一个键值对)

  • k:v
    对象还是k:v的方式
friends:listName:zhangsanage:20

这个对象的写法是这样写的,还有一种写法是行内写法,

frinends:{lastName:zhangsan,age:18}

数组:Array 集合:List Set
用- 值表示数组中的一个元素
一般写法

animals:-cat-dog-pig

行内写法

animals:[cat,dog,pig]

YAML语法操作
一、创建一个实体类对象
public class Person {private String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> lists;private Dog dog;public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Boolean getBoss() {return boss;}public void setBoss(Boolean boss) {this.boss = boss;}public Date getBirth() {return birth;}public void setBirth(Date birth) {this.birth = birth;}public Map<String, Object> getMaps() {return maps;}public void setMaps(Map<String, Object> maps) {this.maps = maps;}public List<Object> getLists() {return lists;}public void setLists(List<Object> lists) {this.lists = lists;}public Dog getDog() {return dog;}public void setDog(Dog dog) {this.dog = dog;}@Overridepublic String toString() {return "Person{" +"lastName='" + lastName + '\'' +", age=" + age +", boss=" + boss +", birth=" + birth +", maps=" + maps +", lists=" + lists +", dog=" + dog +'}';}
}

Dog类

public class Dog {private String name;private Integer age;public Dog(String name, Integer age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

配置文件内容

person:lastName: zhangsanage: 18boss: falsebirth: 2019/03/09maps: {k1:v1,k2:v2}lists:- list- zhaoliudog:name: xiaomingage: 3

完成这些操作之后,怎么能将配置文件中的值映射到JavaBean组件中。这个时候就要使用到一个注解,也就是@ConfigurationProperties注解:这个注解告诉SpringBoot表示这个文件中的所有的属性都配置文件中的相关的属性进行绑定。

在这个注解上有一个属性

@ConfigurationProperties(prefix = "person")
prefixe 表示配置文件中的哪个下面的所有属性进行映射。
只有这个组件是容器中的组件,才能提供这个功能
这个就可以使用@Component注解来实现,这个注解表示被加上这个注解的类成为容器中的一个组件

在IDEA中会有一个配置报错提示,其实这个也不是一个报错提示,就是提示用户在类路径下找不到对应的文件。点击右面的链接之后会跳转到一个页面,这个页面是SpringBoot提示这个配置文件的处理器,导入这个配置文件处理器之后就会成功。


配置到这里,运行项目之后会发现有一个报错

20:19:55.576 [main] DEBUG org.springframework.boot.logging.ClasspathLoggingApplicationListener - Application failed to start with classpath: [file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/charsets.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/deploy.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/ext/access-bridge-64.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/ext/cldrdata.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/ext/dnsns.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/ext/jaccess.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/ext/jfxrt.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/ext/localedata.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/ext/nashorn.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/ext/sunec.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/ext/sunjce_provider.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/ext/sunmscapi.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/ext/sunpkcs11.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/ext/zipfs.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/javaws.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/jce.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/jfr.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/jfxswt.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/jsse.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/management-agent.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/plugin.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/resources.jar, file:/C:/Program%20Files/Java/jdk1.8.0_144/jre/lib/rt.jar, file:/C:/Users/nihui/Desktop/SVN/spring-boot-01-helloworld/target/classes/, file:/G:/JavaEE/maven/repo/org/springframework/boot/spring-boot-starter-web/1.5.9.RELEASE/spring-boot-starter-web-1.5.9.RELEASE.jar, file:/G:/JavaEE/maven/repo/org/springframework/boot/spring-boot-starter/1.5.9.RELEASE/spring-boot-starter-1.5.9.RELEASE.jar, file:/G:/JavaEE/maven/repo/org/springframework/boot/spring-boot/1.5.9.RELEASE/spring-boot-1.5.9.RELEASE.jar, file:/G:/JavaEE/maven/repo/org/springframework/boot/spring-boot-autoconfigure/1.5.9.RELEASE/spring-boot-autoconfigure-1.5.9.RELEASE.jar, file:/G:/JavaEE/maven/repo/org/springframework/boot/spring-boot-starter-logging/1.5.9.RELEASE/spring-boot-starter-logging-1.5.9.RELEASE.jar, file:/G:/JavaEE/maven/repo/ch/qos/logback/logback-classic/1.1.11/logback-classic-1.1.11.jar, file:/G:/JavaEE/maven/repo/ch/qos/logback/logback-core/1.1.11/logback-core-1.1.11.jar, file:/G:/JavaEE/maven/repo/org/slf4j/jcl-over-slf4j/1.7.25/jcl-over-slf4j-1.7.25.jar, file:/G:/JavaEE/maven/repo/org/slf4j/jul-to-slf4j/1.7.25/jul-to-slf4j-1.7.25.jar, file:/G:/JavaEE/maven/repo/org/slf4j/log4j-over-slf4j/1.7.25/log4j-over-slf4j-1.7.25.jar, file:/G:/JavaEE/maven/repo/org/yaml/snakeyaml/1.17/snakeyaml-1.17.jar, file:/G:/JavaEE/maven/repo/org/springframework/boot/spring-boot-starter-tomcat/1.5.9.RELEASE/spring-boot-starter-tomcat-1.5.9.RELEASE.jar, file:/G:/JavaEE/maven/repo/org/apache/tomcat/embed/tomcat-embed-core/8.5.23/tomcat-embed-core-8.5.23.jar, file:/G:/JavaEE/maven/repo/org/apache/tomcat/tomcat-annotations-api/8.5.23/tomcat-annotations-api-8.5.23.jar, file:/G:/JavaEE/maven/repo/org/apache/tomcat/embed/tomcat-embed-el/8.5.23/tomcat-embed-el-8.5.23.jar, file:/G:/JavaEE/maven/repo/org/apache/tomcat/embed/tomcat-embed-websocket/8.5.23/tomcat-embed-websocket-8.5.23.jar, file:/G:/JavaEE/maven/repo/org/hibernate/hibernate-validator/5.3.6.Final/hibernate-validator-5.3.6.Final.jar, file:/G:/JavaEE/maven/repo/javax/validation/validation-api/1.1.0.Final/validation-api-1.1.0.Final.jar, file:/G:/JavaEE/maven/repo/org/jboss/logging/jboss-logging/3.3.1.Final/jboss-logging-3.3.1.Final.jar, file:/G:/JavaEE/maven/repo/com/fasterxml/classmate/1.3.4/classmate-1.3.4.jar, file:/G:/JavaEE/maven/repo/com/fasterxml/jackson/core/jackson-databind/2.8.10/jackson-databind-2.8.10.jar, file:/G:/JavaEE/maven/repo/com/fasterxml/jackson/core/jackson-annotations/2.8.0/jackson-annotations-2.8.0.jar, file:/G:/JavaEE/maven/repo/com/fasterxml/jackson/core/jackson-core/2.8.10/jackson-core-2.8.10.jar, file:/G:/JavaEE/maven/repo/org/springframework/spring-web/4.3.13.RELEASE/spring-web-4.3.13.RELEASE.jar, file:/G:/JavaEE/maven/repo/org/springframework/spring-aop/4.3.13.RELEASE/spring-aop-4.3.13.RELEASE.jar, file:/G:/JavaEE/maven/repo/org/springframework/spring-beans/4.3.13.RELEASE/spring-beans-4.3.13.RELEASE.jar, file:/G:/JavaEE/maven/repo/org/springframework/spring-context/4.3.13.RELEASE/spring-context-4.3.13.RELEASE.jar, file:/G:/JavaEE/maven/repo/org/springframework/spring-webmvc/4.3.13.RELEASE/spring-webmvc-4.3.13.RELEASE.jar, file:/G:/JavaEE/maven/repo/org/springframework/spring-expression/4.3.13.RELEASE/spring-expression-4.3.13.RELEASE.jar, file:/G:/JavaEE/maven/repo/org/springframework/boot/spring-boot-configuration-processor/1.5.9.RELEASE/spring-boot-configuration-processor-1.5.9.RELEASE.jar, file:/G:/JavaEE/maven/repo/com/vaadin/external/google/android-json/0.0.20131108.vaadin1/android-json-0.0.20131108.vaadin1.jar, file:/G:/JavaEE/maven/repo/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar, file:/G:/JavaEE/maven/repo/org/springframework/spring-core/4.3.13.RELEASE/spring-core-4.3.13.RELEASE.jar, file:/E:/IntelliJ%20IDEA%202018.1/lib/idea_rt.jar]
20:19:55.801 [main] ERROR org.springframework.boot.SpringApplication - Application startup failed
java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.yml'at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.loadIntoGroup(ConfigFileApplicationListener.java:476)at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:465)at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:386)at org.springframework.boot.context.config.ConfigFileApplicationListener.addPropertySources(ConfigFileApplicationListener.java:225)at org.springframework.boot.context.config.ConfigFileApplicationListener.postProcessEnvironment(ConfigFileApplicationListener.java:195)at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEnvironmentPreparedEvent(ConfigFileApplicationListener.java:182)at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEvent(ConfigFileApplicationListener.java:168)at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:122)at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:74)at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:325)at org.springframework.boot.SpringApplication.run(SpringApplication.java:296)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)at com.example.springboot.SpringBoot01HelloworldApplication.main(SpringBoot01HelloworldApplication.java:10)
Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning a plain scalarin 'reader', line 9, column 13:maps: {k1:v1,k2:v2}^
found unexpected ':'in 'reader', line 9, column 15:maps: {k1:v1,k2:v2}^
Please check http://pyyaml.org/wiki/YAMLColonInFlowContext for details.at org.yaml.snakeyaml.scanner.ScannerImpl.scanPlain(ScannerImpl.java:2013)at org.yaml.snakeyaml.scanner.ScannerImpl.fetchPlain(ScannerImpl.java:1046)at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:401)at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:226)at org.yaml.snakeyaml.parser.ParserImpl$ParseFlowMappingKey.produce(ParserImpl.java:723)at org.yaml.snakeyaml.parser.ParserImpl$ParseFlowMappingFirstKey.produce(ParserImpl.java:711)at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:157)at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:147)at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:224)at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:155)at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:246)at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:237)at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:225)at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:155)at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:246)at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:237)at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:225)at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:155)at org.yaml.snakeyaml.composer.Composer.composeDocument(Composer.java:122)at org.yaml.snakeyaml.composer.Composer.getNode(Composer.java:84)at org.yaml.snakeyaml.constructor.BaseConstructor.getData(BaseConstructor.java:104)at org.yaml.snakeyaml.Yaml$1.next(Yaml.java:471)at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:160)at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:138)at org.springframework.boot.env.YamlPropertySourceLoader$Processor.process(YamlPropertySourceLoader.java:101)at org.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:58)at org.springframework.boot.env.PropertySourcesLoader.load(PropertySourcesLoader.java:127)at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.doLoadIntoGroup(ConfigFileApplicationListener.java:490)at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.loadIntoGroup(ConfigFileApplicationListener.java:473)... 17 common frames omittedProcess finished with exit code 1

这个错误呢一个比较明显的地方就是提示YML配置文件的格式有问题,查看源码会发现。Map指定的泛型指定了键值对是一个字符串,值表示一个对象。对配置文件做了如下的修改

maps: {"k1":v1,"k2":v2}

修改完成之后又会出现这个问题

"C:\Program Files\Java\jdk1.8.0_144\bin\java" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=19640 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=localhost -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:E:\IntelliJ IDEA 2018.1\lib\idea_rt.jar=19644:E:\IntelliJ IDEA 2018.1\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_144\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_144\jre\lib\rt.jar;C:\Users\nihui\Desktop\SVN\spring-boot-01-helloworld\target\classes;G:\JavaEE\maven\repo\org\springframework\boot\spring-boot-starter-web\1.5.9.RELEASE\spring-boot-starter-web-1.5.9.RELEASE.jar;G:\JavaEE\maven\repo\org\springframework\boot\spring-boot-starter\1.5.9.RELEASE\spring-boot-starter-1.5.9.RELEASE.jar;G:\JavaEE\maven\repo\org\springframework\boot\spring-boot\1.5.9.RELEASE\spring-boot-1.5.9.RELEASE.jar;G:\JavaEE\maven\repo\org\springframework\boot\spring-boot-autoconfigure\1.5.9.RELEASE\spring-boot-autoconfigure-1.5.9.RELEASE.jar;G:\JavaEE\maven\repo\org\springframework\boot\spring-boot-starter-logging\1.5.9.RELEASE\spring-boot-starter-logging-1.5.9.RELEASE.jar;G:\JavaEE\maven\repo\ch\qos\logback\logback-classic\1.1.11\logback-classic-1.1.11.jar;G:\JavaEE\maven\repo\ch\qos\logback\logback-core\1.1.11\logback-core-1.1.11.jar;G:\JavaEE\maven\repo\org\slf4j\jcl-over-slf4j\1.7.25\jcl-over-slf4j-1.7.25.jar;G:\JavaEE\maven\repo\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;G:\JavaEE\maven\repo\org\slf4j\log4j-over-slf4j\1.7.25\log4j-over-slf4j-1.7.25.jar;G:\JavaEE\maven\repo\org\yaml\snakeyaml\1.17\snakeyaml-1.17.jar;G:\JavaEE\maven\repo\org\springframework\boot\spring-boot-starter-tomcat\1.5.9.RELEASE\spring-boot-starter-tomcat-1.5.9.RELEASE.jar;G:\JavaEE\maven\repo\org\apache\tomcat\embed\tomcat-embed-core\8.5.23\tomcat-embed-core-8.5.23.jar;G:\JavaEE\maven\repo\org\apache\tomcat\tomcat-annotations-api\8.5.23\tomcat-annotations-api-8.5.23.jar;G:\JavaEE\maven\repo\org\apache\tomcat\embed\tomcat-embed-el\8.5.23\tomcat-embed-el-8.5.23.jar;G:\JavaEE\maven\repo\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.23\tomcat-embed-websocket-8.5.23.jar;G:\JavaEE\maven\repo\org\hibernate\hibernate-validator\5.3.6.Final\hibernate-validator-5.3.6.Final.jar;G:\JavaEE\maven\repo\javax\validation\validation-api\1.1.0.Final\validation-api-1.1.0.Final.jar;G:\JavaEE\maven\repo\org\jboss\logging\jboss-logging\3.3.1.Final\jboss-logging-3.3.1.Final.jar;G:\JavaEE\maven\repo\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;G:\JavaEE\maven\repo\com\fasterxml\jackson\core\jackson-databind\2.8.10\jackson-databind-2.8.10.jar;G:\JavaEE\maven\repo\com\fasterxml\jackson\core\jackson-annotations\2.8.0\jackson-annotations-2.8.0.jar;G:\JavaEE\maven\repo\com\fasterxml\jackson\core\jackson-core\2.8.10\jackson-core-2.8.10.jar;G:\JavaEE\maven\repo\org\springframework\spring-web\4.3.13.RELEASE\spring-web-4.3.13.RELEASE.jar;G:\JavaEE\maven\repo\org\springframework\spring-aop\4.3.13.RELEASE\spring-aop-4.3.13.RELEASE.jar;G:\JavaEE\maven\repo\org\springframework\spring-beans\4.3.13.RELEASE\spring-beans-4.3.13.RELEASE.jar;G:\JavaEE\maven\repo\org\springframework\spring-context\4.3.13.RELEASE\spring-context-4.3.13.RELEASE.jar;G:\JavaEE\maven\repo\org\springframework\spring-webmvc\4.3.13.RELEASE\spring-webmvc-4.3.13.RELEASE.jar;G:\JavaEE\maven\repo\org\springframework\spring-expression\4.3.13.RELEASE\spring-expression-4.3.13.RELEASE.jar;G:\JavaEE\maven\repo\org\springframework\boot\spring-boot-configuration-processor\1.5.9.RELEASE\spring-boot-configuration-processor-1.5.9.RELEASE.jar;G:\JavaEE\maven\repo\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;G:\JavaEE\maven\repo\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;G:\JavaEE\maven\repo\org\springframework\spring-core\4.3.13.RELEASE\spring-core-4.3.13.RELEASE.jar" com.example.springboot.SpringBoot01HelloworldApplication.   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::        (v1.5.9.RELEASE)2019-03-09 20:24:35.256  INFO 22004 --- [           main] c.e.s.SpringBoot01HelloworldApplication  : Starting SpringBoot01HelloworldApplication on DESKTOP-5H2RC57 with PID 22004 (C:\Users\nihui\Desktop\SVN\spring-boot-01-helloworld\target\classes started by nihui in C:\Users\nihui\Desktop\SVN\spring-boot-01-helloworld)
2019-03-09 20:24:35.258  INFO 22004 --- [           main] c.e.s.SpringBoot01HelloworldApplication  : No active profile set, falling back to default profiles: default
2019-03-09 20:24:36.185  INFO 22004 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4b5a5ed1: startup date [Sat Mar 09 20:24:36 CST 2019]; root of context hierarchy
2019-03-09 20:24:42.812  INFO 22004 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8081 (http)
2019-03-09 20:24:43.106  INFO 22004 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-03-09 20:24:43.107  INFO 22004 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.23
2019-03-09 20:24:43.832  INFO 22004 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2019-03-09 20:24:43.832  INFO 22004 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 7682 ms
2019-03-09 20:24:44.222  INFO 22004 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: 'dispatcherServlet' to [/]
2019-03-09 20:24:44.228  INFO 22004 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'characterEncodingFilter' to: [/*]
2019-03-09 20:24:44.228  INFO 22004 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2019-03-09 20:24:44.228  INFO 22004 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2019-03-09 20:24:44.228  INFO 22004 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: 'requestContextFilter' to: [/*]
2019-03-09 20:24:45.180  WARN 22004 --- [           main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'person': Could not bind properties to Person (prefix=person, ignoreInvalidFields=false, ignoreUnknownFields=true, ignoreNestedProperties=false); nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property 'dog' of bean class [com.example.springboot.bean.Person]: Could not instantiate property type [com.example.springboot.bean.Dog] to auto-grow nested property path; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.example.springboot.bean.Dog]: Is it an abstract class?; nested exception is java.lang.InstantiationException: com.example.springboot.bean.Dog
2019-03-09 20:24:45.189  INFO 22004 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2019-03-09 20:24:45.344  INFO 22004 --- [           main] utoConfigurationReportLoggingInitializer : Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2019-03-09 20:24:45.439 ERROR 22004 --- [           main] o.s.boot.SpringApplication               : Application startup failedorg.springframework.beans.factory.BeanCreationException: Error creating bean with name 'person': Could not bind properties to Person (prefix=person, ignoreInvalidFields=false, ignoreUnknownFields=true, ignoreNestedProperties=false); nested exception is org.springframework.beans.NullValueInNestedPathException: Invalid property 'dog' of bean class [com.example.springboot.bean.Person]: Could not instantiate property type [com.example.springboot.bean.Dog] to auto-grow nested property path; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.example.springboot.bean.Dog]: Is it an abstract class?; nested exception is java.lang.InstantiationException: com.example.springboot.bean.Dogat org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:335) ~[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:292) ~[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:409) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1620) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]at com.example.springboot.SpringBoot01HelloworldApplication.main(SpringBoot01HelloworldApplication.java:10) [classes/:na]
Caused by: org.springframework.beans.NullValueInNestedPathException: Invalid property 'dog' of bean class [com.example.springboot.bean.Person]: Could not instantiate property type [com.example.springboot.bean.Dog] to auto-grow nested property path; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.example.springboot.bean.Dog]: Is it an abstract class?; nested exception is java.lang.InstantiationException: com.example.springboot.bean.Dogat org.springframework.beans.AbstractNestablePropertyAccessor.newValue(AbstractNestablePropertyAccessor.java:931) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.beans.AbstractNestablePropertyAccessor.createDefaultPropertyValue(AbstractNestablePropertyAccessor.java:899) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.beans.AbstractNestablePropertyAccessor.setDefaultValue(AbstractNestablePropertyAccessor.java:887) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.beans.AbstractNestablePropertyAccessor.getNestedPropertyAccessor(AbstractNestablePropertyAccessor.java:851) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.beans.AbstractNestablePropertyAccessor.getPropertyAccessorForPropertyPath(AbstractNestablePropertyAccessor.java:825) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue(AbstractNestablePropertyAccessor.java:268) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.boot.bind.RelaxedDataBinder$RelaxedBeanWrapper.setPropertyValue(RelaxedDataBinder.java:699) ~[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:95) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:859) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.validation.DataBinder.doBind(DataBinder.java:755) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.boot.bind.RelaxedDataBinder.doBind(RelaxedDataBinder.java:128) ~[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]at org.springframework.validation.DataBinder.bind(DataBinder.java:740) ~[spring-context-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.boot.bind.PropertiesConfigurationFactory.doBindPropertiesToTarget(PropertiesConfigurationFactory.java:272) ~[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]at org.springframework.boot.bind.PropertiesConfigurationFactory.bindPropertiesToTarget(PropertiesConfigurationFactory.java:240) ~[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:330) ~[spring-boot-1.5.9.RELEASE.jar:1.5.9.RELEASE]... 19 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.example.springboot.bean.Dog]: Is it an abstract class?; nested exception is java.lang.InstantiationException: com.example.springboot.bean.Dogat org.springframework.beans.BeanUtils.instantiate(BeanUtils.java:80) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]at org.springframework.beans.AbstractNestablePropertyAccessor.newValue(AbstractNestablePropertyAccessor.java:926) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]... 33 common frames omitted
Caused by: java.lang.InstantiationException: com.example.springboot.bean.Dogat java.lang.Class.newInstance(Class.java:427) ~[na:1.8.0_144]at org.springframework.beans.BeanUtils.instantiate(BeanUtils.java:77) ~[spring-beans-4.3.13.RELEASE.jar:4.3.13.RELEASE]... 34 common frames omitted
Caused by: java.lang.NoSuchMethodException: com.example.springboot.bean.Dog.<init>()at java.lang.Class.getConstructor0(Class.java:3082) ~[na:1.8.0_144]at java.lang.Class.newInstance(Class.java:412) ~[na:1.8.0_144]... 35 common frames omittedProcess finished with exit code 1

报错提示一个dog没有被加载这个是时候将@Component注解加到Dog类上


然后启动成功。项目可以正常启动之后,就可以通过单元测试进行下一步的操作
单元测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBoot01HelloworldApplicationTests {@AutowiredPerson person;@Testpublic void contextLoads() {System.out.println(person.toString());}}

总结

这个就是从配置文件中获取值,也叫作配置文件的值注入。首先通过编写配置文件,编写相应的JavaBean。然后通过@Component注解和@@ConfigurationProperties(prefix = “person”)注解来进行配置组件注入

SpringBoot YML配置文件相关推荐

  1. SpringBoot yml配置文件jar包外修改(动态生效)

    此处以数据源配置为例子,实际任何属性都可. 此方式,可解决修改配置文件,还要重新打包的问题 并且配置文件中的数据修改后,不需要重启服务器,也可获取最新修改后的配置信息. 步骤一: 启动类添加以下代码: ...

  2. 使用SpringBoot yml配置文件

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 1.上一次我们已经使用SpringBoot实现了一个简单的HelloWord程序,辣么接下来我们简单 ...

  3. db2 springboot 整合_springboot的yml配置文件通过db2的方式整合mysql的教程

    springboot整合MySQL很简单,多数据源就master,slave就行了,但是在整合DB2就需要另起一行,以下是同一个yml文件 先配置MySQL,代码如下 spring: datasour ...

  4. Dockerfile springboot项目拿走即用,将yml配置文件从外部挂入容器

    Dockerfile 将springboot项目jar包打成镜像,并将yml配置文件外挂. # 以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜 ...

  5. springboot取yml中的值_SpringBoot 中从yml配置文件中读取常用的参数值

    SpringBoot现在基本上都是使用application-XXX.yml(生产环境为pro,开发测试环境为dev)来配置项目中的一些配置条件,在springboot中还可以通过从yml文件中将ym ...

  6. db2 springboot 整合_springboot的yml配置文件通过db2的方式整合mysql代码示例

    本篇文章小编给大家分享一下springboot的yml配置文件通过db2的方式整合mysql代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. s ...

  7. 【SpringBoot零基础案例04】【IEDA 2021.1】SpringBoot核心配置文件appilcation.yml或application.yaml

    新建模块,并创建IndexController类 package com.zx.springboot.web;import org.springframework.stereotype.Control ...

  8. springboot引入外部yml配置文件

    本文记录下springboot引入外部yml配置文件 文章目录 概述 本文小结 概述 如果不想把所有的配置都写在application.yml文件中,把它拆分成多个yml文件,并在applicatio ...

  9. SpringBoot - yml与properties配置文件及bean赋值

    SpringBoot - yml与properties配置文件及bean赋值 ① SpringBoot的配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的 : applicati ...

最新文章

  1. 02-15 GUCCI 我喜欢的
  2. Java后端:10w行级别数据的Excel导入优化记录
  3. 输入年份和月份输出该月有多少天python_Python实现用户输入年月日,程序打印出这是这一年的第多少天...
  4. SQL Server 2008R2安装详细教程(附安装包)
  5. var obj = eval(result); 解析json
  6. visual studio 判断dropdownlist选的是什么_测试:选一顶你觉得最漂亮的皇冠。测你长了张什么脸?我是发财脸...
  7. Informix常用操作方法命令
  8. centos自定义服务并加入开机启动
  9. opencv图片序列转换成视频
  10. 通达信资金净流入公式_通达信主力净流入指标公式
  11. 使用BigDecimal解决double精度的问题
  12. 数据分析-SQL练习
  13. spring事务传播级别
  14. 浅析Simpson算法
  15. (ROC-RK3568-PC) 裸机24_驱动VOP2显示自绘画面
  16. 关于电机编码器的知识汇总,都在这里了!
  17. matlab坐标位置灰色,MATLAB画图工具中坐标外面的底色是灰的,该如修改?
  18. 自学网络安全,一般人我劝你放弃吧!
  19. 听说这本RPA的书卖火了,你现在读还来得及
  20. 【回收站】恢复oracle中误删除drop掉的表

热门文章

  1. java实现二叉查找树_二叉查找树BST----java实现(示例代码)
  2. 类对象作为函数参数进行值传递
  3. HiTSDB 时序数据库技术架构和产品解析
  4. DSS流媒体服务器搭建
  5. 如何做一名出色的屌丝码农?
  6. 一位 女生在第一次应聘软件开发工作时成功被淘汰的例子
  7. 数据库冷备份和热备份
  8. 双系统的电脑中如何完美系统其中一个操作系统
  9. atlas 又多了几个新控件
  10. 百度贴吧高考作文强贴