Idea+Gradle搭建SpringBoot多模块项目

1.创建项目

1.1 创建一个Gradle项目

Idea+Gradle搭建SpringBoot多模块项目_第1张图片
image.png

1.2 设置GroupId、ArtifactId、Version

Idea+Gradle搭建SpringBoot多模块项目_第2张图片
image.png

1.3 Gradle配置,可以使用默认。如果本地没有安装gradle环境,idea会自动下载并安装。

Idea+Gradle搭建SpringBoot多模块项目_第3张图片
image.png

1.4 设置项目目录

Idea+Gradle搭建SpringBoot多模块项目_第4张图片
image.png

点击完成,进行项目的创建。项目创建完成后,如下图:


Idea+Gradle搭建SpringBoot多模块项目_第5张图片
image.png

这里可以先删除掉src目录,因为我们是多模块项目,所以不需要使用主项目下的src。

1.5 创建子Module

主项目包括以下Module:view、service、data、common

  • view:是MVC的视图层,用来接收用户请求,并响应。
  • service:用于处理业务逻辑。
  • data:用来直接操作数据库。
  • common:公共库。
    四者的依赖关系如下:


    Idea+Gradle搭建SpringBoot多模块项目_第6张图片
    image.png

    view依赖service,service依赖data,而view、service、data三者公共依赖common。
    子Module的创建可依赖于Spring Initializr。

1.5.1 创建ViewModule

Idea+Gradle搭建SpringBoot多模块项目_第7张图片
image.png

创建的是一个Spring Initializr项目


Idea+Gradle搭建SpringBoot多模块项目_第8张图片
image.png

设置Module参数,记得Type一定要选Gradle Project,因为我们使用Gradle来构建子模块。


Idea+Gradle搭建SpringBoot多模块项目_第9张图片
image.png

选择依赖,这里选择最基本的配置。
Idea+Gradle搭建SpringBoot多模块项目_第10张图片
image.png

设置Module名称,点击finish完成Module的创建。
Idea+Gradle搭建SpringBoot多模块项目_第11张图片
image.png

finish后会弹框显示Gradle配置,点击OK。


Idea+Gradle搭建SpringBoot多模块项目_第12张图片
image.png

删除每个Module下的.gradle目录、gradle目录、.gitignore文件、gradlew、gradlew.bat、settings.gradle。只要主项目下有这些文件就可以了。并且删除demo-common、demo-data、demo-service模块下的Application类,由于demo-view为启动Module,只需要demo-view下有启动类就可以了。
Idea+Gradle搭建SpringBoot多模块项目_第13张图片
image.png

最终项目的结构为
Idea+Gradle搭建SpringBoot多模块项目_第14张图片
image.png

1.5.2 创建其他Module和上面方式一样,只需要修改对应的AtifactId和ModuleName。创建好的项目结构如下:

Idea+Gradle搭建SpringBoot多模块项目_第15张图片
image.png

2.模块依赖

我们之前说过,View依赖Service,Service依赖Data,View、Service、Data共同依赖Common。所以我们需要修改各Module的build.gradle文件。
修改项目目录下的settings.gradle为

rootProject.name = 'SpringDemo'
include 'demo-common'
include 'demo-data'
include 'demo-service'
include 'demo-view'
  • rootProject.name 指定项目名称
  • include 指定依赖的子Module名称

2.1 demo-common的build.gradle文件配置如下:

plugins {
    id 'org.springframework.boot' version '2.1.6.RELEASE'
    id 'java'
    id 'idea'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.test'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'mysql:mysql-connector-java'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

2.2 demo-data的build.gradle文件配置如下:

plugins {
    id 'org.springframework.boot' version '2.1.6.RELEASE'
    id 'java'
    id 'idea'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.test'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'mysql:mysql-connector-java'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    compile project(':demo-common')
}

demo-data的build.gradle文件中,在dependencies下使用compile依赖了demo-common。

2.3 demo-service的build.gradle文件配置如下:

plugins {
    id 'org.springframework.boot' version '2.1.6.RELEASE'
    id 'java'
    id 'idea'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.test'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'mysql:mysql-connector-java'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    compile project(':demo-data')
}

demo-service的build.gradle文件中,在dependencies下使用compile依赖了demo-data。由于使用compile的方式依赖,所以demo-service也间接的依赖了demo-common。

2.4 demo-view的build.gradle文件配置如下:

plugins {
    id 'org.springframework.boot' version '2.1.6.RELEASE'
    id 'java'
    id 'idea'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.test'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'mysql:mysql-connector-java'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    compile project(':demo-service')
}

同理,demo-view依赖了demo-service,并间接依赖了demo-data和demo-common,大家有兴趣可以了解一下Gradle的依赖配置,implementation、api、compile、provider等等几种依赖方式的区别。

2.5 主项目的build.gradle文件配置如下:

buildscript {
    allprojects {
        gradle.projectsEvaluated {
            allprojects {
                jar { enabled = true }
            }
        }
    }
}
plugins {
    id 'java'
    id 'idea'
}

group 'com.test'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

由于各模块直接的依赖是已jar的方式,所以在allprojects下加入 jar { enabled = true }配置,也可以在各模块的build.gradle文件下加入 jar { enabled = true }。

2.6 修改application.properties

由于每个Moudle下都会有application.properties文件,编译打包的时候会合并各个Module下的application.properties,所以我们需要修改Module下的application.properties文件的名称。修改如下


Idea+Gradle搭建SpringBoot多模块项目_第16张图片
image.png
  • demo-data下的application.properties文件重命名为application-common.properties
  • demo-common下的application.properties文件重命名为application-common.properties
  • demo-service下的application.properties文件重命名为application-service.properties
  • 在demo-view下增加application-view.properties文件,但是不能删除默认的application.properties文件。因为demo-view作为SpringBoot的启动Module。
    修改demo-view下的application.properties文件,引入各个Module下的properties文件
#导入application.properties
spring.profiles.active=\
  common,\
  data,\
  service,\
  view

3.项目配置

3.1 数据配置

本Demo中使用JPA做演示,其他orm配置大家可以自己查找资料

3.1.1 数据库连接配置

在demo-data Moudle的application-data.properties文件下加入以下配置,这里也是最基本的配置,大家可以根据项目实际需求去修改数据库配置。

#JPA配置
spring.datasource.url=jdbc:mysql://localhost:3306/demo-spring?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.max-active=20
spring.datasource.max-idle=8
spring.datasource.min-idle=8
spring.datasource.initial-size=10
spring.jpa.database=MYSQL
spring.jpa.show-sql=true
spring.jpa.open-in-view=false
spring.jpa.generate-ddl=true  
#spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy

3.1.2 创建实体类

在demo-data Module中创建entity包,创建一个User类。


Idea+Gradle搭建SpringBoot多模块项目_第17张图片
image.png

3.1.3 创建Repository

在demo-data Module中创建repository包,创建一个UserRepository接口继承CrudRepository接口,并创建一个查询。通过username查找User。


Idea+Gradle搭建SpringBoot多模块项目_第18张图片
image.png

3.2 Service创建

3.2.1 创建UserService接口,并创建相关方法。

Idea+Gradle搭建SpringBoot多模块项目_第19张图片
image.png

3.2.2 创建UserServiceImpl类,实现UserService接口,加入@Service注解,并注入UserRepository。实现相关业务逻辑方法。

Idea+Gradle搭建SpringBoot多模块项目_第20张图片
image.png

3.3 Controller创建

创建UserApi类,添加RestController注解,并且注入UserService。添加RESTful风格的api。


Idea+Gradle搭建SpringBoot多模块项目_第21张图片
image.png

现在就可以跑起来了。直接执行DemoViewApplication中的Main方法。


Idea+Gradle搭建SpringBoot多模块项目_第22张图片
image.png

现在测试接口
Idea+Gradle搭建SpringBoot多模块项目_第23张图片
image.png

Idea+Gradle搭建SpringBoot多模块项目_第24张图片
image.png

执行成功。并且数据也成功保存到数据库。现在这个简单的SpringBoot多模块项目就已经搭建好了。
现在就可以通过Gradle打包成jar包来执行。可以使用idea右侧工具栏的gradle工具,或者在控制台中使用Gradlew命令来执行打包。需要注意的是由于demo-view模块是启动模块,所以需要执行demo-view模块下的build和bootJar任务来打启动jar。

  • 命令方式


    Idea+Gradle搭建SpringBoot多模块项目_第25张图片
    image.png
  • 工具方式(需要执行demo-view模块下的任务)


    Idea+Gradle搭建SpringBoot多模块项目_第26张图片
    image.png

项目中gradle的配置比较简单,大家可以根据实际需求进行优化Gradle的配置。gradle的打可执行jar需要注意各模块间的依赖,启动模块以jar包的方式依赖其他模块。并且启动jar需要在demo-view模块中打包,也就是需要在启动模块,又入口main方法的模块进行打包。

项目github地址: https://github.com/BlueSkyYk/Demo-SpringMultipleModules

你可能感兴趣的:(Idea+Gradle搭建SpringBoot多模块项目)