springboot快速入門

前言

Springboot是時下非常熱門的java開發(fā)框架,它采用約定大于配置的開發(fā)理念,使我們幾乎以零配置的方式快速構建一個java項目,非常優(yōu)雅!

什么是Spring Boot?

Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發(fā)過程。該框架使用了特定的方式來進行配置,從而使開發(fā)人員不再需要定義樣板化的配置。簡而言之,Spring Boot通過提供默認配置的方式整合了所有的框架,讓我們可以更加簡單、快速、方便地構建應用程序。

為什么要用Spring Boot?

Spring Boot包含以下幾個特性:

  1. 默認提供了大部分框架的使用方式,方便進行快速集成

  2. Spring Boot應用可以獨立運行,符合微服務的開發(fā)理念

  3. Spring Boot內置WEB容器,無需部署WAR包即可運行

  4. 提供了各種生產(chǎn)就緒型功能,如指標,健康檢查和外部配置

  5. Spring Boot通過網(wǎng)站提供了項目模板,方便項目的初始化

通過以上這些非常優(yōu)秀的特性,Spring Boot可以幫助我們非常簡單、快速的構建起我們的項目,并能夠非常方便進行后續(xù)開發(fā)、測試和部署。


話不多說,學習一門新技術從“HelloWorld”開始是再合適不過的了!

一、開發(fā)第一個 Spring Boot 應用

下面會介紹maven和springboot腳手架2種方式開始我們的springboot之旅

環(huán)境準備

  • JDK 環(huán)境必須是 1.8 及以上

  • IDEA 2021.1.3

  • Maven 3.6.3

方式一:Maven工程


(1)創(chuàng)建maven項目

可以看見這是一個非常存粹的maven項目,和springboot沒有任何關系!


(2)引入spring-boot-starter-parent依賴

?<?xml version="1.0" encoding="UTF-8"?>
?<project xmlns="http://maven.apache.org/POM/4.0.0"
? ? ? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? ? ? ? xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
? ? ?<modelVersion>4.0.0</modelVersion>
?
? ? ?<groupId>org.example</groupId>
? ? ?<artifactId>maven-helloworld</artifactId>
? ? ?<version>1.0-SNAPSHOT</version>
? ? ?<!--springboot父依賴-->
? ? ?<parent>
? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ?<artifactId>spring-boot-starter-parent</artifactId>
? ? ? ? ?<version>2.5.6</version>
? ? ? ? ?<relativePath/> <!-- lookup parent from repository -->
? ? ?</parent>
?
?</project>


spring-boot-starter-parent是springboot項目用于管理jar包版本的,也就是我們經(jīng)常說的“版本仲裁”,記住它僅僅是管理版本的,并不會導入依賴,記住這點非常重要!我以前就搞混淆了,害我迷惑很長一段時間?。。?/p>

關于這一點我們可以用mvn dependency:tree查看項目依賴來驗證,發(fā)現(xiàn)依賴為空!Good Gay!

?[INFO]?---?maven-dependency-plugin:3.1.2:tree?(default-cli)?@?maven-helloworld?---[INFO]?org.example:maven-helloworld:jar:1.0-SNAPSHOT


從上面可以看到,我構建這個工程使用的是springboot 2.5.6版本,它集成的第三方依賴版本屬性如下:

