SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

有天上飛的概念,就要有落地的實現

概念十遍不如代碼一遍,朋友,希望你把文中所有的代碼案例都敲一遍

先贊後看,養成習慣

SpringBoot 圖文教程系列文章目錄

  1. SpringBoot圖文教程1—SpringBoot+Mybatis 環境搭建
  2. SpringBoot圖文教程2—日誌的使用「logback」「log4j」
  3. SpringBoot圖文教程3—「‘初戀’情結」集成Jsp
  4. SpringBoot圖文教程4—SpringBoot 實現文件上傳下載
  5. SpringBoot圖文教程5—SpringBoot 中使用Aop
  6. SpringBoot圖文教程6—SpringBoot中過濾器的使用
  7. SpringBoot圖文教程7—SpringBoot攔截器的使用姿勢這都有
  8. SpringBoot圖文教程8—SpringBoot集成MBG「代碼生成器」
  9. SpringBoot圖文教程9—SpringBoot 導入導出 Excel 「Apache Poi」
  10. SpringBoot圖文教程10—模板導出|百萬數據Excel導出|圖片導出「easypoi」
  11. SpringBoot圖文教程11—從此不寫mapper文件「SpringBoot集成MybatisPlus」
  12. SpringBoot圖文教程12—SpringData Jpa的基本使用
  13. SpringBoot圖文教程13—SpringBoot+IDEA實現代碼熱部署
  14. SpringBoot圖文教程14—阿里開源EasyExcel「為百萬數據讀寫設計」
  15. SpringBoot圖文教程15—項目異常怎麼辦?「跳轉404錯誤頁面」「全局異常捕獲」

前言

本文已經收錄碼雲倉庫:https://gitee.com/bingqilinpeishenme/Java-Tutorials 本文涉及源碼下載地址:https://gitee.com/bingqilinpeishenme/multi-module-demo

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

什麼是多模塊開發?如圖所示,項目中每一個包對應都是一個完整的項目,在IDEA中稱之為模塊,每一個模塊都有完整的項目結構:獨立的pom文件,獨立的配置文件,獨立的編譯文件輸出模塊等等。

那麼這樣項目結構的項目是如何設計出來的呢?

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

SpringBoot 多模塊開發

技術選型:

SpringBoot MybatisPlus MybatisPlus教程見:SpringBoot圖文教程11—從此不寫mapper文件「SpringBoot集成MybatisPlus」 Mysql 多模塊開發效果圖如下:

父級工程開發


父級工程可以用來統一管理所有項目的依賴,如圖,如果在父級項目中有一個mysql依賴,那麼所有繼承這個父級項目的子項目中也會繼承到mysql的依賴

1.創建一個Project

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

2.對IDEA做一些項目基本的配置

  • 字符編碼配置
  • 註解生效激活
  • Java編譯版本選擇

3.寫父級項目的pom文件

pom文件的詳細內容見註釋

<code>

    4.0.0
 
    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.3.RELEASE
          
    
    com.lby
    multi-module-demo
    1.0-SNAPSHOT
     
    pom

     
    
        1.8
         
        1.18.4
    

    
        
            org.projectlombok
            lombok
             
            ${lombok-version}
            provided
        
    

     
    
        
             
            
                com.baomidou
                mybatis-plus-boot-starter
                3.3.1.tmp
            

             
            
                com.alibaba
                druid
                1.0.19
            

             
            
                mysql
                mysql-connector-java
                5.1.38
            

        
    

/<code>

注意:

  • 父級項目的packing必須設置為 pom
  • dependencies 和 DependencyManagement 的區別 dependencies 在當前項目中引入依賴,如果子項目繼承了該項目,也會在子項目中引入依賴 DependencyManagement 只是聲明依賴,並不實際引入,因此子項目需要顯式聲明需要用到的依賴 如果在子項目中聲明依賴,是不會從父項目中繼承下來的,只有在子項目中寫了該依賴項,並且沒有執行具體版本,才會從父項目中繼承該項,並且version和scope都讀取自父pom 如果子項目指定了版本號,那麼會使用子項目中指定的jar版本子項目開發

子項目開發的步驟如下:

基於Project創建module 修改pom 寫配置,沒有可以不寫 寫代碼

1.創建multi-entity

1.基於Project創建module

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

創建完multi-entity後打開pom可以看到

此時打開父級項目的pom 會看到

2.修改pom

完整的multi-entity項目的pom如下:

<code>

     
    
        multi-module-demo
        com.lby
        1.0-SNAPSHOT
    

    4.0.0

    multi-entity

    
        
            com.baomidou
            mybatis-plus-boot-starter
        
    

/<code>

3.在項目中寫入實體類

<code>package com.lby.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@TableName("cmfz_admin")
@Data
public class Admin {
    /**
     * 主鍵屬性  @TableId
     *
     * value 該屬性對應的數據庫表中的字段名
     * type 主鍵自增的類型 AUTO 代表自動遞增
     */
    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;
    /**
     * 非主鍵屬性  @TableField
     *  @TableField("username")  參數為該屬性對應的數據庫表中的字段名
     *
     */
    private String username;

