SpringBoot基本操作(一)——環境搭建及專案建立(有demo)
SpringBoot2.0筆記
本文使用idea工具構建Springboot2.0+SpringMvc+Thymeleaf+SpringDataJPA+MySql+Redis專案
此demo可直接下載執行,以下為具體建立專案過程步驟說明和遇到問題解決方法。
一、構建SpringBoot專案
1.使用idea建立Springboot專案,選擇SpringInitializr選好jdk版本點選下一步
2.填寫專案包名及java版本
3.勾選你需要的專案元件,Springboot版本我使用2.0
Lombok可以簡化程式碼量,提供註解方式代替重複性程式碼,非必須,用不用看情況,有時候很方便,新手不建議用
4.建立web專案所以勾選Web
5.模板語言勾選Thymeleaf,這個沒得說,springboot官方推薦,確實很好用,當然是指3.0版本,老版本效能有短板
6.資料庫持久化推薦使用JPA方式,MySQL看情況選擇
7.Nosql我這裡使用Redis,看你需要,可不勾選,後續需要時再引入
8.MQ可根據自己情況選擇,我這裡不需要,最後I/O需要一個發郵件的服務,不用的話也不需要勾選,可後續再引入
9.下一步填寫專案檔名稱
10.Finish後進入專案,然後漫長的等待一段時間後項目會構建完成
二、啟動SpringBoot專案
1.專案載入完畢之後開啟啟動器DemoApplication右鍵run可直接啟動專案,或者右上方直接啟動DemoApplication
2.不出意外的話可以直接啟動不會報錯,沒啥好說的,我列一下可能會出現的問題,這些問題基本都是由於前面勾選專案元件(即jpa,mysql等)時引入了需要啟動注入的一些依賴或資料來源缺失引起的,和Springboot版本也有很大的關係,以下報錯不一定會出現。
(1)啟動報錯:Failed to configure a DataSource: 'url' attribute is not specified and no embedd
問題原因:新專案未做相關資料來源配置, 啟動springboot找不到配置引起
解決辦法(選一即可):
① 啟動類DemoApplication加入註解@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
禁止自動載入資料來源配置
② 手動新增資料來源,在application.properties加入以下配置:
#資料來源
spring.datasource.url=jdbc:mysql://localhost:3306/demo_test?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
(2)啟動報錯:At least one JPA metamodel must be present!
問題原因:Springboot自動載入持久化bean,即自動載入jpa的bean造成
解決辦法(選一即可):
① 啟動類DemoApplication加上以下註解
@EnableAutoConfiguration(exclude={
JpaRepositoriesAutoConfiguration.class //禁止springboot自動載入持久化bean
})
② pom加入或更改jpa啟動包,按照以下格式
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
</exclusion>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.10.Final</version>
</dependency>
pom重新匯入就好了,啟動專案也不再報錯。
三、Hello World頁面顯示及Json資料回傳
1.增加一個測試控制層和頁面,新增測試類FirstController.java
package com.springboot.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
/**
* @ClassName: FirstController
* @Auther: zhangyingqi
* @Date: 2018/8/23 17:53
* @Description: 測試頁面跳轉
*/
@Controller
@RequestMapping(value="/first")
public class FirstController {
@RequestMapping(value="/view")
public String view(HttpServletRequest request){
return "/demoPage/firstPage";
}
}
2.新增測試頁面 firstPage.html
<!DOCTYPE html>
<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div>Hello World!</div>
</body>
</html>
3.目錄結構
4.到這裡啟動後就能訪問到測試頁面了,後面我需要加入統一日誌和統一返回格式處理,都是在真實開發環境下必須的,所以我也列出來
在com.springboot.demo.base.controller包下新建BaseController.java,用來提供日誌介面以及返回model的固定引數格式
package com.springboot.demo.base.controller;
import com.springboot.demo.base.utils.StateParameter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ui.ModelMap;
public abstract class BaseController{
protected final String success = StateParameter.SUCCESS;
protected final String fail = StateParameter.FAULT;
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
public ModelMap getModelMap(String status,Object data,String msg){
ModelMap modelMap=new ModelMap();
modelMap.put("status", status);
modelMap.put("data", data);
modelMap.put("msg", msg);
return modelMap;
}
}
在com.springboot.demo.base.utils包下新建StateParameter.java
package com.springboot.demo.base.utils;
public class StateParameter {
public final static String SUCCESS="1";
public final static String FAULT="0";
public final static String DATA="data";
public final static String STATE="state";
}
目錄結構如圖:
5.新增簡單日誌記錄,修改控制層程式碼,加入logger日誌記錄,新增back方法返回json資料,返回getModelMap傳入狀態值一般頁面js接收用來判斷操作成功或失敗,data引數下方為null,一般傳入想返回的資料內容如物件等,最後一個引數msg為提示資訊。
@Controller
@RequestMapping(value="/first")
public class FirstController extends BaseController{
@RequestMapping(value="/view")
public String view(HttpServletRequest request){
logger.info("進入測試頁面");
return "/demoPage/firstPage";
}
@RequestMapping(value="/back", method = RequestMethod.POST)
@ResponseBody
public ModelMap back(HttpServletRequest request){
logger.info("進入json測試頁面");
return getModelMap(StateParameter.SUCCESS, null, "請求成功");
}
}
開啟瀏覽器輸入:localhost:8080/first/view 測試頁面正常跳轉
開啟RESTClient瀏覽器外掛測試json資料返回正常(如沒有外掛可更改請求為get接收,直接在瀏覽器請求back路徑即可返回json資料),輸入 http://localhost:8080/first/back 返回我們設定的 msg:請求成功
檢視控制檯輸出日誌,關於Springboot專案結合AOP和logback日誌持久化入庫可以檢視我的這篇文章。
全文完,2018/8/23
寫博文不易,轉載請註明出處。