?<properties>
? ?<activemq.version>5.16.3</activemq.version>
? ?<antlr2.version>2.7.7</antlr2.version>
? ?<appengine-sdk.version>1.9.91</appengine-sdk.version>
? ?<artemis.version>2.17.0</artemis.version>
? ?<aspectj.version>1.9.7</aspectj.version>
? ?<assertj.version>3.19.0</assertj.version>
? ?<atomikos.version>4.0.6</atomikos.version>
? ?<awaitility.version>4.0.3</awaitility.version>
? ?<build-helper-maven-plugin.version>3.2.0</build-helper-maven-plugin.version>
? ?<byte-buddy.version>1.10.22</byte-buddy.version>
? ?<caffeine.version>2.9.2</caffeine.version>
? ?<cassandra-driver.version>4.11.3</cassandra-driver.version>
? ?<classmate.version>1.5.1</classmate.version>
? ?<commons-codec.version>1.15</commons-codec.version>
? ?<commons-dbcp2.version>2.8.0</commons-dbcp2.version>
? ?<commons-lang3.version>3.12.0</commons-lang3.version>
? ?<commons-pool.version>1.6</commons-pool.version>
? ?<commons-pool2.version>2.9.0</commons-pool2.version>
? ?<couchbase-client.version>3.1.7</couchbase-client.version>
? ?<db2-jdbc.version>11.5.6.0</db2-jdbc.version>
? ?<dependency-management-plugin.version>1.0.11.RELEASE</dependency-management-plugin.version>
? ?<derby.version>10.14.2.0</derby.version>
? ?<dropwizard-metrics.version>4.1.26</dropwizard-metrics.version>
? ?<ehcache.version>2.10.9.2</ehcache.version>
? ?<ehcache3.version>3.9.7</ehcache3.version>
? ?<elasticsearch.version>7.12.1</elasticsearch.version>
? ?<embedded-mongo.version>3.0.0</embedded-mongo.version>
? ?<flyway.version>7.7.3</flyway.version>
? ?<freemarker.version>2.3.31</freemarker.version>
? ?<git-commit-id-plugin.version>4.0.5</git-commit-id-plugin.version>
? ?<glassfish-el.version>3.0.4</glassfish-el.version>
? ?<glassfish-jaxb.version>2.3.5</glassfish-jaxb.version>
? ?<groovy.version>3.0.9</groovy.version>
? ?<gson.version>2.8.8</gson.version>
? ?<h2.version>1.4.200</h2.version>
? ?<hamcrest.version>2.2</hamcrest.version>
? ?<hazelcast.version>4.1.5</hazelcast.version>
? ?<hazelcast-hibernate5.version>2.2.1</hazelcast-hibernate5.version>
? ?<hibernate.version>5.4.32.Final</hibernate.version>
? ?<hibernate-validator.version>6.2.0.Final</hibernate-validator.version>
? ?<hikaricp.version>4.0.3</hikaricp.version>
? ?<hsqldb.version>2.5.2</hsqldb.version>
? ?<htmlunit.version>2.49.1</htmlunit.version>
? ?<httpasyncclient.version>4.1.4</httpasyncclient.version>
? ?<httpclient.version>4.5.13</httpclient.version>
? ?<httpclient5.version>5.0.4</httpclient5.version>
? ?<httpcore.version>4.4.14</httpcore.version>
? ?<httpcore5.version>5.1.2</httpcore5.version>
? ?<infinispan.version>12.1.7.Final</infinispan.version>
? ?<influxdb-java.version>2.21</influxdb-java.version>
? ?<jackson-bom.version>2.12.5</jackson-bom.version>
? ?<jakarta-activation.version>1.2.2</jakarta-activation.version>
? ?<jakarta-annotation.version>1.3.5</jakarta-annotation.version>
? ?<jakarta-jms.version>2.0.3</jakarta-jms.version>
? ?<jakarta-json.version>1.1.6</jakarta-json.version>
? ?<jakarta-json-bind.version>1.0.2</jakarta-json-bind.version>
? ?<jakarta-mail.version>1.6.7</jakarta-mail.version>
? ?<jakarta-management.version>1.1.4</jakarta-management.version>
? ?<jakarta-persistence.version>2.2.3</jakarta-persistence.version>
? ?<jakarta-servlet.version>4.0.4</jakarta-servlet.version>
? ?<jakarta-servlet-jsp-jstl.version>1.2.7</jakarta-servlet-jsp-jstl.version>
? ?<jakarta-transaction.version>1.3.3</jakarta-transaction.version>
? ?<jakarta-validation.version>2.0.2</jakarta-validation.version>
? ?<jakarta-websocket.version>1.1.2</jakarta-websocket.version>
? ?<jakarta-ws-rs.version>2.1.6</jakarta-ws-rs.version>
? ?<jakarta-xml-bind.version>2.3.3</jakarta-xml-bind.version>
? ?<jakarta-xml-soap.version>1.4.2</jakarta-xml-soap.version>
? ?<jakarta-xml-ws.version>2.3.3</jakarta-xml-ws.version>
? ?<janino.version>3.1.6</janino.version>
? ?<javax-activation.version>1.2.0</javax-activation.version>
? ?<javax-annotation.version>1.3.2</javax-annotation.version>
? ?<javax-cache.version>1.1.1</javax-cache.version>
? ?<javax-jaxb.version>2.3.1</javax-jaxb.version>
? ?<javax-jaxws.version>2.3.1</javax-jaxws.version>
? ?<javax-jms.version>2.0.1</javax-jms.version>
? ?<javax-json.version>1.1.4</javax-json.version>
? ?<javax-jsonb.version>1.0</javax-jsonb.version>
? ?<javax-mail.version>1.6.2</javax-mail.version>
? ?<javax-money.version>1.1</javax-money.version>
? ?<javax-persistence.version>2.2</javax-persistence.version>
? ?<javax-transaction.version>1.3</javax-transaction.version>
? ?<javax-validation.version>2.0.1.Final</javax-validation.version>
? ?<javax-websocket.version>1.1</javax-websocket.version>
? ?<jaxen.version>1.2.0</jaxen.version>
? ?<jaybird.version>4.0.4.java8</jaybird.version>
? ?<jboss-logging.version>3.4.2.Final</jboss-logging.version>
? ?<jboss-transaction-spi.version>7.6.1.Final</jboss-transaction-spi.version>
? ?<jdom2.version>2.0.6</jdom2.version>
? ?<jedis.version>3.6.3</jedis.version>
? ?<jersey.version>2.33</jersey.version>
? ?<jetty-el.version>9.0.52</jetty-el.version>
? ?<jetty-jsp.version>2.2.0.v201112011158</jetty-jsp.version>
? ?<jetty-reactive-httpclient.version>1.1.10</jetty-reactive-httpclient.version>
? ?<jetty.version>9.4.44.v20210927</jetty.version>
? ?<jmustache.version>1.15</jmustache.version>
? ?<johnzon.version>1.2.14</johnzon.version>
? ?<jolokia.version>1.6.2</jolokia.version>
? ?<jooq.version>3.14.15</jooq.version>
? ?<json-path.version>2.5.0</json-path.version>
? ?<json-smart.version>2.4.7</json-smart.version>
? ?<jsonassert.version>1.5.0</jsonassert.version>
? ?<jstl.version>1.2</jstl.version>
? ?<jtds.version>1.3.1</jtds.version>
? ?<junit.version>4.13.2</junit.version>
? ?<junit-jupiter.version>5.7.2</junit-jupiter.version>
? ?<kafka.version>2.7.1</kafka.version>
? ?<kotlin.version>1.5.31</kotlin.version>
? ?<kotlin-coroutines.version>1.5.2</kotlin-coroutines.version>
? ?<lettuce.version>6.1.5.RELEASE</lettuce.version>
? ?<liquibase.version>4.3.5</liquibase.version>
? ?<log4j2.version>2.14.1</log4j2.version>
? ?<logback.version>1.2.6</logback.version>
? ?<lombok.version>1.18.22</lombok.version>
? ?<mariadb.version>2.7.4</mariadb.version>
? ?<maven-antrun-plugin.version>1.8</maven-antrun-plugin.version>
? ?<maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version>
? ?<maven-clean-plugin.version>3.1.0</maven-clean-plugin.version>
? ?<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
? ?<maven-dependency-plugin.version>3.1.2</maven-dependency-plugin.version>
? ?<maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version>
? ?<maven-enforcer-plugin.version>3.0.0</maven-enforcer-plugin.version>
? ?<maven-failsafe-plugin.version>2.22.2</maven-failsafe-plugin.version>
? ?<maven-help-plugin.version>3.2.0</maven-help-plugin.version>
? ?<maven-install-plugin.version>2.5.2</maven-install-plugin.version>
? ?<maven-invoker-plugin.version>3.2.2</maven-invoker-plugin.version>
? ?<maven-jar-plugin.version>3.2.0</maven-jar-plugin.version>
? ?<maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version>
? ?<maven-resources-plugin.version>3.2.0</maven-resources-plugin.version>
? ?<maven-shade-plugin.version>3.2.4</maven-shade-plugin.version>
? ?<maven-source-plugin.version>3.2.1</maven-source-plugin.version>
? ?<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
? ?<maven-war-plugin.version>3.3.2</maven-war-plugin.version>
? ?<micrometer.version>1.7.5</micrometer.version>
? ?<mimepull.version>1.9.15</mimepull.version>
? ?<mockito.version>3.9.0</mockito.version>
? ?<mongodb.version>4.2.3</mongodb.version>
? ?<mssql-jdbc.version>9.2.1.jre8</mssql-jdbc.version>
? ?<mysql.version>8.0.27</mysql.version>
? ?<nekohtml.version>1.9.22</nekohtml.version>
? ?<neo4j-java-driver.version>4.2.7</neo4j-java-driver.version>
? ?<netty.version>4.1.69.Final</netty.version>
? ?<netty-tcnative.version>2.0.44.Final</netty-tcnative.version>
? ?<oauth2-oidc-sdk.version>9.9.1</oauth2-oidc-sdk.version>
? ?<nimbus-jose-jwt.version>9.10.1</nimbus-jose-jwt.version>
? ?<ojdbc.version>19.3.0.0</ojdbc.version>
? ?<okhttp3.version>3.14.9</okhttp3.version>
? ?<oracle-database.version>21.1.0.0</oracle-database.version>
? ?<pooled-jms.version>1.2.2</pooled-jms.version>
? ?<postgresql.version>42.2.24</postgresql.version>
? ?<prometheus-pushgateway.version>0.10.0</prometheus-pushgateway.version>
? ?<quartz.version>2.3.2</quartz.version>
? ?<querydsl.version>4.4.0</querydsl.version>
? ?<r2dbc-bom.version>Arabba-SR11</r2dbc-bom.version>
? ?<rabbit-amqp-client.version>5.12.0</rabbit-amqp-client.version>
? ?<reactive-streams.version>1.0.3</reactive-streams.version>
? ?<reactor-bom.version>2020.0.12</reactor-bom.version>
? ?<rest-assured.version>4.3.3</rest-assured.version>
? ?<rsocket.version>1.1.1</rsocket.version>
? ?<rxjava.version>1.3.8</rxjava.version>
? ?<rxjava-adapter.version>1.2.1</rxjava-adapter.version>
? ?<rxjava2.version>2.2.21</rxjava2.version>
? ?<saaj-impl.version>1.5.3</saaj-impl.version>
? ?<selenium.version>3.141.59</selenium.version>
? ?<selenium-htmlunit.version>2.49.1</selenium-htmlunit.version>
? ?<sendgrid.version>4.7.6</sendgrid.version>
? ?<servlet-api.version>4.0.1</servlet-api.version>
? ?<slf4j.version>1.7.32</slf4j.version>
? ?<snakeyaml.version>1.28</snakeyaml.version>
? ?<solr.version>8.8.2</solr.version>
? ?<spring-amqp.version>2.3.11</spring-amqp.version>
? ?<spring-batch.version>4.3.3</spring-batch.version>
? ?<spring-data-bom.version>2021.0.6</spring-data-bom.version>
? ?<spring-framework.version>5.3.12</spring-framework.version>
? ?<spring-hateoas.version>1.3.5</spring-hateoas.version>
? ?<spring-integration.version>5.5.5</spring-integration.version>
? ?<spring-kafka.version>2.7.8</spring-kafka.version>
? ?<spring-ldap.version>2.3.4.RELEASE</spring-ldap.version>
? ?<spring-restdocs.version>2.0.5.RELEASE</spring-restdocs.version>
? ?<spring-retry.version>1.3.1</spring-retry.version>
? ?<spring-security.version>5.5.3</spring-security.version>
? ?<spring-session-bom.version>2021.0.3</spring-session-bom.version>
? ?<spring-ws.version>3.1.1</spring-ws.version>
? ?<sqlite-jdbc.version>3.34.0</sqlite-jdbc.version>
? ?<sun-mail.version>1.6.7</sun-mail.version>
? ?<thymeleaf.version>3.0.12.RELEASE</thymeleaf.version>
? ?<thymeleaf-extras-data-attribute.version>2.0.1</thymeleaf-extras-data-attribute.version>
? ?<thymeleaf-extras-java8time.version>3.0.4.RELEASE</thymeleaf-extras-java8time.version>
? ?<thymeleaf-extras-springsecurity.version>3.0.4.RELEASE</thymeleaf-extras-springsecurity.version>
? ?<thymeleaf-layout-dialect.version>2.5.3</thymeleaf-layout-dialect.version>
? ?<tomcat.version>9.0.54</tomcat.version>
? ?<unboundid-ldapsdk.version>4.0.14</unboundid-ldapsdk.version>
? ?<undertow.version>2.2.12.Final</undertow.version>
? ?<versions-maven-plugin.version>2.8.1</versions-maven-plugin.version>
? ?<webjars-hal-browser.version>3325375</webjars-hal-browser.version>
? ?<webjars-locator-core.version>0.46</webjars-locator-core.version>
? ?<wsdl4j.version>1.6.3</wsdl4j.version>
? ?<xml-maven-plugin.version>1.0.2</xml-maven-plugin.version>
? ?<xmlunit2.version>2.8.3</xmlunit2.version>
?</properties>


