SpringBoot系列(一):如何構(gòu)建一個(gè)標(biāo)準(zhǔn)的Spring Boot項(xiàng)目(入門必備)


作者: 修羅debug
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 by-sa 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。


摘要:從本篇文章開始,Debug將開始跟各位小伙伴分享一下跟Spring Boot開發(fā)相關(guān)的技術(shù)棧,其中主要包括如何搭建項(xiàng)目,整合前端開發(fā)實(shí)現(xiàn)完整的業(yè)務(wù)服務(wù)模塊,整合中間件實(shí)戰(zhàn)典型的業(yè)務(wù)場(chǎng)景等等,進(jìn)一步鞏固各位小伙伴的技術(shù)體系!

內(nèi)容:提起Spring Boot,想必各位小伙伴必不陌生,特別是在如今微服務(wù)、分布式系統(tǒng)架構(gòu)時(shí)代,關(guān)于Spring Boot技術(shù)棧的介紹以及使用簡(jiǎn)直就是爛大街了!因此,關(guān)于Spring Boot入門級(jí)別的介紹就不贅述了,從本篇文章開始,Debug將長(zhǎng)期不定期地分享關(guān)于Spring Boot開發(fā)相關(guān)的技術(shù)棧,特別是一些典型實(shí)際業(yè)務(wù)場(chǎng)景的開發(fā)。

當(dāng)我們接手一個(gè)項(xiàng)目或者從網(wǎng)上Check相應(yīng)的開源項(xiàng)目下來的時(shí)候,雖然可以從中抽取一些需要的功能模塊為我們所用,但是久而久之會(huì)出現(xiàn)一種困惑“這個(gè)項(xiàng)目是怎么一步一步構(gòu)建出來的呢?”、“這個(gè)項(xiàng)目最開始的、最原始的容貌是咋樣的呢?”,我相信,大部分的小伙伴都是有過這種疑問的!

而本文正是分享介紹給大家如何去構(gòu)建一個(gè)標(biāo)準(zhǔn)、企業(yè)級(jí)Spring Boot的項(xiàng)目初始骨架,即初始容貌!感興趣的小伙伴可以繼續(xù)往下Look!

即本文將主要介紹如何基于開發(fā)工具IDEA、項(xiàng)目構(gòu)建工具M(jìn)aven等搭建一個(gè)標(biāo)準(zhǔn)的、可用于企業(yè)級(jí)應(yīng)用開發(fā)的Spring Boot項(xiàng)目(以Jar的方式)!而不再是構(gòu)建一個(gè)簡(jiǎn)單的入門級(jí)別的HelloWorld的項(xiàng)目(如果需要的話,隨便網(wǎng)上找一篇文章照著做即可,幾個(gè)步驟而已?。?/span>

當(dāng)然啦,在這里所指的所謂的“標(biāo)準(zhǔn)、可用于企業(yè)級(jí)應(yīng)用開發(fā)的Spring Boot項(xiàng)目”其實(shí)是Debug我自己制定的,即所謂的Maven多模塊、職責(zé)分明的構(gòu)建原則,如下圖所示:


值得一提的是,在后面實(shí)戰(zhàn)Spring Boot開發(fā)相關(guān)的技術(shù)棧時(shí),將以此會(huì)構(gòu)建的項(xiàng)目為奠基。好了,廢話不多講,下面就整個(gè)項(xiàng)目的構(gòu)建環(huán)節(jié)!

(1)首先,當(dāng)然是打開IDEA,然后點(diǎn)擊New,新建一個(gè)項(xiàng)目,選擇Maven插件,然后啥骨架都不要選,直接選擇好SDK(即JDK),下一步即可,如下圖所示:


  (2)之后,便是輸入構(gòu)建Maven項(xiàng)目時(shí)需要的GroupId、ArtifactId以及Version信息了,這個(gè)看個(gè)人喜好了,按照要求輸入即可。最后點(diǎn)擊下一步,找個(gè)文件夾目錄存儲(chǔ)即可!  


(3)接下來,便是在這個(gè)Project下新建三個(gè)module,分別是api、model、server,然后按照第一個(gè)圖所示的,server模塊依賴于model模塊,model模塊依賴于api模塊,并各自在相應(yīng)模塊的pom.xml中加入一些必要的依賴。最終整體的構(gòu)建如圖所示:


(4)對(duì)于每個(gè)模塊的職責(zé),本文第一個(gè)圖就已經(jīng)說明,在此就不再贅述了,至于每個(gè)模塊添加的依賴Jar,建議各位小伙伴在拿到我的這個(gè)“標(biāo)準(zhǔn)項(xiàng)目”的源碼時(shí)直接復(fù)制過去即可!當(dāng)然啦,如果有一些不需要的,你可以直接Delete掉!下面各個(gè)模塊比較重要的一些依賴截圖吧,首先是api模塊的:


緊接著是model模塊,如下圖所示:


最后,是相當(dāng)重要的server模塊的依賴Jar明細(xì),如下圖所示:


(5)除此之外,還需要為Spring Boot項(xiàng)目準(zhǔn)備一個(gè)Main類,用以充當(dāng)該項(xiàng)目的啟動(dòng)入口類,當(dāng)然,在這里需要注意的是,該入口類需要置于前面設(shè)定的 GroupId 的子包目錄下,比如我的是 com.debug.springboot.server 包目錄下,其源代碼如下所示:

@SpringBootApplication
@ImportResource(value = {"classpath:spring/spring-jdbc.xml"})
@MapperScan(basePackages = "com.debug.springboot.model.mapper")
@EnableScheduling
public class MainApplication extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MainApplication.class);
}

