(推薦):jdk1.8+Maven(3.2+)+Intellij IDEA+windows10;html
說明:前端
jdk:springboot官方說的很明確,到目前版本的springboot(1.5.9),官方指定要求jdk1.8以上;vue
依賴包管理:能夠經過拷貝jar文件的方式管理依賴,但官方也推薦使用Apache Maven 3.2或更高版本等構件工具;java
開發工具:我的推薦使用IDEA,功能很強大,使用流暢度和方便性較好;react
本節目標:構造第一個springboot入門web項目,經過三種方式運行啓動;並經過瀏覽器獲得服務器反饋結果;git
步驟:github
確保在jdk1.8和maven3.2+;web
進入https://start.spring.io/,選擇要使用的springboot版本號,這裏使用1.5.9,填寫好項目組信息,在Search for dependencies中搜索web並選中;redis
選擇生成項目後自動下載chapter01.zip;解壓chapter01.zip後,使用IDEA打開chapter01項目文件夾;spring
此外,還能夠在IDEA中File-new-Project,選擇Spring Initializr,在IDEA中建立springboot項目;
(注意:此處若是你的項目報錯,請確保該項目的maven配置正確;IDEA的話打開,正確指定好使用的maven是3.2以上版本便可:
)
項目正常打開後的目錄結構以下:
Chapter01Application.java 內部包含main函數,是springboot項目的啓動類;
Chapter01ApplicationTests.java 測試類
pom.xml 依賴管理文件
application.properties 配置文件,初次生成的時候是空的,之後能夠在裏面填寫配置項;
有的同窗到這裏有些懵,以往java web項目不是有個WebRoot文件夾嗎,這裏我明明配置的就是web項目,爲何會是這麼個目錄結構呢?
這裏其實就是springboot提倡的習慣,之後開發springboot,要習慣使用模板,摒棄jsp的前端方案(若是你執意要使用jsp的話也是能夠的,咱們後文會介紹);如今咱們項目組開發,基本全是freemarker,並且基本上所有都是請求rest 接口,這樣先後端徹底分離;避免了在jsp中寫java代碼的陋習(記得之前作過一個H5支付頁面,用jsp寫的,後來項目升級,前端用vue.js,結果後臺須要從新寫n多接口);之後項目想更換前端方案也不會是坑;因此要接受並學習使用模板;要完全執行先後端分離的思想;
之前使用jsp時,你會把jsp放在WEB-INF下面;之後使用模板,你須要把模板全放到例如resources-templates下面去;
sprinboot到底使用什麼模板,因人而異;我我的喜歡freemarker;
以freemarker爲例,模板.ftl文件會被放到resources.templates中,其餘靜態資源文件會被放到resources-static中,這塊往後再婊;
咱們把目光先集中在maven的pom.xml中,看看官方生成的這個依賴結構:
<?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>com.zjt</groupId> <artifactId>chapter01</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>chapter01</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <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>
是否是看上去很簡單,其實裏面大有玄機;
首先,注意打包文件格式是jar文件,這是由於,sprinboot使用mvn插件能夠打包成可執行的內嵌web容器的jar,這對於發佈微服務是很方便的;若是想打成war包和其餘項目一塊兒集成在tomcat中,也是能夠的,這個往後再表;
構建項目:
方法1:父依賴(spring initializr默認構建方式):
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository -->
</parent>
此處,咱們發現springboot官方默認使用父依賴的方式來構件springboot項目。ctrl+左鍵點擊跟蹤spring-boot-starter-parent,會發現其實她繼承了spring-boot-dependencies;包括往後咱們經常使用的配置文件的過濾等
總結起來,能夠說spring-boot-starter-parent,有以下特性:
默認編譯級別爲Java 1.8 源碼編碼爲UTF-8 一個依賴管理節點,容許你省略普通依賴的 <version> 標籤,繼承自 spring-boot-dependencies POM。 合適的資源過濾 合適的插件配置(exec插件,surefire,Git commit ID,shade) 針對 application.properties 和 application.yml 的資源過濾
只要指定了父依賴的version,那麼其相關的其餘自動依賴均無需再指定版本號,springboot已經自動管理好了最佳的依賴配置,如圖:
這也是springboot的方便之處;
除非你手動覆蓋本身的項目中的屬性,來達到修改某個依賴的版本號的目的;
方法2:使用import來引入spring-boot-dependencies
若是不想使用父依賴的方式,能夠直接經過使用一個 scope=import 的依賴來構建:
<dependencyManagement> <dependencies> <dependency> <!-- Import dependency management from Spring Boot --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.0.0.BUILD-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Starter POMS :
下面咱們看一下pom.xml中的依賴模塊,發現有一些頗有特點的spring-boot-starter-*,官方學名叫starter poms;
springboot使用各類starter poms來實現組件的熱插拔;每個starter pom就是一個能夠包含到應用中的一個方便的依賴關係描述符集合;能夠獲取全部Spring及相關技術的一站式服務,而不須要翻閱示例代碼,拷貝粘貼大量的依賴描述符。
例如,若是你想使用Spring和JPA進行數據庫訪問,只須要在你的項目中包含 spring-boot-starter-data-jpa 依賴,而後你就能夠開始了。
下面的應用程序starters是Spring Boot在 org.springframework.boot 組下提供的,咱們能夠方便地查找你的項目須要的其餘組件的starter,直接添加便可自動加載依賴:
Table 13.1. Spring Boot application starters
Name | Description | Pom |
---|---|---|
Core starter, including auto-configuration support, logging and YAML 核心Spring Boot starter,包括自動配置支持,日誌和YAML |
||
Starter for JMS messaging using Apache ActiveMQ |
||
Starter for using Spring AMQP and Rabbit MQ 對"高級消息隊列協議"的支持,經過 spring-rabbit 實現 |
||
Starter for aspect-oriented programming with Spring AOP and AspectJ 對面向切面編程的支持,包括 spring-aop 和AspectJ |
||
Starter for JMS messaging using Apache Artemis |
||
Starter for using Spring Batch 對Spring Batch的支持,包括HSQLDB數據庫 |
||
Starter for using Spring Framework’s caching support |
||
Starter for using Spring Cloud Connectors which simplifies connecting to services in cloud platforms like Cloud Foundry and Heroku 對Spring Cloud Connectors的支持,簡化在雲平臺下(例如,Cloud Foundry 和Heroku)服務的鏈接 |
||
Starter for using Cassandra distributed database and Spring Data Cassandra |
||
Starter for using Cassandra distributed database and Spring Data Cassandra Reactive |
||
Starter for using Couchbase document-oriented database and Spring Data Couchbase |
||
Starter for using Couchbase document-oriented database and Spring Data Couchbase Reactive |
||
Starter for using Elasticsearch search and analytics engine and Spring Data Elasticsearch 對Elasticsearch搜索和分析引擎的支持,包括 spring-data-elasticsearch |
||
Starter for using Spring Data JPA with Hibernate 對"Java持久化API"的支持,包括 spring-data-jpa , spring-orm 和Hibernate |
||
Starter for using Spring Data LDAP |
||
Starter for using MongoDB document-oriented database and Spring Data MongoDB 對MongoDB NOSQL數據庫的支持,包括 spring-data-mongodb |
||
Starter for using MongoDB document-oriented database and Spring Data MongoDB Reactive |
||
Starter for using Neo4j graph database and Spring Data Neo4j |
||
Starter for using Redis key-value data store with Spring Data Redis and the Lettuce client |
||
Starter for using Redis key-value data store with Spring Data Redis reactive and the Lettuce client |
||
Starter for exposing Spring Data repositories over REST using Spring Data REST 對經過REST暴露Spring Data倉庫的支持,經過 spring-data-rest-webmvc 實現 |
||
Starter for using the Apache Solr search platform with Spring Data Solr 對Apache Solr搜索平臺的支持,包括 spring-data-solr |
||
Starter for building MVC web applications using FreeMarker views 對FreeMarker模板引擎的支持 |
||
Starter for building MVC web applications using Groovy Templates views 對Groovy模板引擎的支持 |
||
Starter for building hypermedia-based RESTful web application with Spring MVC and Spring HATEOAS 對基於HATEOAS的RESTful服務的支持,經過 spring-hateoas 實現 |
||
Starter for using Spring Integration 對普通 spring-integration 模塊的支持 |
||
Starter for using JDBC with the Tomcat JDBC connection pool 對JDBC數據庫的支持 |
||
Starter for building RESTful web applications using JAX-RS and Jersey. An alternative to 對Jersey RESTful Web服務框架的支持 |
||
Starter for using jOOQ to access SQL databases. An alternative to |
||
Starter for reading and writing json |
||
Starter for JTA transactions using Atomikos 對JTA分佈式事務的支持,經過Atomikos實現 |
||
Starter for JTA transactions using Bitronix 對JTA分佈式事務的支持,經過Bitronix實現 |
||
Spring Boot Narayana JTA Starter |
||
Starter for using Java Mail and Spring Framework’s email sending support 對 javax.mail 的支持 |
||
Starter for building web applications using Mustache views 對Mustache模板引擎的支持 |
||
Spring Boot Quartz Starter |
||
Starter for using Spring Security 對 spring-security 的支持 |
||
Starter for testing Spring Boot applications with libraries including JUnit, Hamcrest and Mockito |
||
Starter for building MVC web applications using Thymeleaf views 對Thymeleaf模板引擎的支持,包括和Spring的集成 |
||
Starter for using Java Bean Validation with Hibernate Validator |
||
Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container 對全棧web開發的支持,包括Tomcat和 spring-webmvc |
||
Starter for using Spring Web Services |
||
Starter for building WebFlux applications using Spring Framework’s Reactive Web support |
||
Starter for building WebSocket applications using Spring Framework’s WebSocket support 對WebSocket開發的支持 |
除了應用程序的starters,下面的starters能夠用於添加生產準備的特性:
Table 13.2. Spring Boot production starters
Name | Description | Pom |
---|---|---|
Starter for using Spring Boot’s Actuator which provides production ready features to help you monitor and manage your application 添加生產準備特性,好比指標和監控 |
最後,Spring Boot包含一些可用於排除或交換具體技術方面的starters。
Table 13.3. Spring Boot technical starters
Name | Description | Pom |
---|---|---|
Starter for using Jetty as the embedded servlet container. An alternative to 導入Jetty HTTP引擎(做爲Tomcat的替代) |
||
Starter for using Log4j2 for logging. An alternative to 對Log4J日誌系統的支持 |
||
Starter for logging using Logback. Default logging starter 導入Spring Boot的默認日誌系統(Logback) |
||
Starter for using Reactor Netty as the embedded reactive HTTP server. |
||
Starter for using Tomcat as the embedded servlet container. Default servlet container starter used by 導入Spring Boot的默認HTTP引擎(Tomcat) |
||
Starter for using Undertow as the embedded servlet container. An alternative to 導入Undertow HTTP引擎(做爲Tomcat的替代) |
使用maven插件用來打包springboot項目:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins>
</build>
項目啓動類(Chapter01Application.java):
package com.zjt.chapter01; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Chapter01Application { public static void main(String[] args) { SpringApplication.run(Chapter01Application.class, args); } }
上述Chapter01Application.java爲springboot的main啓動類;
這裏咱們開始學習到了springboot啓動類中的最重要的一個註解:@SpringBootApplication
注意:
1.項目啓動類,根據官方建議,必定要位於非 default package下;也就是說這個啓動類必定要含有package的聲明;建議使用反轉域名;如com.zjt.learn;
2.官方建議,main應用類要放在其餘類上面的根包(root package)中;
3.@SpringBootApplication該註解在基於上述1和2兩點下,纔可使用(習慣優於配置);
因爲該註解至關於:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
_______________華麗的小分割__________________
@SpringBootConfiguration:說明當前類是一個配置類,就像xml配置文件,而如今是用java配置文件,效果是同樣的,它會被@ComponentScan掃描到。
@EnableAutoConfiguration(開啓自動配置,springboot的靈魂所在)註解一般都放到main所在類的上面,當main所在類位於root package的時候,這樣@EnableAutoConfiguration能夠從逐層的往下搜索各個加註解的類,例如,你正在編寫一個JPA程序(若是你的pom裏進行了配置的話),spring會自動去搜索加了@Entity註解的類,並進行調用;
@ComponentScan:用註解配置實現自動掃描,默認會掃描當前包和全部子包,和xml配置自動掃描效果同樣;
___________________________________________
因此咱們的springboot很貼心的爲咱們準備了Springboot 提供了統一的註解@SpringBootApplication來替代以上三個註解,簡化程序的配置;
package com.zjt.chapter01.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @RequestMapping("/hello") public String Hello(){ return "hello world"; } }
看到這樣就證實已經順利啓動了;
2.4.2使用mvn spring-boot:run」在命令行啓動;
2.4.3使用mvn package打成可執行jar;使用java -jar啓動;
mvn clean ;mvn build; mvn package;
打包後,命令行啓動:
OK,今天的入門咱們就一塊兒作到這裏;後續會同你們共同探討不少springboot的實用教程和案例;文章中有什麼問題或者想法歡迎老鐵們吐槽和我溝通;我會及時糾正錯誤,改進教程的品質;
作程序須要靜心,紮紮實實作技術;不忘初心,腳踏實地,就醬。