(3)引入spring-boot-starter-web啟動器

接下來,我們把項目改造成一個web工程!

以前我們創(chuàng)建web工程,需要引入很多依賴,有了springboot后我們只需要引入spring-boot-starter-web啟動器

?<?xml version="1.0" encoding="UTF-8"?>
?<project xmlns="http://maven.apache.org/POM/4.0.0"
? ? ? ? ? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? ? ? ? xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
? ? ?<modelVersion>4.0.0</modelVersion>
?
? ? ?<groupId>org.example</groupId>
? ? ?<artifactId>maven-helloworld</artifactId>
? ? ?<version>1.0-SNAPSHOT</version>
?
? ? ?<parent>
? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ?<artifactId>spring-boot-starter-parent</artifactId>
? ? ? ? ?<version>2.5.6</version>
? ? ? ? ?<relativePath/> <!-- lookup parent from repository -->
? ? ?</parent>
? ? ?<!--引入web啟動器-->
? ? ?<dependencies>
? ? ? ? ?<dependency>
? ? ? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ? ? ?<artifactId>spring-boot-starter-web</artifactId>
? ? ? ? ?</dependency>
? ? ?</dependencies>
?</project>

引入web的starter依賴后,刷新一下maven,再次用mvn dependency:tree 查看依賴樹:

