1.创建项目
1.1 创建一个Gradle项目
1.2 设置GroupId、ArtifactId、Version
1.3 Gradle配置,可以使用默认。如果本地没有安装gradle环境,idea会自动下载并安装。
1.4 设置项目目录
点击完成,进行项目的创建。项目创建完成后,如下图:
这里可以先删除掉src目录,因为我们是多模块项目,所以不需要使用主项目下的src。
1.5 创建子Module
主项目包括以下Module:view、service、data、common
- view:是MVC的视图层,用来接收用户请求,并响应。
- service:用于处理业务逻辑。
- data:用来直接操作数据库。
-
common:公共库。
四者的依赖关系如下:
view依赖service,service依赖data,而view、service、data三者公共依赖common。
子Module的创建可依赖于Spring Initializr。
1.5.1 创建ViewModule
创建的是一个Spring Initializr项目
设置Module参数,记得Type一定要选Gradle Project,因为我们使用Gradle来构建子模块。
选择依赖,这里选择最基本的配置。
设置Module名称,点击finish完成Module的创建。
finish后会弹框显示Gradle配置,点击OK。
删除每个Module下的.gradle目录、gradle目录、.gitignore文件、gradlew、gradlew.bat、settings.gradle。只要主项目下有这些文件就可以了。并且删除demo-common、demo-data、demo-service模块下的Application类,由于demo-view为启动Module,只需要demo-view下有启动类就可以了。
最终项目的结构为
1.5.2 创建其他Module和上面方式一样,只需要修改对应的AtifactId和ModuleName。创建好的项目结构如下:
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文件的名称。修改如下
- 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类。
3.1.3 创建Repository
在demo-data Module中创建repository包,创建一个UserRepository接口继承CrudRepository接口,并创建一个查询。通过username查找User。
3.2 Service创建
3.2.1 创建UserService接口,并创建相关方法。
3.2.2 创建UserServiceImpl类,实现UserService接口,加入@Service注解,并注入UserRepository。实现相关业务逻辑方法。
3.3 Controller创建
创建UserApi类,添加RestController注解,并且注入UserService。添加RESTful风格的api。
现在就可以跑起来了。直接执行DemoViewApplication中的Main方法。
现在测试接口
执行成功。并且数据也成功保存到数据库。现在这个简单的SpringBoot多模块项目就已经搭建好了。
现在就可以通过Gradle打包成jar包来执行。可以使用idea右侧工具栏的gradle工具,或者在控制台中使用Gradlew命令来执行打包。需要注意的是由于demo-view模块是启动模块,所以需要执行demo-view模块下的build和bootJar任务来打启动jar。
-
命令方式
-
工具方式(需要执行demo-view模块下的任务)