SpringBoot YML配置文件

秒速五厘米 2022-03-10 05:54 608阅读 0赞

引言

在之前的博客中说到了怎么样去创建一个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语法
  1. server:
  2. port: 8081
XML 语法
  1. <server>
  2. <port>8081</port>
  3. </server>

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

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

那么配置了这两个文件之后,SpringBoot到底应该加载那个配置文件呢!启动整个SpringBoot中
在这里插入图片描述
看到启动日志中打印出来的端口号是8080端口号,在默认加载配置的时候使用的是application.properties配置文件

YAML语法
YAML基本语法

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

  1. server:
  2. port: 8080
  3. servlet-path: /hello
值的写法

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

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

    name:”zhangsan \n lisi”

输出的内容

zhangsan
lisi

  • ‘’ 单引号:会转义特殊字符,特殊字符会作为字符串来输出

    name:”zhangsan \n lisi”

输出

zhangsan \n lisi

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

  • k:v
    对象还是k:v的方式

    friends:

    1. listName:zhangsan
    2. age:20

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

frinends:{lastName:zhangsan,age:18}

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

  1. animals:
  2. -cat
  3. -dog
  4. -pig

行内写法

animals:[cat,dog,pig]

YAML语法操作
一、创建一个实体类对象
  1. public class Person {
  2. private String lastName;
  3. private Integer age;
  4. private Boolean boss;
  5. private Date birth;
  6. private Map<String,Object> maps;
  7. private List<Object> lists;
  8. private Dog dog;
  9. public String getLastName() {
  10. return lastName;
  11. }
  12. public void setLastName(String lastName) {
  13. this.lastName = lastName;
  14. }
  15. public Integer getAge() {
  16. return age;
  17. }
  18. public void setAge(Integer age) {
  19. this.age = age;
  20. }
  21. public Boolean getBoss() {
  22. return boss;
  23. }
  24. public void setBoss(Boolean boss) {
  25. this.boss = boss;
  26. }
  27. public Date getBirth() {
  28. return birth;
  29. }
  30. public void setBirth(Date birth) {
  31. this.birth = birth;
  32. }
  33. public Map<String, Object> getMaps() {
  34. return maps;
  35. }
  36. public void setMaps(Map<String, Object> maps) {
  37. this.maps = maps;
  38. }
  39. public List<Object> getLists() {
  40. return lists;
  41. }
  42. public void setLists(List<Object> lists) {
  43. this.lists = lists;
  44. }
  45. public Dog getDog() {
  46. return dog;
  47. }
  48. public void setDog(Dog dog) {
  49. this.dog = dog;
  50. }
  51. @Override
  52. public String toString() {
  53. return "Person{" +
  54. "lastName='" + lastName + '\'' +
  55. ", age=" + age +
  56. ", boss=" + boss +
  57. ", birth=" + birth +
  58. ", maps=" + maps +
  59. ", lists=" + lists +
  60. ", dog=" + dog +
  61. '}';
  62. }
  63. }

Dog类

  1. public class Dog {
  2. private String name;
  3. private Integer age;
  4. public Dog(String name, Integer age) {
  5. this.name = name;
  6. this.age = age;
  7. }
  8. public String getName() {
  9. return name;
  10. }
  11. public void setName(String name) {
  12. this.name = name;
  13. }
  14. public Integer getAge() {
  15. return age;
  16. }
  17. public void setAge(Integer age) {
  18. this.age = age;
  19. }
  20. }

配置文件内容

  1. person:
  2. lastName: zhangsan
  3. age: 18
  4. boss: false
  5. birth: 2019/03/09
  6. maps: { k1:v1,k2:v2}
  7. lists:
  8. - list
  9. - zhaoliu
  10. dog:
  11. name: xiaoming
  12. age: 3

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