public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
}

(6)當(dāng)然啦,除了有啟動(dòng)類之外,在這里我們還需要額外的幾個(gè)配置文件,一個(gè)是用于加載數(shù)據(jù)源配置的spring-jdbc.xml,一個(gè)是加載整個(gè)項(xiàng)目所需的配置文件application.properties,其他的則是一些輔助的配置文件,比如mybatis的mybatis-config.xml以及日志的log4j.properties。如下圖所示:


另外,也重點(diǎn)貼出項(xiàng)目配置文件application.properties的配置內(nèi)容,相應(yīng)的配置項(xiàng)可能有些小伙伴是不需要的(比如中間件的配置,在這里我只是為了以后使用方便,不需要再配置一次),那么可以考慮去掉,如下所示:

#profile多環(huán)境配置 - 默認(rèn)即為本配置文件
#spring.profiles.active=prod
#spring.profiles.active=test

#應(yīng)用端口-應(yīng)用上下文路徑
server.port=8081
server.servlet.context-path=/technology

#日志
logging.path=E:\\logs\\technology\\logs
logging.file=technology

#前端模板引擎
spring.freemarker.cache=false
spring.freemarker.charset=UTF-8
spring.freemarker.suffix=.html
spring.freemarker.request-context-attribute=request
spring.freemarker.template-loader-path=classpath:/templates
#限定前端上傳的文件大小
spring.servlet.multipart.max-request-size=20Mb
spring.servlet.multipart.max-file-size=2Mb

#日志級(jí)別
logging.level.org.springframework = INFO
logging.level.com.fasterxml.jackson = INFO
logging.level.com.debug.springboot = DEBUG

#json序列化配置
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8

spring.datasource.initialization-mode=never
spring.jmx.enabled=false

#數(shù)據(jù)源配置
datasource.url=jdbc:mysql://127.0.0.1:3306/technology?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
datasource.username=root
datasource.password=linsen

#mybatis
mybatis.config-location=classpath:mybatis-config.xml
mybatis.checkConfigLocation = true
mybatis.mapper-locations=classpath:mappers/*.xml

#緩存中間件redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
redis.config.host=redis://127.0.0.1:6379

#分布式服務(wù)調(diào)度中間件dubbo+服務(wù)協(xié)調(diào)中間件zookeeper
dubbo.registry.address=zookeeper://127.0.0.1:2181

#消息中間件rabbitmq
spring.rabbitmq.virtual-host=/
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

spring.rabbitmq.listener.simple.concurrency=5
spring.rabbitmq.listener.simple.max-concurrency=15
spring.rabbitmq.listener.simple.prefetch=10

#通用配置
server.tomcat.additional-tld-skip-patterns=jaxb-api.jar,jaxb-core.jar

(8)當(dāng)然啦,你可以打開Navicat 新建一個(gè)名叫 technology 的數(shù)據(jù)庫,然后就完成了整個(gè)標(biāo)準(zhǔn)型項(xiàng)目的構(gòu)建了!此時(shí),你可以點(diǎn)擊MainApplication的啟動(dòng)按鈕,然后將其跑起來,下圖為成功運(yùn)行起來后Console打印出來的日志:


至此,一個(gè)標(biāo)準(zhǔn)化的、可擴(kuò)展用于企業(yè)級(jí)開發(fā)的Spring Boot項(xiàng)目就搭建完成了,下一步我們基于此分享介紹如何構(gòu)建統(tǒng)一的前后端接口交互信息響應(yīng)模型。

補(bǔ)充:

1、對(duì)于這個(gè)標(biāo)準(zhǔn)的Spring Boot項(xiàng)目,Debug將會(huì)永遠(yuǎn)保留著,目的在于:任何時(shí)候如果需要構(gòu)建一個(gè)項(xiàng)目了,那就可以直接從此項(xiàng)目開始!而不讓其摻雜過多的東西?。?!

2、關(guān)注公眾號(hào),回復(fù)“標(biāo)準(zhǔn)項(xiàng)目”,即可獲取該源碼的下載地址!