㈠ SpringBoot 如何調整 Ehcache載入順序,使其在Tomcat初始化後再初始化
你可以實現開放介面ApplicationRunner,代碼參照如下:
@Component
public class MyRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
// TODO
}
}
run方法會在容器啟動完成後立馬調用。
㈡ 第二章:SpringBoot與JSP間不可描述的秘密
springboot 內部對jsp的支持並不是特別理想,而 springboot 推薦的視圖是 Thymeleaf ,對於 java 開發人員來說還是大多數人員喜歡使用jsp,接下來我們來講解下 springboot 是如何支持jsp的。
整合springboot web項目支持jsp作為視圖輸出。
恆宇少年在博客整理出來了SpringBoot、ApiBoot、SpringCloud的文章匯總【 SpringBoot基礎教程專題 】,【 SpringCloud基礎教程專題 】,【 ApiBoot組件使用專題 】
我們使用IntelliJ IDEA 工具來構建項目,首先我們需要創建一個springboot項目,如下圖1所示.
點擊Next後輸入一些項目的基本參數(包名,工程名,打包形式,maven形式構建等),如下圖2所示:
點擊Next後選擇我們預先加入到工程的springboot內置的jar包組件,我們這里選擇一個web組件。如下圖3所示:
點擊 Next 輸入項目名稱後店家 Finish 既可以完成了項目的構建。新構建的項目目錄結構如下圖4所示:
可以看到上圖中比我們 lessonOne 項目中多出來了一個類文件, ServletInitlalizer ,打開該類我們不難發現它繼承了 SpringBootServletInitializer 這個父類,而 SpringBootServletInitializer 這個類是 springboot 提供的 web 程序初始化的入口,當我們使用外部容器(後期文章講解使用外部tomcat如何運行項目)運行項目時會自動載入並且裝配。
實現了 SpringBootServletInitializer 的子類需要重寫一個configure方法,方法內自動根據 LessontwoApplication .class的類型創建一個 SpringApplicationBuilder 交付給 springboot 框架來完成初始化運行配置。
我們打開pom.xml(maven配置文件)可以看到我們之前構建項目時已經添加了web模塊,而springboot給我們自動添加了 spring-boot-starter-tomcat 配置引入。springboot內部集成了tomcat組件,這里我們就不需要重復引入tomcat組件。
我們先來添加jsp的maven支持,如下圖4所示:
我們還需要引入jsp對servlet容器的支持,如下圖5所示:
除了上面的jsp,servlet支持以外,如果你還需要在jsp頁面使用jstl標簽來處理界面邏輯,那麼需要引入jstl maven,如下圖6所示:
上面配置就是我們本章需要的全部配置,那麼我們先來嘗試運行下項目是否已經可以正常運行。這里項目運行也可以使用IntelliJ IDEA工具提供的組件來完成,如下圖7所示,:
(注意:如果你已經開啟了另外一個spring boot項目請先關閉,因為springboot內置的埠號都是8080這樣會引起沖突)
點擊綠色三角號即可開始運行項目,我們先來嘗試下點擊後看看控制台輸入的日誌信息。可以看到項目已經正常運行了,右上角的綠色三角號也變成了重啟的按鈕,如下圖8所示:
項目運行如圖9所示:
可以看到項目已經正常運行,但是我們現在還沒有配置,創建JSP文件,我們接下來開始配置,創建JSP。
如果是使用過eclipse工具的人肯定知道jsp文件之前是在/webapp/WEB-INF/jsp目錄下,那麼我們也沿用eclipse的風格。
1. 在main目錄下創建webapp文件夾
2. 在webapp下創建jsp文件夾如下圖10所示:
3. 修改application.properties文件讓springmvc支持視圖的跳轉目錄指向為/main/webapp/jsp,配置如下圖11所示:
我們在webapps/jsp目錄下創建一個index.jsp用於測試我們的配置是否已經支持了jsp,新建jsp文件如下圖12所示:
上面工作我們已經完成了jsp的所有配置,那麼接下來我們需要配置springmvc的控制器,我們新建indexController如下圖13所示:
可以看到上圖我們在IndexController配置文件內添加了index()方法配置了@RequestMapping註解來描述index()方法是一個可以被springmvc管理的請求視圖。我們的index()方法返回值這里是"index"。
為什麼我們返回"index",還記得上述步驟中配置的application.properties文件的springmvc請求前綴以及後綴,那麼當我們訪問/index時springmvc就會去找/webapp/WEB-INF/jsp/index.jsp文件。
重啟項目我們嘗試訪問 127.0.0.1:8080/index ,可以看到如下圖14的效果,證明已經完成了springboot與jsp的整合:
上述便是我們本章的全部內容,本章主要是講解了springboot集成jsp作為渲染視圖,結合springmvc來轉發請求。
本章內容已經上傳到碼雲:
SpringBoot配套源碼地址: https://gitee.com/hengboy/spring-boot-chapter
SpringCloud配套源碼地址: https://gitee.com/hengboy/spring-cloud-chapter
SpringBoot相關系列文章請訪問: 目錄:SpringBoot學習目錄
QueryDSL相關系列文章請訪問: QueryDSL通用查詢框架學習目錄
SpringDataJPA相關系列文章請訪問: 目錄:SpringDataJPA學習目錄
SpringBoot相關文章請訪問: 目錄:SpringBoot學習目錄 ,感謝閱讀!
知識星球 - 恆宇少年
㈢ SpringBoot運行原理
SpringBoot是一個基於Spring開發,集成了大量第三方庫配置的javaweb開發框架
pom.xml
父依賴
其中它主要是依賴一個父項目,主要是管理項目的資源過濾及插件。以後我們導入依賴默認是不需要寫版本的。
啟動器spring-boot-starter
springboot-boot-starter-xxx:spring-boot的場景啟動器
spring-boot-starter-web:幫我們導入了web模塊正常運行所依賴的組件。
springBoot將所有的功能場景都抽取出來,做成一個個的starter(啟動器),只需要在項目中引入這些starter即可,所有相關的依賴都會被引進來,我們要用什麼功能就導入什麼樣的場景啟動器即可。
@SpringBootApplication
作用:標注在某個類上說明這個類是SpringBoot的主配置類,SpringBoot運行這個類的main方法來啟動SpringBoot應用。
進入這個註解,裡麵包含了很多其他註解
@ComponentScan作用:自動掃描並載入符合條件的組件或者bean,將這個bean定義載入到IOC容器中。
@SpringBootConfiguration作用:SpringBoot的配置類,標注在某個類上,表示這是一個SpringBoot的配置類。
進入@SpringBootConfiguration註解查看,這里的@Configuration說明這是一個配置類,配置類對應Spring的xml配置文件。
繼續查看@SpringBootConfiguration包含的其他註解
@EnableAutoConfiguration:開啟自動配置功能
進入@EnableAutoConfiguration註解查看
@AutoConfigurationPackage自動配置包
@import:Spring底層註解@import,給容器中導入一個組件
@Import({.class})給容器導入組件
:自動配置導入選擇器。那麼它導入哪些組件的選擇器呢
這個類中有這樣一個方法:getCandidateConfiguration,而在這個方法中有調用了SpringFactoriesLoader類的靜態方法loadFactoryNames()方法
進入loadSpringFactories方法
根據全局搜索Spring.factories,打開後是自動配置的文件。
隨便打開一個其中的自動配置類看,它們都是javaConfig配置類,都注入了一些Bean
所以,自動配置真正實現是從classpath中搜尋所有的META-INF/spring.factories配置文件,並將其中對應的org.springframework.boot.autoconfigure包下的配置項通過反射實例化為對應標注了@Configuration的javaConfig形式的IOC容器配置類,然後將這些都匯總成為一個實例並載入到IOC容器中。
結論:
1.SpringBoot在啟動的時候從類路徑下的META-INF/spring.factories中獲取EnableAutoConfiguration指定的值
2.將這些值作為自動配置類導入容器,自動配置類就生效,幫我們進行自動配置工作。
3.整個J2EE的整體解決方案和自動配置都在springboot-autoConfigure的jar包中。
4.它會給容器中導入非常多的自動配置類(xxxAutoConfiguration),就是給容器中導入這個場景需要的所有組件,並配置好這些組件。
5.有了自動配置類,免去了我們手動編寫配置注入功能組件等的工作。
SpringApplication
這個類主要做了以下四件事
1.推斷應用的類型是普通的項目還是web項目
2.查找並載入所有可用初始化器,設置到initializers屬性中
3.找出所有的應用程序監聽器,設置到listeners屬性中
4.推斷並設置main方法的定義類,找到運行的主類
㈣ spring boot 怎麼創建web
Spring Boot充分利用了JavaConfig的配置模式以及「約定優於配置」的理念,能夠極大的簡化基於Spring
MVC的Web應用和REST服務開發。
Spring
4倡導微服務的架構,針對這一理念,近來在微博上也有一些有價值的討論,如這里和這里。微服務架構倡導將功能拆分到離散的服務中,獨立地進行部署,Spring
Boot能夠很方便地將應用打包成獨立可運行的JAR包,因此在開發模式上很契合這一理念。目前,Spring
Boot依然是0.5.0的里程碑版本,因此相關的文檔尚不完善,本文將會以一個簡單的樣例來介紹基於這個項目的開發過程。
要Spring
Boot進行功能開發,需要使用Gradle或者Maven作為構建工具。在本例中,我們會使用Eclipse和Maven插件進行開發。要使用Spring
Boot,首先創建一個Maven工程,並修改Maven主要的配置文件pom.xml,如下所示:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>0.5.0.M7</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring3</artifactId>
</dependency>
</dependencies>
<properties>
<start-class>com.levin.Application</start-class>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestone</id>