?[INFO] org.example:maven-helloworld:jar:1.0-SNAPSHOT
?[INFO] \- org.springframework.boot:spring-boot-starter-web:jar:2.5.6:compile
?[INFO] ? ?+- org.springframework.boot:spring-boot-starter:jar:2.5.6:compile
?[INFO] ? ?| ?+- org.springframework.boot:spring-boot:jar:2.5.6:compile
?[INFO] ? ?| ?+- org.springframework.boot:spring-boot-autoconfigure:jar:2.5.6:compile
?[INFO] ? ?| ?+- org.springframework.boot:spring-boot-starter-logging:jar:2.5.6:compile
?[INFO] ? ?| ?| ?+- ch.qos.logback:logback-classic:jar:1.2.6:compile
?[INFO] ? ?| ?| ?| ?+- ch.qos.logback:logback-core:jar:1.2.6:compile
?[INFO] ? ?| ?| ?| ?\- org.slf4j:slf4j-api:jar:1.7.32:compile
?[INFO] ? ?| ?| ?+- org.apache.logging.log4j:log4j-to-slf4j:jar:2.14.1:compile
?[INFO] ? ?| ?| ?| ?\- org.apache.logging.log4j:log4j-api:jar:2.14.1:compile
?[INFO] ? ?| ?| ?\- org.slf4j:jul-to-slf4j:jar:1.7.32:compile
?[INFO] ? ?| ?+- jakarta.annotation:jakarta.annotation-api:jar:1.3.5:compile
?[INFO] ? ?| ?+- org.springframework:spring-core:jar:5.3.12:compile
?[INFO] ? ?| ?| ?\- org.springframework:spring-jcl:jar:5.3.12:compile
?[INFO] ? ?| ?\- org.yaml:snakeyaml:jar:1.28:compile
?[INFO] ? ?+- org.springframework.boot:spring-boot-starter-json:jar:2.5.6:compile
?[INFO] ? ?| ?+- com.fasterxml.jackson.core:jackson-databind:jar:2.12.5:compile
?[INFO] ? ?| ?| ?+- com.fasterxml.jackson.core:jackson-annotations:jar:2.12.5:compile
?[INFO] ? ?| ?| ?\- com.fasterxml.jackson.core:jackson-core:jar:2.12.5:compile
?[INFO] ? ?| ?+- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.12.5:compile
?[INFO] ? ?| ?+- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.12.5:compile
?[INFO] ? ?| ?\- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.12.5:compile
?[INFO] ? ?+- org.springframework.boot:spring-boot-starter-tomcat:jar:2.5.6:compile
?[INFO] ? ?| ?+- org.apache.tomcat.embed:tomcat-embed-core:jar:9.0.54:compile
?[INFO] ? ?| ?+- org.apache.tomcat.embed:tomcat-embed-el:jar:9.0.54:compile
?[INFO] ? ?| ?\- org.apache.tomcat.embed:tomcat-embed-websocket:jar:9.0.54:compile
?[INFO] ? ?+- org.springframework:spring-web:jar:5.3.12:compile
?[INFO] ? ?| ?\- org.springframework:spring-beans:jar:5.3.12:compile
?[INFO] ? ?\- org.springframework:spring-webmvc:jar:5.3.12:compile
?[INFO] ? ? ? +- org.springframework:spring-aop:jar:5.3.12:compile
?[INFO] ? ? ? +- org.springframework:spring-context:jar:5.3.12:compile
?[INFO] ? ? ? \- org.springframework:spring-expression:jar:5.3.12:compile

