1.springboot使用入門
標簽: springboot spring boot java
Springboot
1 SpringBoot入門
1.1 Springboot核心功能
1)獨立運行的Spring項目
? SpringBoot允許以jar包的形式獨立的運行,運行一個SpringBoot項目只需要通過java -jar xxx.jar的方式來運行。
2)內嵌servlet容器
? SpringBoot可選擇內嵌Tomcat,jetty等,這樣我們無需以war包形式部署項目。
3)提供Start簡化Maven配置
? Spring提供一系列的Start(場景啟動器)來簡化maven的依賴加載。
4)自動配置Spring
? Spring Boot根據在類路徑中jar包,為jar包中的類自動配置Bean,這樣會極大的減少我們要使用的配置,當前,如果在實際開發過程中我們需要使用的bean,springboot沒有提供支持,我們則可以自定義自動配置。
5)準生產的應用監控
? Spring Boot提供基于http,ssh對運行時的項目進行監控。
6)無代碼生成和xml配置。
? Spring Boot 不需要任何 xml 配置即可實現 Spring 的所有配置。
1.2 Spring Boot的優缺點
1.2.1 優點
- 快速構建項目。
- 對主流開發框架的無配置集成。
- 項目可獨立運行,無須外部依賴Servlet容器。
- 提供運行時的應用監控。
- 極大地提高了開發、部署效率。
- 與云計算的天然集成。
1.2.2 缺點
- 版本迭代速度很快,一些模塊改動很大。
- 由于不用自己做配置,報錯時很難定位。
2 SpringBoot快速搭建
? springboot是spring框架對"約定優于配置"理念的最佳實踐的產物。
需求:實現項目啟動,使用get請求,響應hello,spring Boot。
2.1 方式1:使用Spring Initializr
? 對于idea開發工具,我們可以使用其Spring Initializr
來實現。
1 創建項目
等待其下載依賴結束。
2 添加數據庫的連接參數
? 如果我們添加的依賴中存在mybatis等,則需要我們配置數據庫的連接信息,springboot的配置信息配置在application.properties文件中,配置如下內容
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/java26?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=19971001
3 寫controller
? 創建controller,寫我們需求。
@Controller
public class HelloController {
@ResponseBody
@GetMapping("/hello")
public String hello(){
return "hello,Spring Boot!";
}
}
4 啟動項目
? 因為springboot內置tomcat,因此我們只需要啟動啟動類就可以了。
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
啟動成功標志如下:
5 訪問測試
2.2 方式2:使用maven創建項目
1 添加pom依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
</parent>
<!--web模塊-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
如果創建的時maven模塊,則將<parent下>的內容放到父項目中。
2 創建啟動類
? 在java根目錄下創建啟動類:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
項目搭建完成,后面的步驟和之前保持一致。
3 細節分析
3.1 SpringBootApplication注解
? 首先@SpringBootApplication是一個復合注解。
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {...}
雖然他使用了很多個注解進行標注,但是實際有用的就三個:
- @Configuration
- @EnableAutoConfiguration
- @ComponentScan
我們也可以使用這三個注解來標注啟動類來代替@SpringBootApplication。
1)@Configuration
? 該注解表明該類是一個配置類,啟動類標注了 @Configuration 之后,本身其實也是一個 IoC 容器的配置類!
我們可以對以上的程序進行拆分,如下:
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class DemoConfiguration {
@Bean
public Controller controller() {
return new Controller();
}
}
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoConfiguration.class, args);
}
}
2)@EnableAutoConfiguration
? @EnableAutoConfiguration 也是借助 @Import 的幫助,將所有符合自動配置條件的 bean 定義加載到 IoC 容器,僅此而已!類似于Spring框架中提供的@EnableScheduling、@EnableCaching、@EnableMBeanExport 等,借助于@Import的支持收集和注冊特定場景相關的bean的定義。
- @EnableScheduling 是通過 @Import 將 Spring 調度框架相關的 bean 定義都加載到 IoC 容器。
- @EnableMBeanExport 是通過 @Import 將 JMX 相關的 bean 定義加載到 IoC 容器。
作為一個符合注解,其定義如下所示:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {...}
? 最關鍵的要屬@Import(EnableAutoConfigurationImportSelector.class),借助 EnableAutoConfigurationImportSelector,@EnableAutoConfiguration 可以幫助 SpringBoot 應用將所有符合條件的 @Configuration 配置都加載到當前 SpringBoot 創建并使用的 IoC 容器。
? 借助于 Spring 框架原有的一個工具類:SpringFactoriesLoader 的支持,@EnableAutoConfiguration 可以“智能”地自動配置功效才得以大功告成!
SpringFactoriesLoader 屬于 Spring 框架私有的一種擴展方案,其主要功能就是從指定的配置文件 META-INF/spring.factories 加載配置。
spring.factories 是一個典型的 java properties 文件,配置的格式為 Key=Value 形式,只不過 Key 和 Value 都是 Java 類型的全類名。
3)@ComponentScan
? 該注解是可有可無的,@ComponentScan 的功能其實就是自動掃描并加載符合條件的組件或 bean 定義,最終將這些 bean 定義加載到容器中。加載 bean 定義到 Spring 的 IoC 容器,我們可以手工單個注冊,不一定非要通過批量的自動掃描完成,所以說 @ComponentScan 是可有可無的。如果
3.2 SpringApplication.run
? SpringApplication 將一個典型的 Spring 應用啟動的流程“模板化”,在沒有特殊需求的情況下,默認模板化后的執行流程就可以滿足需求了但有特殊需求也沒關系,SpringApplication 在合適的流程結點開放了一系列不同類型的擴展點,我們可以通過這些擴展點對 SpringBoot程序的啟動和關閉過程進行擴展。
? 最粗淺的配置就是通過setter方法來設置一些定制的方式,比如在啟動的時候使用我們自定義的banner。
在resources目錄下創建一個文件banner.txt
,添加如下內容:
// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O\ = /O //
// ____/`---'\____ //
// .' \\| |// `. //
// / \\||| : |||// \ //
// / _||||| -:- |||||- \ //
// | | \\\ - /// | | //
// | \_| ''\---/'' | | //
// \ .-\__ `-` ___/-. / //
// ___`. .' /--.--\ `. . ___ //
// ."" '< `.___\_<|>_/___.' >'"". //
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
// \ \ `-. \_ __\ /__ _/ .-` / / //
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永不宕機 永無BUG //
啟動啟動類:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(DemoApplication.class);
springApplication.setBanner(new ResourceBanner(new ClassPathResource("myBanner.txt")));
springApplication.run(args);
}
}
啟動啟動類
如果我們的文件名字為
banner.txt
,則可以進行自動配置,不需要我們進行配置。
智能推薦
1.SpringBoot新建測試,上傳git(idea)
海客森 1.SpringBoot新建(season) 碼云:https://gitee.com/hikseason/demo-spring-boot-git 視頻地址:https://pan.baidu.com/s/19mrxCE9Y5R5ntSEg_EReOg 1.新建工程 選擇SpringBoot框架:Spring Initializr 配置組名(也稱為域名):com.viphome。項目名稱...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
猜你喜歡
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...
styled-components —— React 中的 CSS 最佳實踐
https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...