springboot學習筆記:2.搭建你的第一個springboot應用

 springboot

1.開發環境

(推薦):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


2.開始咱們的第一個springboot項目

本節目標:構造第一個springboot入門web項目,經過三種方式運行啓動;並經過瀏覽器獲得服務器反饋結果;git

步驟:github

2.1.驗證本機的jdk版本和mvn版本

確保在jdk1.8和maven3.2+;web

2.2.建立項目(使用springboot官方推薦的建立方式——spring initializr):

進入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中,這塊往後再婊;

2.3項目詳解

2.3.1詳解pom.xml

咱們把目光先集中在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

spring-boot-starter

Core starter, including auto-configuration support, logging and YAML

核心Spring Boot starter,包括自動配置支持,日誌和YAML

Pom

spring-boot-starter-activemq

Starter for JMS messaging using Apache ActiveMQ

Pom

spring-boot-starter-amqp

Starter for using Spring AMQP and Rabbit MQ

對"高級消息隊列協議"的支持,經過 spring-rabbit  實現

Pom

spring-boot-starter-aop

Starter for aspect-oriented programming with Spring AOP and AspectJ

對面向切面編程的支持,包括 spring-aop  和AspectJ

Pom

spring-boot-starter-artemis

Starter for JMS messaging using Apache Artemis

Pom

spring-boot-starter-batch

Starter for using Spring Batch

對Spring Batch的支持,包括HSQLDB數據庫

Pom

spring-boot-starter-cache

Starter for using Spring Framework’s caching support

Pom

spring-boot-starter-cloud-connectors

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)服務的鏈接

Pom

spring-boot-starter-data-cassandra

Starter for using Cassandra distributed database and Spring Data Cassandra

Pom

spring-boot-starter-data-cassandra-reactive

Starter for using Cassandra distributed database and Spring Data Cassandra Reactive

Pom

spring-boot-starter-data-couchbase

Starter for using Couchbase document-oriented database and Spring Data Couchbase

Pom

spring-boot-starter-data-couchbase-reactive

Starter for using Couchbase document-oriented database and Spring Data Couchbase Reactive

Pom

spring-boot-starter-data-elasticsearch

Starter for using Elasticsearch search and analytics engine and Spring Data Elasticsearch

對Elasticsearch搜索和分析引擎的支持,包括 spring-data-elasticsearch

Pom

spring-boot-starter-data-jpa

Starter for using Spring Data JPA with Hibernate

對"Java持久化API"的支持,包括 spring-data-jpa  , spring-orm  和Hibernate

Pom

spring-boot-starter-data-ldap

Starter for using Spring Data LDAP

Pom

spring-boot-starter-data-mongodb

Starter for using MongoDB document-oriented database and Spring Data MongoDB

對MongoDB NOSQL數據庫的支持,包括 spring-data-mongodb

Pom

spring-boot-starter-data-mongodb-reactive

Starter for using MongoDB document-oriented database and Spring Data MongoDB Reactive

Pom

spring-boot-starter-data-neo4j

Starter for using Neo4j graph database and Spring Data Neo4j

Pom

spring-boot-starter-data-redis

Starter for using Redis key-value data store with Spring Data Redis and the Lettuce client

Pom

spring-boot-starter-data-redis-reactive

Starter for using Redis key-value data store with Spring Data Redis reactive and the Lettuce client

Pom

spring-boot-starter-data-rest

Starter for exposing Spring Data repositories over REST using Spring Data REST

對經過REST暴露Spring Data倉庫的支持,經過 spring-data-rest-webmvc  實現

Pom

spring-boot-starter-data-solr

Starter for using the Apache Solr search platform with Spring Data Solr

對Apache Solr搜索平臺的支持,包括 spring-data-solr

Pom

spring-boot-starter-freemarker

Starter for building MVC web applications using FreeMarker views

對FreeMarker模板引擎的支持

Pom

spring-boot-starter-groovy-templates

Starter for building MVC web applications using Groovy Templates views

對Groovy模板引擎的支持

Pom

spring-boot-starter-hateoas

Starter for building hypermedia-based RESTful web application with Spring MVC and Spring HATEOAS

對基於HATEOAS的RESTful服務的支持,經過 spring-hateoas  實現

Pom

spring-boot-starter-integration

Starter for using Spring Integration

對普通 spring-integration  模塊的支持

Pom

spring-boot-starter-jdbc

Starter for using JDBC with the Tomcat JDBC connection pool

對JDBC數據庫的支持

Pom

spring-boot-starter-jersey

Starter for building RESTful web applications using JAX-RS and Jersey. An alternative to spring-boot-starter-web