    private String password;

    private String salt;

}
/<code>

2.按照上述步驟創建 multi-dao

對於dao模塊而言,不同的地方在於,在multi-dao中需要使用到 multi-entity中的實體類,但是怎麼在dao模塊中使用到另一個項目中的實體類呢?

將multi-entity像依賴一樣導入 multi-dao中

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

multi-dao完整pom文件

<code>

    
        multi-module-demo
        com.lby
        1.0-SNAPSHOT
    
    4.0.0

    multi-dao

    
 
        
            com.lby
            multi-entity
            1.0-SNAPSHOT
        

         
         
        
            mysql
            mysql-connector-java
        

        
            com.alibaba
            druid
        


    

/<code>

在multi-dao寫入dao接口

<code>package com.lby.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.lby.entity.Admin;

public interface AdminDao extends BaseMapper {
}
/<code>

3.創建 multi-service 模塊

完整pom文件

<code>

    
        multi-module-demo
        com.lby
        1.0-SNAPSHOT
    
    4.0.0

    multi-service

    
 
        
            com.lby
            multi-dao
            1.0-SNAPSHOT
        
    
/<code>

寫入業務類

<code>package com.lby.service;

import com.lby.dao.AdminDao;
import com.lby.entity.Admin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 之所以能夠直接使用@Service註解
 * 是因為 multi-service 模塊 依賴了 multi-dao
 * multi-dao 依賴了 multi-entity
 * multi-entity 中的 MybatisPlus 依賴在項目中導入了Spring的jar包
 */
@Service
public class AdminService {
    @Autowired
    private AdminDao adminDao;

    public List adminList(){
        return adminDao.selectList(null);
    }

}
/<code>

4.創建 multi-controller 模塊

multi-controller 模塊是啟動類所在的模塊 所以我們把配置文件 啟動類以及SpringBoot集成maven的插件都放在這個項目中

1.完整的pom文件

<code>

    
        multi-module-demo
        com.lby
        1.0-SNAPSHOT
    
    4.0.0

    multi-controller

    
 
        
            com.lby
            multi-service
            1.0-SNAPSHOT
        

 
        
            org.springframework.boot
            spring-boot-starter-web
        

         
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
             
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

/<code>

2.application配置文件配置

<code>#配置端口號
server:
  port: 8802
#數據源的配置
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/cmfz?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456
    type: com.alibaba.druid.pool.DruidDataSource

#mybatis-plus
mybatis-plus:
  mapper-locations: classpath:mapper/*Mapper.xml

# root 全局日誌等級 默認是info 可以修改 debug warn error
logging:
  level:
    root: info
    com.baizhi: debug

/<code>

3.啟動類代碼

<code>package com.lby;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@MapperScan("com.lby.dao")
@SpringBootApplication
public class AppRun {

    public static void main(String[] args) {
        SpringApplication.run(AppRun.class,args);
    }
}
/<code>

4.controller代碼

<code>package com.lby.controller;

import com.lby.entity.Admin;
import com.lby.service.AdminService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class AdminController {
    @Autowired
    private AdminService adminService;

    @RequestMapping("adminList")
    public List adminList(){
        return adminService.adminList();
    }
}
/<code>

5.啟動項目

通過啟動類啟動項目

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

訪問地址:http://localhost:8802/adminList 可以看到如下效果

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

如果要使用插件啟動 需要先對父項目進行 clean 和 install操作


6.測試

編寫測試類

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

運行測試方法 效果如下

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

7.打包項目

注意:啟動類在哪個模塊,就通過哪個模塊打包

通過maven打包項目

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

找到打包好的項目 通過java -jar運行項目

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

訪問地址:http://localhost:8802/adminList 可以看到如下效果

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

常見問題處理

1.循環依賴問題

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

錯誤信息提示:

<code>Error:java: Annotation processing is not supported for module cycles. Please ensure that all modules from cycle [qrcode-common,qrcode-manager-pojo] are excluded from annotation processing
/<code>

原因分析:循環依賴 死循環了

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

解決方案:修改模塊中的依賴

2.IDEA修改pom不生效問題

在使用IDEA開發多項目的時候發現這樣一個問題:修改pom文件之後,不管怎麼刷新都不生效

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

解決方案:重啟 IDEA 即可

總結

本文涉及源碼下載地址:https://gitee.com/bingqilinpeishenme/multi-module-demo

恭喜你完成了本章的學習,為你鼓掌!如果本文對你有幫助,請幫忙點贊,評論,轉發,這對作者很重要,謝謝。

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」

讓我們再次回顧本文的學習目標

掌握SpringBoot中多模塊開發

要掌握SpringBoot更多的用法,請持續關注本系列教程。

求關注,求點贊,求轉發

歡迎關注本人公眾號:鹿老師的Java筆記,將在長期更新Java技術圖文教程和視頻教程,Java學習經驗,Java面試經驗以及Java實戰開發經驗。

SpringBoot圖文教程16—SpringBoot 多模塊開發「web」「打包」


分享到:


相關文章: