知識點:
1、SpringBoot常見啟動方式講解和部署war項目Tomcat
1)、ide啟動
2)、jar包方式啟動
maven插件:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
如果沒有加,則執行jar包 ,報錯如下:
java -jar spring-boot-demo-0.0.1-SNAPSHOT.jar
no main manifest attribute, in spring-boot-demo-0.0.1-SNAPSHOT.jar
如果有安裝maven 用 mvn spring-boot:run
項目結構
目錄結構講解
https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#executable-jar-jar-file-structure
3)、war包方式啟動
a)在pom.xml中將打包形式 jar 修改為war
<packaging>war</packaging>
構建項目名稱:
<finalName>aaron_springboot</finalName>
b)tocmat下載
https://tomcat.apache.org/download-90.cgi
c)修改啟動類
public class AaronSpringbootApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(AaronSpringbootApplication.class); } public static void main(String[] args) throws Exception { SpringApplication.run(AaronSpringbootApplication.class, args); } }
4)打包項目,啟動tomcat
1.創建異常處理類
package net.aaron.demo.domain; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; @RestControllerAdvice public class CustomExtHandler { private static final Logger LOG =LoggerFactory.getLogger(CustomExtHandler.class); // 捕獲全局異常,處理所有不可知的異常 @ExceptionHandler(value = Exception.class) Object handleException(Exception e, HttpServletRequest request) { LOG.error("url {}, msg {}", request.getRequestURL(), e.getMessage()); Map<String, Object> map = new HashMap<>(); map.put("code", 100); map.put("msg", e.getMessage()); map.put("url", request.getRequestURL()); return map; } /** * 功能描述:自定義異常處理類 * @return */ @ExceptionHandler(value=MyException.class) Object handleMyException(MyException e,HttpServletRequest request){ //進行頁面跳轉 // ModelAndView modelAndView = new ModelAndView(); // modelAndView.setViewName("error.html"); // modelAndView.addObject("msg", e.getMessage()); // return modelAndView; //返回json數據,由前端去判斷加載什么頁面 Map<String, Object> map = new HashMap<>(); map.put("code", e.getCode()); map.put("msg", e.getMsg()); map.put("url", request.getRequestURL()); return map; } }
2.自定義異常類
package net.aaron.demo.domain; /** * 功能描述:自定義異常類 * */ public class MyException extends RuntimeException { public MyException(String code, String msg) { this.code = code; this.msg = msg; } private String code; private String msg; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
3.測試異常用Controller
package net.aaron.demo.controller; import java.util.Date; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import net.aaron.demo.domain.MyException; import net.aaron.demo.domain.User; @RestController public class ExceptionController { /** * 功能描述:模擬全局異常 * @return */ @RequestMapping(value = "/api/v1/test_ext") public Object index() { int i= 1/0; return new User(11, "sfsfds", "1000000", new Date()); } /** * 功能描述:模擬自定義異常 * @return */ @RequestMapping("/api/v1/myext") public Object myexc(){ throw new MyException("499", "my ext異常"); } }
4.測試全局異常
5.測試自定義異常
6.若返回error頁面,可在templates加入
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
template
<h1>出異常啦</h1>
</body>
</html>