JHipster一知半解- 3.1Spring Boot和程序入口

回目錄:JHipster一知半解

Spring Boot和程序入口

Spring Boot是由Pivotal團(tuán)隊(duì)提供的,用來(lái)簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過(guò)程的框架。該框架使用了基于注解加引用依賴來(lái)進(jìn)行配置,從而使開發(fā)人員不再需要定義樣板化的配置。通過(guò)這種方式,Boot致力于在蓬勃發(fā)展的快速應(yīng)用開發(fā)領(lǐng)域(rapid application development)成為領(lǐng)導(dǎo)者。
Spring Boot核心就是能自動(dòng)根據(jù)所引入的依賴,智能判斷,智能生成對(duì)應(yīng)的Bean,項(xiàng)目中就能直接使用,起到簡(jiǎn)化配置,快速開發(fā)的目的。
Spring Boot內(nèi)容還是比較多的,不可能一一詳盡的說(shuō)明,下面僅選取一些JHipster的切入點(diǎn)進(jìn)行說(shuō)明:

1.Pom.xml相關(guān)部分

  1. 使用spring-boot作為整個(gè)maven項(xiàng)目的父工程
<parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <groupId>org.springframework.boot</groupId>
    <version>1.5.6.RELEASE</version>
    <relativePath/>
</parent>
  1. 可以看出,主要依賴了acturator,data-jpa,security,starter-web,starter-thymeleaf幾個(gè),這里需要注意的是,有根據(jù)項(xiàng)目特點(diǎn),把可能沖突或者有無(wú)用的exclusion掉了,值得一提的是,把starter-tomcat去掉主要是由于JHipster的websocket使用的Undertow的,所以這里排除掉,然后在具體的dev里面再進(jìn)行指定。
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
    <exclusions>
        <exclusion>
            <groupId>com.vaadin.external.google</groupId>
            <artifactId>android-json</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-loader-tools</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>com.vaadin.external.google</groupId>
            <artifactId>android-json</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

2.入口代碼JhipsterSampleApplicationNg2App

  1. 類注解:可以看到有3個(gè)注解
@ComponentScan
@EnableAutoConfiguration(exclude = {MetricFilterAutoConfiguration.class, MetricRepositoryAutoConfiguration.class})
@EnableConfigurationProperties({LiquibaseProperties.class, ApplicationProperties.class})

由于@SpringBootApplication是組合了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan,所以如果使用更spring-boot化的風(fēng)格前兩個(gè)也可以組合起來(lái)@SpringBootApplication(exclude = {MetricFilterAutoConfiguration.class, MetricRepositoryAutoConfiguration.class})

  1. main()函數(shù)
    這里調(diào)用了
    DefaultProfileUtil.addDefaultProfile(app);,
    也就是說(shuō),如果直接運(yùn)行和調(diào)試程序,實(shí)際上激活的profile是dev,在application.yml里面設(shè)置的spirng.profiles.acitve就不生效了,自動(dòng)運(yùn)行開發(fā)模式,當(dāng)然如果是用spring-boot的maven插件運(yùn)行,就不會(huì)進(jìn)入這塊代碼。這個(gè)小細(xì)節(jié)也算是使得開發(fā)和運(yùn)行更加方便。

3.maven的Profile與spring的profile

在查看項(xiàng)目的時(shí)候,發(fā)現(xiàn)maven本身有profile配置;同時(shí),spring 也有一個(gè)profile的概念。接觸時(shí)候就有點(diǎn)迷糊,這兩個(gè)是同一個(gè)東西,還是有所分工,之間又有什么什么關(guān)系呢。

  1. Maven Profile

定義:指定一系列的配置信息,規(guī)定動(dòng)作,然后指定激活條件。
激活:默認(rèn)在maven命令里,根據(jù)<id>標(biāo)簽激活,如-P dev即激活dev這個(gè)id的profile。其中有個(gè)<activeByDefault>作為不指定時(shí)的默認(rèn)值,JHipster的默認(rèn)就是dev。
具體的pom.xml中配置

  • no-liquibase:僅增加no-liquibase,啟動(dòng)時(shí)liquibase不生效
    swagger:配置swagger屬性,增加swagger功能(通常和dev同時(shí)生效)
  • webpack:使用eirslett的frontend-maven插件,使用maven去運(yùn)行node和yarn。相當(dāng)于:

run webpack:build:dev

  • dev:使用undertow作為內(nèi)嵌web啟動(dòng),并增加spring-boot-devtools依賴。
  • prod:對(duì)于前端,會(huì)先清空前端的target/www中代碼,然后和webpack一樣,調(diào)用yarns編譯;對(duì)于后端,用spring-boot插件的build-info進(jìn)行編譯。
  • cc:使用scale maven插件進(jìn)行“實(shí)時(shí)編譯”
    graphite:增加Graphite依賴,對(duì)spring-boot進(jìn)行外部監(jiān)控
  • prometheus,增加Prometheus依賴,對(duì)spring-boot進(jìn)行外部監(jiān)控
    IDE:mapstruct對(duì)IDE有額外的依賴,
profile.png
  1. spring的profile選擇
    spring通過(guò)@profile的注解標(biāo)明當(dāng)前運(yùn)行環(huán)境,實(shí)現(xiàn)在不同環(huán)境對(duì)Beans進(jìn)行更為精細(xì)的管理。
    如:
@Profile(value = "dev")  
@Component  
public class ClassA { }

那么ClassA 就僅當(dāng)profile值未dev才被容器包含。
也就是說(shuō),maven用profile控制包含的文件,spring用profile控制包含的類,兩個(gè)合力就實(shí)現(xiàn)了不同用profile切換不同的環(huán)境。

4. 總結(jié)

總的來(lái)說(shuō),JHipster后端是一個(gè)標(biāo)準(zhǔn)的Spring-Boot應(yīng)用,并且使用maven(也可用gradle)進(jìn)行依賴管理、程序構(gòu)建。

5. 資源和書籍推薦

http://www.cnblogs.com/vipyoumay/p/8042924.html
spring boot實(shí)戰(zhàn)
http://www.voidcn.com/blog/liaokailin/article/p-2474233.html

Spring Boot 揭秘與實(shí)戰(zhàn)-工作原理剖析
http://blog.720ui.com/columns/springboot_all/
http://blog.720ui.com/columns/server_all/

SpringBoot非官方教程
http://blog.csdn.net/forezp/article/details/70341818

Spring Boot 視頻
http://412887952-qq-com.iteye.com/blog/2344171

Spring Boot 啟動(dòng)流程詳解
https://zhuanlan.zhihu.com/p/27320381

Maven中Profile
http://blog.csdn.net/mhmyqn/article/details/24501281
http://elim.iteye.com/blog/1900568

IDEA中Maven配置
https://www.jetbrains.com/help/idea/maven.html

Spring中的Profile
http://m.itdecent.cn/p/948c303b2253
http://elim.iteye.com/blog/2390557
http://elim.iteye.com/blog/2390567

另外,國(guó)人的三本書《SpringBoot揭秘:快速構(gòu)建微服務(wù)體系》、《Java EE開發(fā)的顛覆者 Spring Boot實(shí)戰(zhàn) 》,《深入實(shí)踐Spring Boot 》都比較入門,建議看看前面幾篇網(wǎng)文,看看源碼,斷點(diǎn)跟蹤一下一個(gè)具體的bean(如datasource,webContainer)的選擇,生成過(guò)程。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容