好家伙,僅僅是引入了一個web的starter,springboot就會默認為我們下載web工程所有依賴的jar,這正是springboot簡化開發(fā)的第一步,所有開發(fā)場景都給你集成一個starter!


(4)新建啟動類

?package com.huiwei.hello;
?
?import org.springframework.boot.SpringApplication;
?import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
?import org.springframework.boot.autoconfigure.SpringBootApplication;
?import org.springframework.context.annotation.ComponentScan;
?
?@EnableAutoConfiguration
?@ComponentScan
?//@SpringBootApplication //可以代替上面2個注解
?public class HelloWorldApplication {
? ? ?public static void main(String[] args) {
? ? ? ? ?SpringApplication.run(HelloWorldApplication.class,args);
? ? ?}
?}

注意:@SpringBootApplication注解包含了@EnableAutoConfiguration、@ComponentScan、@SpringBootConfiguration這3個注解,所以可以用這一個注解代替3個注解


(5)創(chuàng)建HelloController來進行測試

?package com.huiwei.hello.controller;
?
?import org.springframework.web.bind.annotation.RequestMapping;
?import org.springframework.web.bind.annotation.RestController;
?
?@RestController
?public class HelloController {
? ? ?@RequestMapping("hello")
? ? ?public String hello(){
? ? ? ? ?return "Hello,Spring!";
? ? ?}
?}


