1. 程式人生 > >(轉)Spring Boot(二) & lombok

(轉)Spring Boot(二) & lombok

.project eve 因此 table view syntax slf4j blog 8.0

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

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

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

springboot的版本!!!2.0.1.RELEASE

<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/

集成步驟

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

<!-- 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>

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

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

集成完畢~

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

MyGenerator.java4.1KB

springboot的異常處理

在日常web開發中發生了異常,往往是需要通過一個統一的異常處理來保證客戶端能夠收到友好的提示。

單個控制器異常

@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/

作業布置

(轉)Spring Boot(二) & lombok