1. 程式人生 > >SpringBoot基本操作(一)——環境搭建及專案建立(有demo)

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

寫博文不易,轉載請註明出處。