在这个注解上有一个属性

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

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

  1. 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]
  2. 20:19:55.801 [main] ERROR org.springframework.boot.SpringApplication - Application startup failed
  3. java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.yml'
  4. at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.loadIntoGroup(ConfigFileApplicationListener.java:476)
  5. at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:465)
  6. at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.load(ConfigFileApplicationListener.java:386)
  7. at org.springframework.boot.context.config.ConfigFileApplicationListener.addPropertySources(ConfigFileApplicationListener.java:225)
  8. at org.springframework.boot.context.config.ConfigFileApplicationListener.postProcessEnvironment(ConfigFileApplicationListener.java:195)
  9. at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEnvironmentPreparedEvent(ConfigFileApplicationListener.java:182)
  10. at org.springframework.boot.context.config.ConfigFileApplicationListener.onApplicationEvent(ConfigFileApplicationListener.java:168)
  11. at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
  12. at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
  13. at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
  14. at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:122)
  15. at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:74)
  16. at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:54)
  17. at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:325)
  18. at org.springframework.boot.SpringApplication.run(SpringApplication.java:296)
  19. at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118)
  20. at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107)
  21. at com.example.springboot.SpringBoot01HelloworldApplication.main(SpringBoot01HelloworldApplication.java:10)
  22. Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning a plain scalar
  23. in 'reader', line 9, column 13:
  24. maps: { k1:v1,k2:v2}
  25. ^
  26. found unexpected ':'
  27. in 'reader', line 9, column 15:
  28. maps: { k1:v1,k2:v2}
  29. ^
  30. Please check http://pyyaml.org/wiki/YAMLColonInFlowContext for details.
  31. at org.yaml.snakeyaml.scanner.ScannerImpl.scanPlain(ScannerImpl.java:2013)
  32. at org.yaml.snakeyaml.scanner.ScannerImpl.fetchPlain(ScannerImpl.java:1046)
  33. at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:401)
  34. at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:226)
  35. at org.yaml.snakeyaml.parser.ParserImpl$ParseFlowMappingKey.produce(ParserImpl.java:723)
  36. at org.yaml.snakeyaml.parser.ParserImpl$ParseFlowMappingFirstKey.produce(ParserImpl.java:711)
  37. at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:157)
  38. at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:147)
  39. at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:224)
  40. at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:155)
  41. at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:246)
  42. at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:237)
  43. at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:225)
  44. at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:155)
  45. at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:246)
  46. at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:237)
  47. at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:225)
  48. at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:155)
  49. at org.yaml.snakeyaml.composer.Composer.composeDocument(Composer.java:122)
  50. at org.yaml.snakeyaml.composer.Composer.getNode(Composer.java:84)
  51. at org.yaml.snakeyaml.constructor.BaseConstructor.getData(BaseConstructor.java:104)
  52. at org.yaml.snakeyaml.Yaml$1.next(Yaml.java:471)
  53. at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:160)
  54. at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:138)
  55. at org.springframework.boot.env.YamlPropertySourceLoader$Processor.process(YamlPropertySourceLoader.java:101)
  56. at org.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:58)
  57. at org.springframework.boot.env.PropertySourcesLoader.load(PropertySourcesLoader.java:127)
  58. at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.doLoadIntoGroup(ConfigFileApplicationListener.java:490)
  59. at org.springframework.boot.context.config.ConfigFileApplicationListener$Loader.loadIntoGroup(ConfigFileApplicationListener.java:473)
  60. ... 17 common frames omitted
  61. Process finished with exit code 1

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

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

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

  1. "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
  2. . ____ _ __ _ _
  3. /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
  4. \\/ ___)| |_)| | | | | || (_| | ) ) ) )
  5. ' |____| .__|_| |_|_| |_\__, | / / / /
  6. =========|_|==============|___/=/_/_/_/
  7. :: Spring Boot :: (v1.5.9.RELEASE)
  8. 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)
  9. 2019-03-09 20:24:35.258 INFO 22004 --- [ main] c.e.s.SpringBoot01HelloworldApplication : No active profile set, falling back to default profiles: default
  10. 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
  11. 2019-03-09 20:24:42.812 INFO 22004 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8081 (http)
  12. 2019-03-09 20:24:43.106 INFO 22004 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
  13. 2019-03-09 20:24:43.107 INFO 22004 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.23
  14. 2019-03-09 20:24:43.832 INFO 22004 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
  15. 2019-03-09 20:24:43.832 INFO 22004 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 7682 ms
  16. 2019-03-09 20:24:44.222 INFO 22004 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
  17. 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 failed 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 at 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.Dog at 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.Dog at 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.Dog at 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 omitted Process finished with exit code 1

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

在这里插入图片描述
然后启动成功。项目可以正常启动之后,就可以通过单元测试进行下一步的操作
单元测试类

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest
  3. public class SpringBoot01HelloworldApplicationTests {
  4. @Autowired
  5. Person person;
  6. @Test
  7. public void contextLoads() {
  8. System.out.println(person.toString());
  9. }
  10. }

在这里插入图片描述

总结

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

发表评论

表情:
评论列表 (有 0 条评论,608人围观)

还没有评论,来说两句吧...

相关阅读