1. 程式人生 > >最近有時間 回顧一下2年前用這個Springboot的點點滴滴 構建一個Springboot 工程

最近有時間 回顧一下2年前用這個Springboot的點點滴滴 構建一個Springboot 工程

Springboot 是為了簡化Spring 應用的建立、執行、除錯、部署  等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的xml配置 我們只需要遵守規範 引入相關的依賴就可以輕易的搭建出一個WEB工程  

  在沒有Springboot之前 搭建一個普通SSM專案需要半個小時或者更久 有了Springboot 而一切去繁為簡 

設計的目標 

  1.       java專案開發複雜度極其高
  2.       java 專案的維護非常困難
  3.      為所有使用Spring框架的開發者提供一個更加簡單 快速入門的體驗 讓大量時間充分利用到業務上去
  4.       提供一些常見的功能  如 WEB容器  監控 健康  安全等功能 
  5.       幹掉XML 遵守規範 開箱即用  
  6.       Spring 推出微服務實現的兩個重要開發框架 Springboot /SpringCloud

前提

  1.      Springboot 之所以慢慢可以火遍全世界 是因為在springboot 中使用的大量註解還是之前Spring所提供的註解
  2.  那麼這一點讓所有開發者幾乎可以零適應進行完整過度 
  3.      SpringBoot 為我們提供了一系列的依賴包,所以需要構建工具的支援:MavenGradle。由於本人更習慣使用Maven
  4. 所以 後續案例都是基於Maven 與 IntelliJ IDEA,同時這裡是基於最新的SpringBoot2編寫

建立專案

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

點選File -> Project

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

  選擇Spring Initializr

到這一步選擇的時候,如圖中選項的是Spring Initializr(官方的構建外掛,需要聯網),第二個是自己選擇Maven構建。

第三個是自己選擇 Gradle 構建  ,第四個自己去https://start.spring.io 網站裡面下載 。這裡直接選用外掛構造專案 

   點選next 出現 填寫專案基本資訊

  • Group: 組織ID,一般分為多個段,這裡我只說兩段,第一段為域,第二段為公司名稱。域又分為 org、com、cn等等,

  • 其中 org為非營利組織,com為商業組織。如阿里、淘寶(com.alibaba/com.tenxun/com.baidu)

  • Artifact: 唯一識別符號,一般是專案名稱

選擇包

 Spring Initializr 為我們提供了很多的選項 不同的選項有不同的作用 在初期我們只需要依賴Web ---->Web 就可以了

 選擇好了依賴包之後點選Next----Finish

    

目錄結構 

- src

        -main

            -java

                    -package

                                                  

                        -SpringbootApplication    #主函式,啟動類,執行它如果運行了 Tomcat、Jetty、Undertow 等容器

                      -resouces

                             - statics     #存放靜態資源 js/css/images 等

                              - templates  #存放 html 模板檔案

                               - application.yml       #主要的配置檔案,SpringBoot啟動時候會自動載入application.yml/application.properties  

                                   -test  #測試檔案存放目錄

                         # pom.xml 檔案是Maven構建的基礎,裡面包含了我們所依賴JAR和Plugin的資訊

- pom

pom.xml 依賴 

因為使用Spring Initializr 外掛 所以如下的配置都不需要我們自己去寫啦  需要注意的是版本的選擇 穩定版本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.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

               <modelVersion>4.0.0</modelVersion>


               <groupId>com.hema</groupId>

               <artifactId>demo1</artifactId>

               <version>0.0.1-SNAPSHOT</version>

               <packaging>jar</packaging>


               <name>demo1</name>

               <description>Springboot 之旅</description>

                <!--版本採用的是最新的 2.0.1.RELEASE TODO 開發中請記得版本一定要選擇 RELEASE 哦 -->

               <parent>

                      <groupId>org.springframework.boot</groupId>

                      <artifactId>spring-boot-starter-parent</artifactId>

                      <version>2.1.0.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.hema.demo1;


import org.springframework.boot.CommandLineRunner;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.context.ApplicationContext;

import org.springframework.context.annotation.Bean;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.ResponseBody;


import java.util.Arrays;





/*

在之前專案有些是使用這個註解 開啟自動配置

@EnableAutoConfiguration

使用@EnableAutoConfiguration註解時,

必須得配置@ComponentScan(basePackages = "com.example.web, com.example.service"),

才能掃描service及web下 的類,並進行呼叫

但是現在官方推薦的使用這個註解

@SpringBootApplication

使用@SpringbootApplication註解 ,

可以解決根類或者配置類(我自己的說法,就是main所在類)頭上註解過多的問題,一個@SpringbootApplication相當於

@Configuration,  @EnableAutoConfiguration和 @ComponentScan,並具有他們的預設屬性值

*

* */

@SpringBootApplication

@Controller

public class Demo1Application {


    public static void main(String[] args) {

        SpringApplication.run(Demo1Application.class, args);

    }


    @GetMapping("/home")

    @ResponseBody

    public String home(){

        return "第一個Springboot 程式碼";

    }


    /****

     * 來看看 SpringBoot 預設為我們提供的 Bean名稱和多少個Bean

     * @param ctx

     * @return

     */

    @Bean

    public CommandLineRunner commandLineRunner(ApplicationContext ctx){

        return args -> {

            System.out.println("來看看 SpringBoot 預設為我們提供的 Bean:");

            String[] beanNames = ctx.getBeanDefinitionNames();

            Arrays.sort(beanNames);

            System.out.println("SpringBoot 預設為我們提供"+beanNames.length+"個的Bean");

            Arrays.stream(beanNames).forEach(System.out::println);

        };

    }

}

 

修改Springboot預設埠 預設埠是8080  

我這裡使用的是傳統配置 application.properties 也可以使用 application.yml

     附上yml配置方式

@RestController = @Controller+@ResponseBody 通過原始碼可以看到結果

在瀏覽器上輸入 http://localhost/demo:8989

出現這個 說明springboot 第一個demo 成功跑起來了  喜歡的麻煩 githua 上點個小星星

githua  程式碼如下 https://github.com/zhouwei520/Springboot/tree/master/demo