(6)啟動項目,訪問測試:http://localhost:8080/hello

(7)創(chuàng)建可執(zhí)行 jar

要創(chuàng)建可執(zhí)行 jar,我們需要將 spring-boot-maven-plugin 添加到 pom.xml 文件中。在 dependencies 下方插入以下配置:

?<build>
? ? ? ? ?<plugins>
? ? ? ? ? ? ?<plugin>
? ? ? ? ? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ? ? ? ? ?<artifactId>spring-boot-maven-plugin</artifactId>
? ? ? ? ? ? ?</plugin>
? ? ? ? ?</plugins>
? ? ?</build>


引入依賴后,刷新maven,雙擊idea右側的package,進行打包


生成maven-helloworld-1.0-SNAPSHOT.jar


在命令行執(zhí)行java -jar maven-helloworld-1.0-SNAPSHOT.jar,這樣就以jar包的方式啟動了一個springboot工程



方式二:使用springboot腳手架創(chuàng)建項目


(1)選擇左邊的Spring Initializr ?


(2)選擇web的依賴,點擊完成創(chuàng)建springboot腳手架


當我們經(jīng)過以上2步創(chuàng)建一個springboot工程后,創(chuàng)建好的項目結構如下:


我們可以看見這種方式已經(jīng)默認幫我們創(chuàng)建了項目的啟動類

?package com.example.springboothello;
?
?import org.springframework.boot.SpringApplication;
?import org.springframework.boot.autoconfigure.SpringBootApplication;
?
?@SpringBootApplication
?public class SpringbootHelloApplication {
? ? ?public static void main(String[] args) {
? ? ? ? ?SpringApplication.run(SpringbootHelloApplication.class, args);
? ? ?}
?}


此外還在resources資源目錄下創(chuàng)建了

?static文件夾:用于存放靜態(tài)資源文件
?templates文件夾:用于存放模板文件
?application.properties:用于修改項目的一些默認配置


我們打開pom文件如下:

?<?xml version="1.0" encoding="UTF-8"?>
?<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? ? ? ? xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
? ? ?<modelVersion>4.0.0</modelVersion>
? ? ?<parent>
? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ?<artifactId>spring-boot-starter-parent</artifactId>
? ? ? ? ?<version>2.5.6</version>
? ? ? ? ?<relativePath/> <!-- lookup parent from repository -->
? ? ?</parent>
? ? ?<groupId>com.example</groupId>
? ? ?<artifactId>springboot-hello</artifactId>
? ? ?<version>0.0.1-SNAPSHOT</version>
? ? ?<name>springboot-hello</name>
? ? ?<description>Demo project for Spring Boot</description>
? ? ?<properties>
? ? ? ? ?<java.version>1.8</java.version>
? ? ?</properties>
? ? ?<dependencies>
? ? ? ? ?<dependency>
? ? ? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ? ? ?<artifactId>spring-boot-starter-web</artifactId>
? ? ? ? ?</dependency>
?
? ? ? ? ?<dependency>
? ? ? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ? ? ?<artifactId>spring-boot-starter-test</artifactId>
? ? ? ? ? ? ?<scope>test</scope>
? ? ? ? ?</dependency>
? ? ?</dependencies>
?
? ? ?<build>
? ? ? ? ?<plugins>
? ? ? ? ? ? ?<plugin>
? ? ? ? ? ? ? ? ?<groupId>org.springframework.boot</groupId>
? ? ? ? ? ? ? ? ?<artifactId>spring-boot-maven-plugin</artifactId>
? ? ? ? ? ? ?</plugin>
? ? ? ? ?</plugins>
? ? ?</build>
?</project>