對Jersey RESTful Web服務框架的支持

Pom

spring-boot-starter-jooq

Starter for using jOOQ to access SQL databases. An alternative to spring-boot-starter-data-jpa or spring-boot-starter-jdbc

Pom

spring-boot-starter-json

Starter for reading and writing json

Pom

spring-boot-starter-jta-atomikos

Starter for JTA transactions using Atomikos

對JTA分佈式事務的支持,經過Atomikos實現

Pom

spring-boot-starter-jta-bitronix

Starter for JTA transactions using Bitronix

對JTA分佈式事務的支持,經過Bitronix實現

Pom

spring-boot-starter-jta-narayana

Spring Boot Narayana JTA Starter

Pom

spring-boot-starter-mail

Starter for using Java Mail and Spring Framework’s email sending support

對 javax.mail  的支持

Pom

spring-boot-starter-mustache

Starter for building web applications using Mustache views

對Mustache模板引擎的支持

Pom

spring-boot-starter-quartz

Spring Boot Quartz Starter

Pom

spring-boot-starter-security

Starter for using Spring Security

對 spring-security  的支持

Pom

spring-boot-starter-test

Starter for testing Spring Boot applications with libraries including JUnit, Hamcrest and Mockito

Pom

spring-boot-starter-thymeleaf

Starter for building MVC web applications using Thymeleaf views

對Thymeleaf模板引擎的支持,包括和Spring的集成

Pom

spring-boot-starter-validation

Starter for using Java Bean Validation with Hibernate Validator

Pom

spring-boot-starter-web

Starter for building web, including RESTful, applications using Spring MVC. Uses Tomcat as the default embedded container

對全棧web開發的支持,包括Tomcat和 spring-webmvc

Pom

spring-boot-starter-web-services

Starter for using Spring Web Services

Pom

spring-boot-starter-webflux

Starter for building WebFlux applications using Spring Framework’s Reactive Web support

Pom

spring-boot-starter-websocket

Starter for building WebSocket applications using Spring Framework’s WebSocket support

對WebSocket開發的支持

Pom

除了應用程序的starters,下面的starters能夠用於添加生產準備的特性:

Table 13.2. Spring Boot production starters

Name Description Pom

spring-boot-starter-actuator

Starter for using Spring Boot’s Actuator which provides production ready features to help you monitor and manage your application

添加生產準備特性,好比指標和監控

Pom

最後,Spring Boot包含一些可用於排除或交換具體技術方面的starters。

Table 13.3. Spring Boot technical starters

Name Description Pom

spring-boot-starter-jetty

Starter for using Jetty as the embedded servlet container. An alternative to spring-boot-starter-tomcat

導入Jetty HTTP引擎(做爲Tomcat的替代)

Pom

spring-boot-starter-log4j2

Starter for using Log4j2 for logging. An alternative to spring-boot-starter-logging

對Log4J日誌系統的支持

Pom

spring-boot-starter-logging

Starter for logging using Logback. Default logging starter

導入Spring Boot的默認日誌系統(Logback)

Pom

spring-boot-starter-reactor-netty

Starter for using Reactor Netty as the embedded reactive HTTP server.

Pom

spring-boot-starter-tomcat

Starter for using Tomcat as the embedded servlet container. Default servlet container starter used by spring-boot-starter-web

導入Spring Boot的默認HTTP引擎(Tomcat)

Pom

spring-boot-starter-undertow

Starter for using Undertow as the embedded servlet container. An alternative to spring-boot-starter-tomcat

導入Undertow HTTP引擎(做爲Tomcat的替代)

Pom

 使用maven插件用來打包springboot項目

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

 

 

 2.3.2代碼詳解:

項目啓動類(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來替代以上三個註解,簡化程序的配置;

2.3.3.最後咱們本身添加controller包,添加一個TestController.java,接受rest請求:

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.4.1使用main啓動類啓動:

 

看到這樣就證實已經順利啓動了;

 

 

 

 2.4.2使用mvn spring-boot:run」在命令行啓動;

2.4.3使用mvn package打成可執行jar;使用java -jar啓動;

mvn clean ;mvn build; mvn package;

打包後,命令行啓動:

 

 


 

OK,今天的入門咱們就一塊兒作到這裏;後續會同你們共同探討不少springboot的實用教程和案例;文章中有什麼問題或者想法歡迎老鐵們吐槽和我溝通;我會及時糾正錯誤,改進教程的品質;

作程序須要靜心,紮紮實實作技術;不忘初心,腳踏實地,就醬。

 

 

相關文章
相關標籤/搜索