1.創(chuàng)建項(xiàng)目
1.1 創(chuàng)建一個(gè)Gradle項(xiàng)目
1.2 設(shè)置GroupId晚胡、ArtifactId、Version
1.3 Gradle配置,可以使用默認(rèn)统刮。如果本地沒有安裝gradle環(huán)境故源,idea會(huì)自動(dòng)下載并安裝污抬。
1.4 設(shè)置項(xiàng)目目錄
點(diǎn)擊完成,進(jìn)行項(xiàng)目的創(chuàng)建心软。項(xiàng)目創(chuàng)建完成后壕吹,如下圖:
這里可以先刪除掉src目錄著蛙,因?yàn)槲覀兪嵌嗄K項(xiàng)目,所以不需要使用主項(xiàng)目下的src耳贬。
1.5 創(chuàng)建子Module
主項(xiàng)目包括以下Module:view踏堡、service、data咒劲、common
- view:是MVC的視圖層顷蟆,用來接收用戶請(qǐng)求,并響應(yīng)腐魂。
- service:用于處理業(yè)務(wù)邏輯帐偎。
- data:用來直接操作數(shù)據(jù)庫。
-
common:公共庫蛔屹。
四者的依賴關(guān)系如下:
view依賴service削樊,service依賴data,而view兔毒、service漫贞、data三者公共依賴common。
子Module的創(chuàng)建可依賴于Spring Initializr育叁。
1.5.1 創(chuàng)建ViewModule
創(chuàng)建的是一個(gè)Spring Initializr項(xiàng)目
設(shè)置Module參數(shù)迅脐,記得Type一定要選Gradle Project,因?yàn)槲覀兪褂肎radle來構(gòu)建子模塊豪嗽。
選擇依賴谴蔑,這里選擇最基本的配置。
設(shè)置Module名稱龟梦,點(diǎn)擊finish完成Module的創(chuàng)建隐锭。
finish后會(huì)彈框顯示Gradle配置,點(diǎn)擊OK变秦。
刪除每個(gè)Module下的.gradle目錄成榜、gradle目錄、.gitignore文件蹦玫、gradlew赎婚、gradlew.bat、settings.gradle樱溉。只要主項(xiàng)目下有這些文件就可以了挣输。并且刪除demo-common、demo-data福贞、demo-service模塊下的Application類撩嚼,由于demo-view為啟動(dòng)Module,只需要demo-view下有啟動(dòng)類就可以了。
最終項(xiàng)目的結(jié)構(gòu)為
1.5.2 創(chuàng)建其他Module和上面方式一樣完丽,只需要修改對(duì)應(yīng)的AtifactId和ModuleName恋技。創(chuàng)建好的項(xiàng)目結(jié)構(gòu)如下:
2.模塊依賴
我們之前說過,View依賴Service逻族,Service依賴Data蜻底,View、Service聘鳞、Data共同依賴Common薄辅。所以我們需要修改各Module的build.gradle文件。
修改項(xiàng)目目錄下的settings.gradle為
rootProject.name = 'SpringDemo'
include 'demo-common'
include 'demo-data'
include 'demo-service'
include 'demo-view'
- rootProject.name 指定項(xiàng)目名稱
- 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等等幾種依賴方式的區(qū)別。
2.5 主項(xiàng)目的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
由于每個(gè)Moudle下都會(huì)有application.properties文件痴颊,編譯打包的時(shí)候會(huì)合并各個(gè)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文件蠢棱,但是不能刪除默認(rèn)的application.properties文件锌杀。因?yàn)閐emo-view作為SpringBoot的啟動(dòng)Module。
修改demo-view下的application.properties文件泻仙,引入各個(gè)Module下的properties文件
#導(dǎo)入application.properties
spring.profiles.active=\
common,\
data,\
service,\
view
3.項(xiàng)目配置
3.1 數(shù)據(jù)配置
本Demo中使用JPA做演示糕再,其他orm配置大家可以自己查找資料
3.1.1 數(shù)據(jù)庫連接配置
在demo-data Moudle的application-data.properties文件下加入以下配置,這里也是最基本的配置玉转,大家可以根據(jù)項(xiàng)目實(shí)際需求去修改數(shù)據(jù)庫配置突想。
#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 創(chuàng)建實(shí)體類
在demo-data Module中創(chuàng)建entity包,創(chuàng)建一個(gè)User類。
3.1.3 創(chuàng)建Repository
在demo-data Module中創(chuàng)建repository包猾担,創(chuàng)建一個(gè)UserRepository接口繼承CrudRepository接口袭灯,并創(chuàng)建一個(gè)查詢。通過username查找User绑嘹。
3.2 Service創(chuàng)建
3.2.1 創(chuàng)建UserService接口稽荧,并創(chuàng)建相關(guān)方法。
3.2.2 創(chuàng)建UserServiceImpl類圾叼,實(shí)現(xiàn)UserService接口蛤克,加入@Service注解,并注入U(xiǎn)serRepository夷蚊。實(shí)現(xiàn)相關(guān)業(yè)務(wù)邏輯方法构挤。
3.3 Controller創(chuàng)建
創(chuàng)建UserApi類,添加RestController注解惕鼓,并且注入U(xiǎn)serService筋现。添加RESTful風(fēng)格的api。
現(xiàn)在就可以跑起來了箱歧。直接執(zhí)行DemoViewApplication中的Main方法矾飞。
現(xiàn)在測(cè)試接口
執(zhí)行成功。并且數(shù)據(jù)也成功保存到數(shù)據(jù)庫⊙叫希現(xiàn)在這個(gè)簡(jiǎn)單的SpringBoot多模塊項(xiàng)目就已經(jīng)搭建好了洒沦。
現(xiàn)在就可以通過Gradle打包成jar包來執(zhí)行〖厶剩可以使用idea右側(cè)工具欄的gradle工具申眼,或者在控制臺(tái)中使用Gradlew命令來執(zhí)行打包。需要注意的是由于demo-view模塊是啟動(dòng)模塊蝉衣,所以需要執(zhí)行demo-view模塊下的build和bootJar任務(wù)來打啟動(dòng)jar括尸。
-
命令方式
-
工具方式(需要執(zhí)行demo-view模塊下的任務(wù))