好家伙,已經(jīng)為我們默認引入了parent依賴、web依賴以及一個test的依賴,還有項目進行打包的依賴,不用我們手動引入了,我們想要什么功能只需要在創(chuàng)建項目時勾選相應的模塊即可!


(3)創(chuàng)建HelloController用于測試

?package com.example.springboothello.controller;
?
?import org.springframework.web.bind.annotation.RequestMapping;
?import org.springframework.web.bind.annotation.RestController;
?
?@RestController
?public class HelloController {
? ? ?@RequestMapping("hello")
? ? ?public String hello(){
? ? ? ? ?return "Hello,springboot-hello!";
? ? ?}
?}


(4)啟動訪問:http://localhost:8080/hello


二、SpringbootApplication啟動類詳解

Spring Boot 項目通常有一個名為 XXXApplication 的入口類,入口類里有一個 main 方法, 這個 main 方法其實就是一個標準的 Java應用的入口方法。

?@SpringBootApplication
?public class SpringbootHelloApplication {
? ? ?public static void main(String[] args) {
? ? ? ? ?SpringApplication.run(SpringbootHelloApplication.class, args);
? ? ?}
?}

當我們啟動這個類時,會運行SpringApplication的run方法,run方法傳入了啟動類SpringbootHelloApplication 的class對象,然后對啟動類的注解@SpringBootApplication進行解析,我們來看看@SpringBootApplication的內部

?@SpringBootConfiguration
?@EnableAutoConfiguration
?@ComponentScan(
? ? ?excludeFilters = {@Filter(
? ? ?type = FilterType.CUSTOM,
? ? ?classes = {TypeExcludeFilter.class}
?), @Filter(
? ? ?type = FilterType.CUSTOM,
? ? ?classes = {AutoConfigurationExcludeFilter.class}
?)}
?)
?public @interface SpringBootApplication {

可以看到,它由@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三個注解組成

@SpringBootConfiguration是spring原生注解Configuration的springboot版本

@EnableAutoConfiguration讓 Spring Boot 根據(jù)類路徑中的 jar 包依賴為當前項目進行自動配置,例如,添加了 spring-boot-starter-web 依賴,會自動添加Tomcat 和 Spring MVC 的依賴,那么 Spring Boot 會對 Tomcat 和 Spring MVC 進行自動配置。

Spring Boot 還會自動掃描 @SpringBootApplication 所在類的同級包以及下級包里的 Bean ,所以入口類建議就配置在 grounpID + arctifactID 組合的包名下


三、springboot配置文件

Spring Boot 使用一個全局的配置文件 application.properties 或 application.yml,放置在【src/main/resources】目錄或者類路徑的 /config 下。


Spring Boot 不僅支持常規(guī)的 properties 配置文件,還支持 yaml 語言的配置文件。yaml 是以數(shù)據(jù)為中心的語言,在配置數(shù)據(jù)的時候具有面向對象的特征。


Spring Boot 的全局配置文件的作用是對一些默認配置的配置值進行修改。


修改 properties 配置文件實例:

(1)打開 resources 下的 application.properties


(2)在這里我們可以設置訪問的端口,將 Tomcat 默認端口設置為 8082 ,并將默認的訪問路徑從 “/” 修改為 “/springboot” 時,再訪問 http://localhost:8080/hello是什么都沒有的


此時要訪問 hello 是要使用 http://localhost:8082/springboot/hello



(3)使用 yml 文件作為配置文件


重啟項目進行訪問:


(4)yml語法

  • 基本語法

k:(空格)v:表示一對鍵值對(空格必須有);

空格的縮進來控制層級關系;只要是左對齊的一列數(shù)據(jù),都是同一個層級的

此外,屬性和值也是大小寫敏感;

  • 值的寫法

字面量:普通的值(數(shù)字,字符串,布爾)

k: v:字面直接來寫;

?name: 小明
?age: 18

字符串默認不用加上單引號或者雙引號;

"":雙引號;不會轉義字符串里面的特殊字符;特殊字符會作為本身想表示的意思

?name:???"zhangsan?\n?lisi":輸出;zhangsan?換行??lisi

'':單引號;會轉義特殊字符,特殊字符最終只是一個普通的字符串數(shù)據(jù)

?name:???‘zhangsan?\n?lisi’:輸出;zhangsan?\n??lisi


  • 對象、Map(屬性和值)(鍵值對)

k: v:在下一行來寫對象的屬性和值的關系;注意縮進

?friends:
? ? ?lastName: zhangsan
? ? ?age: 20

行內寫法:

?friends:?{lastName:?zhangsan,age:?18}


  • 數(shù)組(List、Set)

用- 值表示數(shù)組中的一個元素

?pets:
? - cat
? - dog
? - pig

行內寫法

?pets:?[cat,dog,pig]


(5)@value獲取配置文件屬性

在application.yml中配置person,name為小明,年齡為18

?server:
? ?port: 8085
?
?person:
? ?name: 小明
? ?age: 18

在我們的HelloController中用@value來獲取配置屬性,

?@RestController
?public class HelloController {
?
? ? ?@Value("${person.name}")
? ? ?String name;
?
? ? ?@Value("${person.age}")
? ? ?Integer age;
?
? ? ?@RequestMapping("hello")
? ? ?public String hello(){
? ? ? ? ?return "Hello,"+name+",今年"+age+"歲";
? ? ?}
?}


重啟項目,訪問 http://localhost:8085/hello,結果如下:


(6)封裝配置信息使用方法

@value盡管可以封裝配置信息,但當相關連的配置信息太多時,我們可以對信息進行封裝


我們構建一個Person對象,里面包含了字符串、數(shù)字、布爾、日期、map、數(shù)組、對象等各種類型的屬性,正好可以對上面的yml語法進行驗證

?String lastName
?Integer age
?Boolean boss
?Date birth
?Map<String,Object> maps
?List<Object> lists
?Dog dog


1)application.yml 文件內容如下:

