(轉)Spring Boot(二) & lombok

(二期)五、springboot框架集成與lombok

【課程五】springb...mbok.xmind0.1MBjava

【課程五預習】spr...mbok.xmind0.1MBmysql

 

 

springboot的版本!!!2.0.1.RELEASEreact

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
springboot集成mybatis plus
mybatis plus官網

http://mp.baomidou.com/web

集成步驟

第一步、導入mybatis plus的pom座標,驅動包spring

<!-- mybatis plus -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

第二步、配置數據庫鏈接信息sql

# DataSource Config
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/homework
    username: root
    password: admin

集成完畢~數據庫

 

代碼生成工具MyGenerator.java,用於生成表明的增刪改查apache

MyGenerator.java4.1KBjson

springboot的異常處理

在平常web開發中發生了異常,每每是須要經過一個統一的異常處理來保證客戶端可以收到友好的提示。api

單個控制器異常

@ExceptionHandler可用於控制器中,表示處理當前類的異常。

@ExceptionHandler(Exception.class)
public String exceptionHandler(Exception e) {
    log.error("---------------->捕獲到局部異常", e);
    return "index";
}
全局異常

若是單使用@ExceptionHandler,只能在當前Controller中處理異常。但當配合@ControllerAdvice一塊兒使用的時候,就能夠擺脫那個限制了。

 

可經過@ExceptionHandler的參數進行異常分類處理。

 

步驟:

第一步、自定義異常

public class MyException extends Exception {
 
  
    public MyException(String message) {
        super(message);
    }
}

 

第二步、定義全局處理器,主要是@ControllerAdvice@ExceptionHandler註解的運用

 

@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
 
  
    @ExceptionHandler(value = Exception.class)
    public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception {
 
  
        log.error("------------------>捕捉到全局異常", e);
 
  
        ModelAndView mav = new ModelAndView();
        mav.addObject("exception", e);
        mav.addObject("url", req.getRequestURL());
        mav.setViewName("error");
        return mav;
    }
 
  
    @ExceptionHandler(value = MyException.class)
    @ResponseBody
    public R jsonErrorHandler(HttpServletRequest req, MyException e) throws Exception {
 
  
        //TODO 錯誤日誌處理
        
        return R.fail(e.getMessage(), "some data");
    }
 
  
}
springboot的打包方式
第一種、打包jar

直接運行命令 mvn clean install

 

第二種、打包成war,運行在tomcat中

第一步、修改packing,從jar改爲war

<packaging>war</packaging>

 

第二步、springboot的web模塊移除內嵌的tomcat

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 移除嵌入式tomcat插件 -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
 
  
</dependency>

第三步、添加tomcat的servlet-api的依賴

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-servlet-api</artifactId>
    <version>8.0.36</version>
    <scope>provided</scope>
</dependency>

第四步、修改啓動方法,繼承SpringBootServletInitializer 並重寫configure方法。

@SpringBootApplication
public class SpringBootFrameApplication extends SpringBootServletInitializer {
 
  
    public static void main(String[] args) {
        SpringApplication.run(SpringBootFrameApplication.class, args);
    }
 
  
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 注意這裏要指向原先用main方法執行的Application啓動類
        return builder.sources(SpringBootFrameApplication.class);
    }
}

第五步、mvn clean package打包部署便可。

lombok的使用
  1. 什麼是lombok

連官網都懶得廢話,只給出了一句廣告詞:給你的java加點料(spice up your java)。

咱們本身來總結一下:

 

lombok是一個ide插件,它可讓咱們寫更少的代碼,而編譯出更多的字節碼。

咱們可讓咱們編譯出一個複雜的.class文件,而咱們的.java文件很乾淨清爽。

 

lombok是一個能夠經過簡單的註解形式來幫助咱們簡化消除一些必須有但顯得很臃腫的Java代碼的工具,經過通用對應的註解,在編譯源碼的時候生成對應的方法。

 

  1. lombok有點和缺點

優勢

  • 省事,少些寫不少模板代碼;減小修改屬性帶來的錯誤。

缺點

  • 可讀性差;不支持多種參數構造器的重載。

 

  1. lombok安裝
  1. 先裝插件

IDEA

 

eclipse

因爲eclipse的默認編譯器並非javac,因此,須要額外安裝,基本就是改下引導參數,能夠直接運行jar包,或者手動在eclipse.ini里加上參數

-Xbootclasspath/a:lombok.jar

-javaagent:lombok.jar

 

maven使用步驟

  1. 導入pom包
<!-- lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
 
  1. lombok經常使用註解

@Slf4j 

Creates private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class); 

 

@Log4j 

Creates private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class); 

 

@Data :註解在類上;提供類全部屬性的 getting 和 setting 方法,此外還提供了equals、canEqual、hashCode、toString 方法

@Setter:註解在屬性上;爲屬性提供 setting 方法

@Getter:註解在屬性上;爲屬性提供 getting 方法

 

樣例::

http://codepub.cn/2015/07/30/Lombok-development-guidelines/

 

  1. lombok使用場景
  • 尤爲適合pojo類,如普通的javabean、orm的實體類、json的實體類等。
  • 有些功能如Log相關,適用於任意類。
原理解析

 

並且因爲他至關因而在編譯期對代碼進行了修改,所以從直觀上看,源代碼甚至是語法有問題的。

一個更直接的體現就是,普通的包在引用以後通常的IDE都可以自動識別語法,可是Lombok的這些註解,通常的IDE都沒法自動識別。

 

 

像spring那種註解是經過反射來得到註解對應的元素並實現業務邏輯,可是咱們顯然不但願在使用Lombok這種功能的時候還要編寫其餘的調用代碼,何況用反射也獲取不到編譯期才存在的註解。

幸運的是Java早已支持了JSR269的規範,容許在編譯時指定一個processor類來對編譯階段的註解進行干預。

 

public abstract class AbstractProcessor implements Processor{
 
  
#經過ProcessingEnvironment來獲取編譯階段的一些環境信息
  public synchronized void init(ProcessingEnvironment var1){}
  
  #實現具體邏輯的地方,也就是對AST進行處理的地方
  public abstract boolean process(Set<? extends TypeElement> var1, RoundEnvironment var2);
 
  
}

 

init的主要用途是經過ProcessingEnvironment來獲取編譯階段的一些環境信息;process主要是實現具體邏輯的地方,也就是對AST進行處理的地方。

 

https://juejin.im/entry/5a390ba76fb9a0451e3fed7c

 

http://blog.didispace.com/java-lombok-how-to-use/

做業佈置
相關文章
相關標籤/搜索