• 【转载】Spring boot学习记录(一)-入门篇


    前言:本系列文章非本人原创,转自:http://tengj.top/2017/04/24/springboot0/

    正文

    首先声明,Spring Boot不是一门新技术。从本质上来说,Spring Boot就是Spring,它做了那些没有它你也需要去做的Spring Bean配置。它使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。使用Spring Boot很容易创建一个独立运行(运行jar,内嵌Servlet容器)、准生产级别的基于Spring框架的项目,使用Spring Boot,你可以不用或者只需要很少的Spring配置。

    Spring Boot精要

    Spring将很多魔法带入了Spring应用程序的开发之中,其中最重要的是以下四个核心。

    • 自动配置:针对很多Spring应用程序常见的应用功能,Spring Boot能自动提供相关配置
    • 起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。
    • 命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,无需传统项目构建。
    • Actuator:让你能够深入运行中的Spring Boot应用程序,一探究竟。

    系统要求

    Spring Boot 1.5.1.RELEASE需要Java 7和Spring Framework 4.3.6.RELEASE或更高版本,你也可以使用Spring Boot with Java 6和一些额外的配置(强烈不建议),使用Maven(3.2+)或Gradle 2(2.9或更高版本)和3来构建。

    虽然你可以使用Java 6或7的Spring Boot,但我们通常推荐Java 8。

    本博客系列统一使用Java 1.8,Spring Boot 1.5.1.RELEASE以及Maven3.3.9版本。开发工具使用IDEA。

    (此处可以看原博主另外一篇介绍IDEA入门文章,内有官方中文教程:Java人员正确使用 IntelliJ IDEA的方式

    光速入门-开发一个web服务

    先看看传统Spring MVC开发一个简单的Hello World Web应用程序,需要做哪些事情:

    • 一个项目结构,其中有一个包含必要依赖的Maven或者Gradle构建文件,最起码要有Spring MVC和Servlet API这些依赖。
    • 一个web.xml文件(或者一个WebApplicationInitializer实现),其中声明了Spring的DispatcherServlet。
    • 一个启动了Spring MVC的Spring配置
    • 一控制器类,以“hello World”响应HTTP请求。
    • 一个用于部署应用程序的Web应用服务器,比如Tomcat。

    这份清单里面只有一个东西是和Hello World功能相关的,即控制器,剩下的都是Spring开发的Web应用程序必需的通用模板。

    接下来看看Spring Boot如何搞定?很简单,仅仅只需要非常少的几个配置就可以迅速方便的搭建起来一套web项目。

    初始化Spring Boot项目

    构建一个Sping Boot的Maven项目,强烈推荐Spring Initializr,它从本质上来说就是一个Web应用程序,它能为你生成Spring Boot项目结构。

    Spring Initializr有几种用法:

    I.通过Web界面使用

      1.访问:http://start.spring.io/

      2.选择构建工具Maven Project、Spring Boot版本1.5.1(原博主的版本,现在版本为2.1.8)以及一些工程基本信息,可参考下图所示

       

      3.点击Generate Project下载项目压缩包

      4.导入到你的工程

        4.1如果是IDEA,则需要:

        a.菜单中选择File–>New–>Project from Existing Sources...
        b.选择解压后的项目文件夹,点击OK
        c.点击Import project from external model并选择Maven,点击Next到底为止。
        d.若你的环境有多个版本的JDK,注意到选择Java SDK的时候请选择Java 7以上的版本

        4.2如果是Myeclipse,则需要:

        a.右键选择Import–>Existing Maven Projects–>选择项目位置点击–>finish

        b.等待项目自动配置加载

     II.通过IntelliJ IDEA使用(原博主推荐,此处不详细编写。)

    如你所见,项目里面基本没有代码,除了几个空目录外,还包含如下几样东西。

    • pom.xml:Maven构建说明文件。
    • BootDemoApplication.java:一个带有main()方法的类,用于启动应用程序(关键)。
    • BootDemoApplicationTests.java:一个空的Junit测试类,它加载了一个使用Spring Boot字典配置功能的Spring应用程序上下文。
    • application.properties:一个空的properties文件,你可以根据需要添加配置属性。

    解析pom.xml

    看看Spring Boot的跟普通Spring MVC工程的Maven配置有什么区别?

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
     4     <modelVersion>4.0.0</modelVersion>
     5     <parent>
     6         <groupId>org.springframework.boot</groupId>
     7         <artifactId>spring-boot-starter-parent</artifactId>
     8         <version>2.1.8.RELEASE</version>
     9         <relativePath/> <!-- lookup parent from repository -->
    10     </parent>
    11     <groupId>com.birdboot</groupId>
    12     <artifactId>bootDemo</artifactId>
    13     <version>0.0.1-SNAPSHOT</version>
    14     <name>bootDemo</name>
    15     <description>Demo project for Spring Boot</description>
    16 
    17     <properties>
    18         <java.version>1.8</java.version>
    19     </properties>
    20 
    21     <dependencies>
    22         <dependency>
    23             <groupId>org.springframework.boot</groupId>
    24             <artifactId>spring-boot-starter</artifactId>
    25         </dependency>
    26         
    27         <dependency>
    28             <groupId>org.springframework.boot</groupId>
    29             <artifactId>spring-boot-starter-web</artifactId>
    30         </dependency>
    31 
    32         <dependency>
    33             <groupId>org.springframework.boot</groupId>
    34             <artifactId>spring-boot-starter-test</artifactId>
    35             <scope>test</scope>
    36         </dependency>
    37     </dependencies>
    38 
    39     <build>
    40         <plugins>
    41             <plugin>
    42                 <groupId>org.springframework.boot</groupId>
    43                 <artifactId>spring-boot-maven-plugin</artifactId>
    44             </plugin>
    45         </plugins>
    46     </build>
    47 
    48 </project>

     Spring Boot父级依赖>

    1     <parent>
    2         <groupId>org.springframework.boot</groupId>
    3         <artifactId>spring-boot-starter-parent</artifactId>
    4         <version>2.1.8.RELEASE</version>
    5         <relativePath/> <!-- lookup parent from repository -->
    6     </parent>

    这块配置就是Spring Boot父级依赖,有了这个,当前的项目就是Spring Boot项目了,spring-boot-starter-parent是一个特殊的starter,它用来提供相关的Maven默认依赖,使用它之后,常用的包依赖可以省去version标签。关于Spring Boot提供了哪些jar包的依赖,可查看C:Users用户.m2 epositoryorgspringframeworkootspring-boot-dependencies2.1.8.RELEASEspring-boot-dependencies-2.1.8.RELEASE.pom

      1 <properties>
      2     <activemq.version>5.15.10</activemq.version>
      3     <antlr2.version>2.7.7</antlr2.version>
      4     <appengine-sdk.version>1.9.76</appengine-sdk.version>
      5     <artemis.version>2.6.4</artemis.version>
      6     <aspectj.version>1.9.4</aspectj.version>
      7     <assertj.version>3.11.1</assertj.version>
      8     <atomikos.version>4.0.6</atomikos.version>
      9     <bitronix.version>2.1.4</bitronix.version>
     10     <build-helper-maven-plugin.version>3.0.0</build-helper-maven-plugin.version>
     11     <byte-buddy.version>1.9.16</byte-buddy.version>
     12     <caffeine.version>2.6.2</caffeine.version>
     13     <cassandra-driver.version>3.6.0</cassandra-driver.version>
     14     <classmate.version>1.4.0</classmate.version>
     15     <commons-codec.version>1.11</commons-codec.version>
     16     <commons-dbcp2.version>2.5.0</commons-dbcp2.version>
     17     <commons-lang3.version>3.8.1</commons-lang3.version>
     18     <commons-pool.version>1.6</commons-pool.version>
     19     <commons-pool2.version>2.6.2</commons-pool2.version>
     20     <couchbase-cache-client.version>2.1.0</couchbase-cache-client.version>
     21     <couchbase-client.version>2.7.9</couchbase-client.version>
     22     <dependency-management-plugin.version>1.0.8.RELEASE</dependency-management-plugin.version>
     23     <derby.version>10.14.2.0</derby.version>
     24     <dom4j.version>1.6.1</dom4j.version>
     25     <dropwizard-metrics.version>4.0.6</dropwizard-metrics.version>
     26     <ehcache.version>2.10.6</ehcache.version>
     27     <ehcache3.version>3.6.3</ehcache3.version>
     28     <elasticsearch.version>6.4.3</elasticsearch.version>
     29     <embedded-mongo.version>2.1.2</embedded-mongo.version>
     30     <exec-maven-plugin.version>1.6.0</exec-maven-plugin.version>
     31     <flatten-maven-plugin.version>1.0.1</flatten-maven-plugin.version>
     32     <flyway.version>5.2.4</flyway.version>
     33     <freemarker.version>2.3.29</freemarker.version>
     34     <git-commit-id-plugin.version>2.2.6</git-commit-id-plugin.version>
     35     <glassfish-el.version>3.0.0</glassfish-el.version>
     36     <glassfish-jaxb.version>2.3.1</glassfish-jaxb.version>
     37     <groovy.version>2.5.8</groovy.version>
     38     <gson.version>2.8.5</gson.version>
     39     <h2.version>1.4.199</h2.version>
     40     <hamcrest.version>1.3</hamcrest.version>
     41     <hazelcast.version>3.11.4</hazelcast.version>
     42     <hazelcast-hibernate5.version>1.2.3</hazelcast-hibernate5.version>
     43     <hibernate.version>5.3.11.Final</hibernate.version>
     44     <hibernate-validator.version>6.0.17.Final</hibernate-validator.version>
     45     <hikaricp.version>3.2.0</hikaricp.version>
     46     <hsqldb.version>2.4.1</hsqldb.version>
     47     <htmlunit.version>2.33</htmlunit.version>
     48     <httpasyncclient.version>4.1.4</httpasyncclient.version>
     49     <httpclient.version>4.5.9</httpclient.version>
     50     <httpcore.version>4.4.12</httpcore.version>
     51     <infinispan.version>9.4.16.Final</infinispan.version>
     52     <influxdb-java.version>2.14</influxdb-java.version>
     53     <jackson.version>2.9.9.20190807</jackson.version>
     54     <jackson-bom.version>${jackson.version}</jackson-bom.version>
     55     <janino.version>3.0.15</janino.version>
     56     <javax-activation.version>1.2.0</javax-activation.version>
     57     <javax-annotation.version>1.3.2</javax-annotation.version>
     58     <javax-cache.version>1.1.1</javax-cache.version>
     59     <javax-jaxb.version>2.3.1</javax-jaxb.version>
     60     <javax-jaxws.version>2.3.1</javax-jaxws.version>
     61     <javax-jms.version>2.0.1</javax-jms.version>
     62     <javax-json.version>1.1.4</javax-json.version>
     63     <javax-jsonb.version>1.0</javax-jsonb.version>
     64     <javax-mail.version>1.6.2</javax-mail.version>
     65     <javax-money.version>1.0.3</javax-money.version>
     66     <javax-persistence.version>2.2</javax-persistence.version>
     67     <javax-transaction.version>1.3</javax-transaction.version>
     68     <javax-validation.version>2.0.1.Final</javax-validation.version>
     69     <javax-websocket.version>1.1</javax-websocket.version>
     70     <jaxen.version>1.1.6</jaxen.version>
     71     <jaybird.version>3.0.6</jaybird.version>
     72     <jboss-logging.version>3.3.3.Final</jboss-logging.version>
     73     <jboss-transaction-spi.version>7.6.0.Final</jboss-transaction-spi.version>
     74     <jdom2.version>2.0.6</jdom2.version>
     75     <jedis.version>2.9.3</jedis.version>
     76     <jersey.version>2.27</jersey.version>
     77     <jest.version>6.3.1</jest.version>
     78     <jetty.version>9.4.19.v20190610</jetty.version>
     79     <jetty-el.version>8.5.40</jetty-el.version>
     80     <jetty-jsp.version>2.2.0.v201112011158</jetty-jsp.version>
     81     <jetty-reactive-httpclient.version>1.0.3</jetty-reactive-httpclient.version>
     82     <jmustache.version>1.14</jmustache.version>
     83     <jna.version>4.5.2</jna.version>
     84     <joda-time.version>2.10.3</joda-time.version>
     85     <johnzon.version>${johnzon-jsonb.version}</johnzon.version>
     86     <johnzon-jsonb.version>1.1.13</johnzon-jsonb.version>
     87     <jolokia.version>1.6.2</jolokia.version>
     88     <jooq.version>3.11.12</jooq.version>
     89     <jsonassert.version>1.5.0</jsonassert.version>
     90     <json-path.version>2.4.0</json-path.version>
     91     <jstl.version>1.2</jstl.version>
     92     <jtds.version>1.3.1</jtds.version>
     93     <junit.version>4.12</junit.version>
     94     <junit-jupiter.version>5.3.2</junit-jupiter.version>
     95     <kafka.version>2.0.1</kafka.version>
     96     <kotlin.version>1.2.71</kotlin.version>
     97     <lettuce.version>5.1.8.RELEASE</lettuce.version>
     98     <liquibase.version>3.6.3</liquibase.version>
     99     <log4j2.version>2.11.2</log4j2.version>
    100     <logback.version>1.2.3</logback.version>
    101     <lombok.version>1.18.8</lombok.version>
    102     <mariadb.version>2.3.0</mariadb.version>
    103     <maven-antrun-plugin.version>1.8</maven-antrun-plugin.version>
    104     <maven-assembly-plugin.version>3.1.1</maven-assembly-plugin.version>
    105     <maven-clean-plugin.version>3.1.0</maven-clean-plugin.version>
    106     <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
    107     <maven-dependency-plugin.version>3.1.1</maven-dependency-plugin.version>
    108     <maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version>
    109     <maven-enforcer-plugin.version>3.0.0-M2</maven-enforcer-plugin.version>
    110     <maven-failsafe-plugin.version>2.22.2</maven-failsafe-plugin.version>
    111     <maven-help-plugin.version>3.1.1</maven-help-plugin.version>
    112     <maven-install-plugin.version>2.5.2</maven-install-plugin.version>
    113     <maven-invoker-plugin.version>3.1.0</maven-invoker-plugin.version>
    114     <maven-jar-plugin.version>3.1.2</maven-jar-plugin.version>
    115     <maven-javadoc-plugin.version>3.0.1</maven-javadoc-plugin.version>
    116     <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
    117     <maven-shade-plugin.version>3.2.1</maven-shade-plugin.version>
    118     <maven-site-plugin.version>3.7.1</maven-site-plugin.version>
    119     <maven-source-plugin.version>3.0.1</maven-source-plugin.version>
    120     <maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
    121     <maven-war-plugin.version>3.2.3</maven-war-plugin.version>
    122     <micrometer.version>1.1.6</micrometer.version>
    123     <mimepull.version>1.9.11</mimepull.version>
    124     <mockito.version>2.23.4</mockito.version>
    125     <mongodb.version>3.8.2</mongodb.version>
    126     <mongo-driver-reactivestreams.version>1.9.2</mongo-driver-reactivestreams.version>
    127     <mssql-jdbc.version>6.4.0.jre8</mssql-jdbc.version>
    128     <mysql.version>8.0.17</mysql.version>
    129     <nekohtml.version>1.9.22</nekohtml.version>
    130     <neo4j-ogm.version>3.1.13</neo4j-ogm.version>
    131     <netty.version>4.1.39.Final</netty.version>
    132     <netty-tcnative.version>2.0.25.Final</netty-tcnative.version>
    133     <nio-multipart-parser.version>1.1.0</nio-multipart-parser.version>
    134     <pooled-jms.version>1.0.6</pooled-jms.version>
    135     <postgresql.version>42.2.6</postgresql.version>
    136     <prometheus-pushgateway.version>0.5.0</prometheus-pushgateway.version>
    137     <quartz.version>2.3.1</quartz.version>
    138     <querydsl.version>4.2.1</querydsl.version>
    139     <rabbit-amqp-client.version>5.4.3</rabbit-amqp-client.version>
    140     <reactive-streams.version>1.0.3</reactive-streams.version>
    141     <reactor-bom.version>Californium-SR11</reactor-bom.version>
    142     <rest-assured.version>3.1.1</rest-assured.version>
    143     <rxjava.version>1.3.8</rxjava.version>
    144     <rxjava2.version>2.2.12</rxjava2.version>
    145     <rxjava-adapter.version>1.2.1</rxjava-adapter.version>
    146     <saaj-impl.version>1.5.0</saaj-impl.version>
    147     <selenium.version>3.14.0</selenium.version>
    148     <selenium-htmlunit.version>2.33.0</selenium-htmlunit.version>
    149     <sendgrid.version>4.3.0</sendgrid.version>
    150     <servlet-api.version>4.0.1</servlet-api.version>
    151     <slf4j.version>1.7.28</slf4j.version>
    152     <snakeyaml.version>1.23</snakeyaml.version>
    153     <solr.version>7.7.2</solr.version>
    154     <spring.version>5.1.9.RELEASE</spring.version>
    155     <spring-amqp.version>2.1.8.RELEASE</spring-amqp.version>
    156     <spring-batch.version>4.1.2.RELEASE</spring-batch.version>
    157     <spring-cloud-connectors.version>2.0.6.RELEASE</spring-cloud-connectors.version>
    158     <spring-data-releasetrain.version>Lovelace-SR10</spring-data-releasetrain.version>
    159     <spring-framework.version>${spring.version}</spring-framework.version>
    160     <spring-hateoas.version>0.25.2.RELEASE</spring-hateoas.version>
    161     <spring-integration.version>5.1.7.RELEASE</spring-integration.version>
    162     <spring-kafka.version>2.2.8.RELEASE</spring-kafka.version>
    163     <spring-ldap.version>2.3.2.RELEASE</spring-ldap.version>
    164     <spring-plugin.version>1.2.0.RELEASE</spring-plugin.version>
    165     <spring-restdocs.version>2.0.3.RELEASE</spring-restdocs.version>
    166     <spring-retry.version>1.2.4.RELEASE</spring-retry.version>
    167     <spring-security.version>5.1.6.RELEASE</spring-security.version>
    168     <spring-session-bom.version>Bean-SR7</spring-session-bom.version>
    169     <spring-ws.version>3.0.7.RELEASE</spring-ws.version>
    170     <sqlite-jdbc.version>3.25.2</sqlite-jdbc.version>
    171     <statsd-client.version>3.1.0</statsd-client.version>
    172     <sun-mail.version>${javax-mail.version}</sun-mail.version>
    173     <thymeleaf.version>3.0.11.RELEASE</thymeleaf.version>
    174     <thymeleaf-extras-data-attribute.version>2.0.1</thymeleaf-extras-data-attribute.version>
    175     <thymeleaf-extras-java8time.version>3.0.4.RELEASE</thymeleaf-extras-java8time.version>
    176     <thymeleaf-extras-springsecurity.version>3.0.4.RELEASE</thymeleaf-extras-springsecurity.version>
    177     <thymeleaf-layout-dialect.version>2.3.0</thymeleaf-layout-dialect.version>
    178     <tomcat.version>9.0.24</tomcat.version>
    179     <unboundid-ldapsdk.version>4.0.11</unboundid-ldapsdk.version>
    180     <undertow.version>2.0.26.Final</undertow.version>
    181     <versions-maven-plugin.version>2.7</versions-maven-plugin.version>
    182     <webjars-hal-browser.version>3325375</webjars-hal-browser.version>
    183     <webjars-locator-core.version>0.35</webjars-locator-core.version>
    184     <woodstox.version>5.0.3</woodstox.version>
    185     <wsdl4j.version>1.6.3</wsdl4j.version>
    186     <xml-apis.version>1.4.01</xml-apis.version>
    187     <xml-maven-plugin.version>1.0.2</xml-maven-plugin.version>
    188     <xmlunit2.version>2.6.3</xmlunit2.version>
    189   </properties>

    若是不想使用某个依赖默认的版本,可以通过覆盖自己的项目中的属性来覆盖各个依赖项,例如,要升级到另一个Spring Data版本系列,您可以将以下内容添加到pom.xml中。

    1 <properties>
    2     <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
    3 </properties>

    原本默认版本是Lovelace-SR10的(看上面标红一行有说明Lovelace-SR10),现在就使用Fowler-SR2版本了。并不是每个人都喜欢继承自spring-boot-starter-parent POM。您可能有您需要使用的自己的公司标准parent,或者您可能更喜欢显式声明所有的Maven配置。
    如果不想使用spring-boot-starter-parent,您仍然可以通过使用scope = import依赖关系来保持依赖关系管理:

     1 <dependencyManagement>
     2      <dependencies>
     3         <dependency>
     4             <!-- Import dependency management from Spring Boot -->
     5             <groupId>org.springframework.boot</groupId>
     6             <artifactId>spring-boot-dependencies</artifactId>
     7             <version>2.1.8.RELEASE</version>
     8             <type>pom</type>
     9             <scope>import</scope>
    10         </dependency>
    11     </dependencies>
    12 </dependencyManagement>

    该设置不允许您使用如上所述的属性(properties)覆盖各个依赖项,要实现相同的结果,您需要在spring-boot-dependencies项之前的项目的dependencyManagement中添加一个配置,例如,要升级到另一个Spring Data版本系列,您可以将以下内容添加到pom.xml中。

     1 <dependencyManagement>
     2     <dependencies>
     3         <!-- Override Spring Data release train provided by Spring Boot -->
     4         <dependency>
     5             <groupId>org.springframework.data</groupId>
     6             <artifactId>spring-data-releasetrain</artifactId>
     7             <version>Fowler-SR2</version>
     8             <scope>import</scope>
     9             <type>pom</type>
    10         </dependency>
    11         <dependency>
    12             <groupId>org.springframework.boot</groupId>
    13             <artifactId>spring-boot-dependencies</artifactId>
    14             <version>2.1.8.RELEASE</version>
    15             <type>pom</type>
    16             <scope>import</scope>
    17         </dependency>
    18     </dependencies>
    19 </dependencyManagement>

    起步依赖 spring-boot-starter-xx>

    Spring Boot提供了很多”开箱即用“的依赖模块,都是以spring-boot-starter-xx作为命名的。

    举个例子来说明一下这个起步依赖的好处,比如组装台式机和品牌机,自己组装的话需要自己去选择不同的零件,最后还要组装起来,期间有可能会遇到零件不匹配的问题。耗时又消力,而品牌机就好一点,买来就能直接用的,后续想换零件也是可以的。相比较之下,后者带来的效果更好点(这里就不讨论价格问题了哈),起步依赖就像这里的品牌机,自动给你封装好了你想要实现的功能的依赖。就比如我们之前要实现web功能,引入了spring-boot-starter-web这个起步依赖。我们来看看spring-boot-starter-web到底依赖了哪些,如下图(这里采用的是原博主的图):

      

     看来依赖了好多,所以Spring Boot通过提供众多起步依赖降低项目依赖的复杂度。起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其他库的传递依赖,这些东西加在一起即支持某项功能。很多起步依赖的命名都暗示了它们提供的某种或者某类功能。

    Spring Boot Maven插件>

    1 <build>
    2     <plugins>
    3         <plugin>
    4             <groupId>org.springframework.boot</groupId>
    5             <artifactId>spring-boot-maven-plugin</artifactId>
    6         </plugin>
    7     </plugins>
    8 </build>

    上面的配置就是Spring Boot Maven插件,Spring Boot Maven插件提供了许多方便的功能:

    • 把项目打包成一个可执行的超级JAR(uber-JAR),包括把应用程序的所有依赖打入JAR文件内,并为JAR添加一个描述文件,其中的内容能让你用java -jar来运行应用程序。
    • 搜索public static void main()方法来标记为可运行类

    应用入口类

     BootDemoApplication是一个很关键的启动类,程序的入口就是这里,为了演示简单,我们不再新建控制类,而是直接在这个入口类中编写,添加@RestController以及index方法,如下:

     1 package com.birdboot.bootDemo;
     2 
     3 import org.springframework.boot.SpringApplication;
     4 import org.springframework.boot.autoconfigure.SpringBootApplication;
     5 import org.springframework.web.bind.annotation.RequestMapping;
     6 import org.springframework.web.bind.annotation.RestController;
     7 
     8 @RestController
     9 @SpringBootApplication
    10 public class BootDemoApplication {
    11 
    12     @RequestMapping("/")
    13     public String index(){
    14         return "Hello Spring Boot";
    15     }
    16     
    17     public static void main(String[] args) {
    18         SpringApplication.run(BootDemoApplication.class, args);
    19     }
    20 
    21 }
    1. @SpringBootApplication是Sprnig Boot项目的核心注解,主要目的是开启自动配置。后续讲解原理的时候再深入介绍。
    2. main方法这是一个标准的Java应用的main的方法,主要作用是作为项目启动的入口。

    3. @RestController注解等价于@Controller+@ResponseBody的结合,使用这个注解的类里面的方法都以json格式输出。

    最后,启动项目有三种方式:

    First、SpringBootApplication的main方法

    Second、使用命令 mvn spring-boot:run”在命令行启动该应用。

    Third、运行“mvn package”进行打包时,会打包成一个可以直接运行的 JAR 文件,使用“java -jar”命令就可以直接运行。

    打开浏览器访问http://localhost:8080, 就能看到页面显示Hello Spring Boot效果了,一个简单的Web的项目就是如此简单。

    结束

    上面讲解了那么多,但是实际开发步骤就是那么简单暴力,初始化一个Spring Boot,添加一个控制类,启动就能看到效果了。
    本章作为入门Spring Boot的入门介绍,相关的需要理解的概念就只有这几点:

    • Spring Boot父级依赖的概念
    • 起步依赖 spring-boot-starter-xx的概念
    • 应用入口类的作用

    后记

     此处记录本人的一些踩过的坑。

    1.自己要在pom.xml文件中增加spring-boot-starter-web的依赖;否则@RestController无法引入

    1 <dependency>
    2     <groupId>org.springframework.boot</groupId>
    3     <artifactId>spring-boot-starter-web</artifactId>
    4 </dependency>

    2.我采用的Spring boot版本是2.1.8,所以jdk版本要求必须是1.8以上;jdk1.7无法启动项目,会报java.lang.UnsupportedClassVersionError的错误。

    若是出现这个问题,可以参考:https://blog.csdn.net/w405722907/article/details/77160220

  • 相关阅读:
    ASP.NET Web API 2 框架揭秘
    跨境之二 对外服务接口接收订单数据(跨境通关申报系统)
    关于程序员的59条搞笑但却真实无比的编程语录
    linux终端常用快捷键
    [ json editor] 如何在网页中使用Json editor 插件
    【简洁之美】裴波那切数列生成器 python
    python 实现树结构的打印
    windows python文件拷贝到linux上执行问题
    python 中变量的命名方法
    <select> 标签使用
  • 原文地址:https://www.cnblogs.com/cainiaomahua/p/11586869.html
Copyright © 2020-2023  润新知