?person:
? ?lastName: 小明
? ?age: 18
? ?boss: false
? ?birth: 2017/12/12
? ?maps: {k1: v1,k2: 12}
? ?lists:
? ? ?- lisi
? ? ?- zhaoliu
? ?dog:
? ? ?name: 小狗
? ? ?age: 12


2)新建 Person.java 和 HelloController.java ,內容如下:


Person.java:

?package com.example.springboothello.bean;
?
?import lombok.Data;
?import org.springframework.boot.context.properties.ConfigurationProperties;
?import org.springframework.stereotype.Component;
?
?import java.util.Date;
?import java.util.List;
?import java.util.Map;
?
?@Component
?@Data
?@ConfigurationProperties(prefix = "person")
?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;
?}


HelloController.java:

?package com.example.springboothello.controller;
?
?import com.example.springboothello.bean.Person;
?import org.springframework.beans.factory.annotation.Autowired;
?import org.springframework.web.bind.annotation.RequestMapping;
?import org.springframework.web.bind.annotation.RestController;
?
?@RestController
?public class HelloController {
?
? ? ?@Autowired
? ? ?Person person;
?
? ? ?@RequestMapping("hello")
? ? ?public String hello(){
? ? ? ? ?return person.toString();
? ? ?}
?}


3)訪問 http://localhost:8080/hello 結果如下:


解釋:我們可以把配置信息封裝成一個類,首先在我們的屬性前加一個 person前綴,然后新建一個 Person類用來封裝這些信息,并用上兩個注解:


@Component:表明當前類是一個 Java Bean

@ConfigurationProperties(prefix = “person”):表示獲取前綴為person的配置信息


?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 為什么要學習SpringBoot java一直被人詬病的一點就是臃腫、麻煩。當我們還在辛苦的搭建項目時,可能Pyt...
    Sanarous閱讀 738評論 2 0
  • 一、系統(tǒng)要求 jdk1.8及以上maven3.2+ 二、開發(fā)第一個應用程序 1、創(chuàng)建一個maven工程 名為"sp...
    Albert_Yu閱讀 158評論 0 1
  • https://blog.csdn.net/qq_40147863/article/details/8419449...
    杜艷_66c4閱讀 339評論 0 0
  • 1.了解SpringBoot SpringBoot是Spring項目中的一個子工程,與我們所熟知的Spring-f...
    伍陸柒_閱讀 498評論 0 0
  • 16宿命:用概率思維提高你的勝算 以前的我是風險厭惡者,不喜歡去冒險,但是人生放棄了冒險,也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 8,207評論 0 4

友情鏈接更多精彩內容