一起來學SpringBoot | 第一篇:構建第一個SpringBoot工程

  • 本文作者:唐亞峯

SpringBoot是爲了簡化Spring應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 WEB 工程

##更多幹貨:
SpringBoot系列博客目錄,含1.5.X版本和2.X版本

強烈推薦

分享一個大神的人工智能教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到人工智能的隊伍中來!http://www.captainbed.net

未接觸SpringBoot之前,搭建一個普通的WEB工程往往需要花費30分鐘左右,如果遇到點奇葩的問題耽擱的時間會更長一點,但自從用了SpringBoot後,真正體會到什麼叫分分鐘搭建一個WEB,讓我擁有更多的時間跟我的小夥伴們嘮嗑了。使用SpringBoot後發現一切是如此的簡單(還記得讀書那會被JAR包,xml支配的恐懼嗎,如今都可以說 good bye

設計的目標

  • 爲所有使用Spring的開發者提供一個更簡單,快速的入門體驗
  • 提供一些常見的功能、如監控、WEB容器,健康,安全等功能
  • 幹掉XML,遵循規範,開箱即用

前提

SpringBoot爲我們提供了一系列的依賴包,所以需要構建工具的支持:MavenGradle。由於本人更習慣使用**Maven所以後續案例都是基於MavenIntelliJ IDEA,同時這裏是基於最新的SpringBoot2編寫的哦...**

創建項目

初次接觸,我們先來看看如何創建一個Spring Boot項目,這裏以IntelliJ IDEA爲例,其他的IDE工具小夥伴們自行搜索創建方式。創建完項目後,各位小夥伴請認真、細心的對比下與傳統的WEB工程有何區別(如:目錄結構)。

點擊**File -> Project**

如果用過Eclipse/IDEA等工具的,對創建項目肯定不會陌生,但爲了照顧第一次使用的我貼上了圖文

第一步

選擇**Spring Initializr**

到這一步選擇的時候,如圖中選項的是Spring Initializr(官方的構建插件,需要聯網),第二個是自己選擇Maven構建,爲了更好的適合初學者,我們將在本章用插件構建

第二步

填寫項目基本信息

  • Group:組織ID,一般分爲多個段,這裏我只說兩段,第一段爲域,第二段爲公司名稱。域又分爲org、com、cn等等,其中org爲非營利組織,com爲商業組織。如阿里、淘寶(com.alibaba/com.taobao)
  • **Artifact:**唯一標識符,一般是項目名稱

第三步

選擇包

** Spring Initializr爲我們提供了很多的選項,不同的選項有不同的作用,在初期我們只需要依賴Web -> Web就可以了,選擇好依賴包之後點擊Next->Finish **


第四步

目錄結果

- src
    -main
        -java
            -package
                #主函數,啓動類,運行它如果運行了 Tomcat、Jetty、Undertow 等容器
                -SpringbootApplication    
        -resouces
            #存放靜態資源 js/css/images 等
            - statics
            #存放 html 模板文件
            - templates
            #主要的配置文件,SpringBoot啓動時候會自動加載application.yml/application.properties        
            - application.yml
    #測試文件存放目錄        
    -test
 # pom.xml 文件是Maven構建的基礎,裏面包含了我們所依賴JAR和Plugin的信息
- pom

pom.xml 依賴

因爲使用了**Spring Initializr插件,所以如下的配置都不需要我們自己去寫啦,需要注意的是版本要選擇RELEASE**,穩定版本BUG少

<?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.battcn</groupId>
    <artifactId>chapter1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>chapter1</name>
    <description>我的用第一個SpringBoot工程</description>

    <!--版本採用的是最新的 2.0.1.RELEASE TODO 開發中請記得版本一定要選擇 RELEASE 哦 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.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>
        <!-- 默認就內嵌了Tomcat 容器,如需要更換容器也極其簡單-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 測試包,當我們使用 mvn package 的時候該包並不會被打入,因爲它的生命週期只在 test 之內-->
        <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>

其它的依賴可以參考:官方文檔

主函數入口

**注意事項:**一個項目中切記不要出現多個main函數,否在在打包的時候spring-boot-maven-plugin將找不到主函數(主動指定打包主函數入口除外…

package com.winterchen;

import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;

/**
 * 我的第一個springboot程序
 * 其中 @RestController 等同於 (@Controller 與 @ResponseBody)
 */
@RestController
@SpringBootApplication
public class SpringBootStartApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootStartApplication.class, args);
    }

    @GetMapping("/demo1")
    public String demo1() {
        return "Hello Luis";
    }

    @Bean
    public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
        // 目的是
        return args -> {
            System.out.println("來看看 SpringBoot 默認爲我們提供的 Bean:");
            String[] beanNames = ctx.getBeanDefinitionNames();
            Arrays.sort(beanNames);
            Arrays.stream(beanNames).forEach(System.out::println);
        };
    }
}

初窺配置文件

從啓動日誌中可以發現,SpringBoot默認的端口是 8080 ,那麼如果端口被佔用了怎麼辦呢?不要慌,問題不大,配置文件分分鐘解決你的困擾…

2018-04-20 16:14:46.725  INFO 11184 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''

修改默認配置

# 默認的 8080 我們將它改成 9090 
server.port=9090
# 未定義上下文路徑之前 地址是 http://localhost:8080 定義了後 http://localhost:9090 你能在tomcat做的事情,配置文件都可以
server.servlet.context-path=/chapter1

在啓動一次看看日誌

2018-04-20 16:47:05.716  INFO 12108 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 9090 (http) with context path '/chapter1'

測試

啓動項目後直接訪問http://localhost:9090/chapter/demo1進行測試

拓展知識

自定義Banner

SpringBoot啓動的時候我們可以看到如下內容,這一塊其實是可以自定義的哦,而且在 2.X 版本中,它支持的格式從文本擴展到**banner.txt、banner.jpg、banner.gif、banner.jpeg等等,只需要在resouces**目錄下添加指定命名的文件即可

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.0.1.RELEASE)

總結

目前很多大佬都寫過關於**SpringBoot**的教程了,如有雷同,請多多包涵,本教程基於最新的spring-boot-starter-parent:2.0.1.RELEASE編寫,包括新版本的特性都會一起介紹…

說點什麼

springboot技術交流羣:681513531

個人博客:https://winterchen.com

全文代碼:https://github.com/WinterChenS/springboot-learning-experience

發佈了84 篇原創文章 · 獲贊 551 · 訪問量 129萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章