最近有時間 回顧一下2年前用這個Springboot的點點滴滴 構建一個Springboot 工程
Springboot 是為了簡化Spring 應用的建立、執行、除錯、部署 等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的xml配置 我們只需要遵守規範 引入相關的依賴就可以輕易的搭建出一個WEB工程
在沒有Springboot之前 搭建一個普通SSM專案需要半個小時或者更久 有了Springboot 而一切去繁為簡
設計的目標
- java專案開發複雜度極其高
- java 專案的維護非常困難
- 為所有使用Spring框架的開發者提供一個更加簡單 快速入門的體驗 讓大量時間充分利用到業務上去
- 提供一些常見的功能 如 WEB容器 監控 健康 安全等功能
- 幹掉XML 遵守規範 開箱即用
- Spring 推出微服務實現的兩個重要開發框架 Springboot /SpringCloud
前提
- Springboot 之所以慢慢可以火遍全世界 是因為在springboot 中使用的大量註解還是之前Spring所提供的註解
- 那麼這一點讓所有開發者幾乎可以零適應進行完整過度
- SpringBoot 為我們提供了一系列的依賴包,所以需要構建工具的支援:Maven 或 Gradle。由於本人更習慣使用Maven
- 所以 後續案例都是基於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