文章目錄
- SpringBoot入門
- 一、關于:約定大于配置
- 二、創建SpringBoot項目---起步案例
- 創建SpringBoot項目
- 案例
- 創建項目方式2:通過aliyun網站創建
- 創建項目方式3---基于官方地址創建
- 三、配置項目
- 項目結構
- 自定義配置
- 四、SpringBoot原理(重點)
- 4.1.starter
- 4.2、SpringBoot應用的POM文件(重要)
- 4.3、Java配置方式
- 4.4、SpringBoot自動配置
- 4.5、全局配置文件
- 五、多環境配置
什么是框架?
框架就是軟件的半成品。

SpringBoot入門
一、關于:約定大于配置
SpringBoot采用了習慣優于配置/約定大于配置的理念快速的搭建項目的開發環境,我們無需或者進行很少的相關Spring配置就能夠快速的將項目運行起來。
即盡可能的減少配置,用約定去做配置,官方提供了很多約定,我們只需要在約定的地方配置即可。
什么是約定?如何理解?
比如我們的javaweb項目,配置文件必須放在resouces文件下,前端代碼必須放在webapps文件夾下 ,java代碼放在Java文件夾下。把對應的文件放在指定的位置就不用額外的配置了,springboot也是這種約定配置。
二、創建SpringBoot項目—起步案例
創建SpringBoot項目
創建的時候網址換一下更快,一般不會出問題
https://start.aliyun.com
過程需要網絡暢通
等待項目加載完成。項目(就是web項目)結構:
如果剛進去是報錯頁面,就是maven沒有正確添加,正確配置一下Maven就可以了
案例
package com.situ.bean;import lombok.*;import java.time.LocalDate;//使用lombok:在pom.xml里面引入依賴,添加getter和setter方法
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToString
public class Student {//數據模型(每一行student的數據存一行),用來保存數據://屬性的名字盡量要和數據庫里面的名字對應,同時遵循java的命名規范private Integer id;private String stuId;private String name;}
package com.situ.controller;import com.situ.bean.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import java.beans.ConstructorProperties;@Controller //表示這是一個控制器類
@RequestMapping("/test") //為這個控制器類配置一個地址public class TestController {@ResponseBody //能把對象轉成Json返回給前端@GetMapping("/hello")//為這個方法配置一個地址public Student hello(){//這個方法用于創建了Student對象,并添加@ResponseBody注解,把對象轉成Json返回給前端:Student zs = new Student(1, "22120", "zs");return zs;//關于這個方法的訪問:在main方法里面啟動程序,然后在地址欄輸入localhost:8080/test/hello}}
示例二:
在瀏覽器頁面輸入的參數,我們能夠接收,接收參數并進行封裝成對象,然后將對象返回json形式 :
package com.situ.controller;import com.situ.bean.Student;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller//代表這是一個控制器
@RequestMapping("/test") //配置地址
public class Test2Controller {//現在要求在瀏覽器頁面輸入的參數,我們能夠接收,接收參數并進行封裝成對象,然后將對象返回json形式 :@ResponseBody@GetMapping("/hello2") //給這個方法配置地址public Student test2(Student student){//能自動將前端發過來的數據映射到對象的屬性,前提:前端傳參的參數名和屬性名要完全一致。System.out.println(student);return student;//將返回數據轉成Json}
}
創建項目方式2:通過aliyun網站創建
網址:https://start.aliyun.com/
添加我們所需要的東西就行:比如:
獲取源碼
解壓縮就能看見這是一個web項目,用我們的IDEA打開就行了。是可以正常啟動的。
創建項目方式3—基于官方地址創建
也可以通過默認地址創建—基于官方地址創建。版本是3.x,但是經常出問題,所以有人發明了start.springboot.io
,可以將地址換成這個,和官網的其實一樣
同樣也能通過官網直接創建項目
三、配置項目
項目結構
注意:我們自定義的代碼、包和啟動類是平級的,我們寫SpringBoot項目,Java代碼一定要寫在和啟動類平級或者寫在和啟動類平級的包里面,這樣才能生效。
寫在其它地方也是可以的,但是需要額外配置很多東西。
靜態資源:html/css/js/圖片… 放在static文件夾下。
templates:不能放jsp(圖片寫錯了),能放thymeleaf。是放動態資源的
自定義配置
# 應用服務 WEB 訪問端口tomcat的端口號
server.port=8080# 自定義配置:添加上下文路徑:
server.servlet.context-path=/start
#那么項目的訪問路徑就變成了:localhost:8080/start/...
#目前就是變成了:localhost:8080/start/test/hello
四、SpringBoot原理(重點)
為什么能簡化整合(不用寫那么多配置)?為什么坐標不用寫版本?
4.1.starter
一個starter就是一個開發場景的支持( 依賴(jar包) + 配置)。SpringBoot為我們提供了簡化企業級開發絕大多數場景的支持(提供了多個starter),
我們在進行項目開發的過程中只需引入對應的starter(創建SpringBoot應用時可選擇),
相關的依賴和配置就會被內置到項目中(消除人工配置)。
原來的spring和其它框架整合,需要寫很多配置,現在有了starter,starter里面自帶配置,就不用自己寫了。
這個配置寫了,只是不用我們程序員自己寫了,由官方開發人員寫好了。
也就是說用springboot去整合其他的框架的時候,我們要去找對應的starter,有了starter,jar包和配置都有了。通用的約定配置他可以寫,但是一些特定的比如連接數據庫的四大參數他不能寫 ,那這種就寫在了自定義配置部分。
4.1.1、starter依賴
一個starter依賴表示的不是一個依賴,而是某種開發環境所需的一組依賴
Spring Web — spring-boot-starter-web
MyBatis Framework — mybatis-spring-boot-starter
依賴:
4.1.2、starter配置
pom文件中引入的starter除了導入依賴,還引入了配置
配置用被@Configuration標注的配置類表示,配置在配置類中進行配置
配置類中有被@Bean標注的方法,用來生成特定的對象并讓SpringIOC容器進行管理
通過以上的操作,大部分配置用戶就不用自己進行配置了。
以后的開發中,如果需要用到哪個模塊,就去導入對應的starter。
配置:
4.2、SpringBoot應用的POM文件(重要)
以前都需要寫GAV坐標,現在我們都不需要寫GAV坐標了。其實GAV版本是有的,原因:
4.2.1、基于Spring官方服務器創建的SpringBoot應用
繼承spring-boot-starter-parent.pom
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- SpringBoot應用中的pom 繼承了spring-boot-starter-parent.pom --><!-- spring-boot-starter-parent.pom又繼承了spring-boot-dependencies.pom--><!-- 在spring-boot-dependencies.pom已經對主流的框架的版本進行了聲明 --><!-- 繼承父工程:就繼承父工程里面所有的配置--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.4</version><relativePath/> </parent></project>
引入了maven對springboot應用支持的插件spring-boot-maven-plugin<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><mainClass>tech.code2048.springboot.demo.SpringbootDemo1Application</mainClass><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins>
</build>
分析
pom工程繼承,繼承了父工程之后就能夠使用父工程中的“配置”;
我們自己創建的SpringBoot工程繼承自spring-boot-starter-parent這個父工程;
spring-boot-starter-parent繼承的spring-boot-dependencies;
spring-boot-dependencies里面有dependencyManagement。
dependencyManagement的作用?
1.聲明了相關jar包的版本(只是聲明,沒有導入的作用)
2.如果在pom.xml文件中引入了該jar包不指定版本,就使dependencyManagement聲明的版本。
3.如果聲明的版本不合適,就要在導入jar包的位置聲明自己需要的版本。
用來規定項目引入的依賴的版本;
如果項目的dependency標簽中沒有指定版本,那么就使用dependencyManagement中規定的版本;
dependencyManagement只是規定依賴的版本,并沒有引入依賴;
如果dependencyManagement中定義的版本不合適,就需要自己在依賴中手動指定版本去覆蓋。
4.2.2、基于Aliyun服務器創建的SpringBoot應用
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>tech.code2048</groupId><artifactId>01_springboot_start_aliyun</artifactId><version>1.0.0</version><name>01_springboot_start_aliyun</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.4.1</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
分析:
沒有繼承父工程;
直接定義dependencyManagement。
4.3、Java配置方式
如果我們需要在SpringBoot應用中整合一種新的開發場景,只需在pom.xml引入對應的starter即可
一個starter不僅包含依賴,還包含相應的配置,starter中包含的配置都是通過Java類實現的——Java配置方式
4.3.1、Spring版本發展
隨著Spring版本的迭代,配置方式也在發生變化Spring 1.x
所有的bean的配置只能通過xml完成
Spring 2.x
基于JDK1.5對注解的支持,Spring 2.x開始支持注解
企業開發中到底是用xml配置還是用注解?
對基礎配置、引用的第三方依賴中的配置使用xml完成:例如數據源配置
業務開發使用注解:例如controller、service
Spring 3.x
Spring開始提供基于Java的配置方式
Spring 4.x
xml、注解、Java
4.3.2、xml配置
<!--applicationContext.xml-->
<bean id="stu" class="tech.code2048.beans.Student"></bean>
<bean id="date" class="java.util.Date"></bean>
4.3.3、注解配置
@Component
public class Student{}
4.3.4、Java配置方式
創建配置類
@Configuration
public class SpringConfig{@Beanpublic Date getDate(){return new Date();}
}
4.4、SpringBoot自動配置
4.5、全局配置文件
SpringBoot針對不同的開發場景提供默認的屬性配置,如果默認的配置不能滿足開發的需要,我們需要對屬性配置進行修改
SpringBoot應用提供了一個全局配置文件application.properties用于進行自定義配置
全局配置文件支持兩種語法配置:
properties鍵值對配置
yaml語法的配置
4.5.1、基于properties配置
配置數據源 (key必須按照SpringBoot的要求)
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=admin123配置映射文件路徑及實體類的包名
mybatis.mapper-locations=classpath:mappers/*Mapper.xml
mybatis.type-aliases-package=tech.code2048.springboot.demo.entity
4.5.2、基于yaml配置
縮進原則:縮進必須有兩個空格,下一級必須比上一級有兩個空格。
值的前面必須有一個空格
spring:datasource:url: jdbc:mysql://localhost:3306/db_2mybatis?characterEncoding=utf-8driver-class-name: com.mysql.jdbc.Driverusername: rootpassword: admin123mybatis:mapper-locations: classpath:mappers/*Mapper.xmltype-aliases-package: tech.code2048.springboot.demo.entity
4.5.3、常用的全局配置
server:port: 9999servlet:context-path: /start
4.6、自定義Banner
在SpringBoot應用啟動的時候是有一個默認啟動圖案的。
這個默認圖案支持自定義配置
在resources目錄創建一個banner.txt
在banner.txt文件中定義圖案http://patorjk.com/software/taag/
五、多環境配置
開發
測試
生產