1.SpringBoot是什麼?html
SpringBoot是一套基於Spring框架的微服務框架。java
2.爲何須要SpringBootmysql
因爲Spring是一個輕量級的企業開發框架,主要的功能就是用於整合和管理其餘框架。但隨着整合的框架愈來愈多,Spring的整合配置也日益繁瑣。在這個狀況下,Spring團隊有了一個想法:就是將平時主流的、常用到的框架的整合配置預先寫好,而後經過簡單的幾個參數就能夠實現框架的快速整合。這個想法催生SpringBoot框架,它是實現了各類主流框架與Spring的自動整合的框架。git
3.SpringBoot的特色github
1.實現了各類主流的框架的快速整合web
2.實現了Spring的應用的快速部署,使用Spring Boot的Web應用能夠以Jar的方式部署。(實現原理是將tomcat服務器打包到咱們的web應用裏面。)spring
4.參考資料sql
1.Spring官方的示例代碼,地址以下:數據庫
https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samplesapache
2.SpringBoot官方參考文檔,地址以下:
https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#getting-started
3.Spring Boot建議使用Eclipse安裝STS插件或者直接使用STS開發工具。
下載官網:https://spring.io/tools/sts
5.SpringBoot入門
5.1 簡單入門配置
第一步:
到SpringBoot官網https://start.spring.io生成maven項目下載並解壓到Eclipse的工做空間導入到Eclipse中
第二步:編寫一個簡單的Java類
package com.gjs.springBoot.Controller;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody; @Controller @EnableAutoConfiguration //啓動自動配置,表示程序使用Springboot默認的配置public class HelloController { /** * 若是訪問路徑/,在頁面輸入字符串Hello World! */ @RequestMapping("/") @ResponseBody public String home() { return "Hello World!"; } public static void main(String[] args) { SpringApplication.run(HelloController.class, args); } }
第三步:啓動SpringBoot程序
裝了STS插件能夠直接右擊運行
沒有裝STS插件只能經過Maven運行
5.2 使用@SpringBootApplication註解配置
上面的示例有一個問題,就是每有一個Controller就須要配置一次
SpringApplication.run(HelloController.class, args);
使用@SpringBootApplication註解來配置就能解決這個問題
在入口類(有main方法的類,通常爲xxxApplication)使用@SpringBootApplication註解,啓動項目時,SpringBoot框架會掃描加了@SpringBootApplication註解的入口類的同級目錄和子目錄的組件類的對象到Spring容器。
package com.gjs.springBoot;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication //等同於@EnableAutoConfiguration+@ComponentScan+@Configurationpublic class Application {public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
5.3熱啓動
使用spring-boot:run命令啓動項目,每次修改完成代碼都要從新啓動。是很是麻煩的。
咱們就有那麼一個想法,能不能修改完代碼,程序不用重啓直接自動編譯了?
咱們將修改完代碼開發工具自動編譯的過程稱爲,熱啓動。Spring boot是支持熱啓動的。只有加入如下依賴就能夠
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <!-- optional=true,依賴不會傳遞,該項目依賴devtools; 以後依賴該項目的項目若是想要使用devtools,須要從新引入 --> <optional>true</optional> </dependency>
6.SpringBoot常見基礎包說明
1.spring-boot-starter-web-1.5.4.RELEASE.jar:僅僅存放web項目須要的jar包的pom.xml
2.spring-boot-starter-1.5.4.RELEASE.jar:僅僅存放springboot最小核心須要的jar包的pom.xml
3.spring-boot-starter-logging-1.5.4.RELEASE.jar:僅僅存放日誌輸出須要的jar包的pom.xml
4.spring-boot-1.5.4.RELEASE.jar:springboot框架核心包
5.spring-boot-autoconfigure-1.5.4.RELEASE.jar:默認支持的自動配置的框架的配置包(重點)
重點是spring-boot-autoconfigure包,由於spring boot的全部內置的自動配置的類都在裏面!
7.經常使用API說明
7.1 SpringApplication類
用於啓動Spring Boot的程序,根據傳入的類聲明的註解來決定不一樣的啓動方式。
如:
SpringApplication.run(Application.class, args);
7.2 @EnableAutoConfiguration註解
@EnableAutoConfiguration註解的做用是:啓動程序時,告訴SpringApplication啓動對象使用SpringBoot的默認配置。
只要在SpringBoot項目的入口類配置了@EnableAutoConfiguration,在SpringBoot框架啓動是就會自動根據導入的jar包來加載spring-boot-autoconfigure-1.5.4.RELEASE-sources.jar中的xxxAutoconfiguration配置類,使用其默認配置。
源碼:
@SuppressWarnings("deprecation") @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @AutoConfigurationPackage @Import(EnableAutoConfigurationImportSelector.class)public @interface EnableAutoConfiguration { String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration"; Class<?>[] exclude() default {}; String[] excludeName() default {}; }
屬性說明:
exclude屬性:使用Class格式的方式,排除默認自動啓動中不須要的配置類
excludeName屬性:使用類的限制名的方式,排序默認自動啓動中不須要的配置類
7.3 @SpringBootApplication註解
源碼:
@EnableAutoConfiguration @ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class), @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })public @interface SpringBootApplication { @AliasFor(annotation = EnableAutoConfiguration.class, attribute = "exclude") Class<?>[] exclude() default {}; @AliasFor(annotation = EnableAutoConfiguration.class, attribute = "excludeName") String[] excludeName() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "basePackages") String[] scanBasePackages() default {}; @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses") Class<?>[] scanBasePackageClasses() default {}; }
根據源碼能夠得出:@SpringBootApplication註解也是啓動Springboot的默認配置。只是在@EnableAutoConfiguration註解的基礎上增長了掃描包@ComponentScan的這個註解。實現了而且掃描指定範圍的類建立對象到容器裏面。
屬性說明:
1.basePackages屬性
@SpringBootApplication默認掃描的範圍是使用該註解的當前的類的包以及子包,若是要指定其餘範圍的包,能夠是basePackages指定。
2.basePackageClasses屬性
用於精確指定哪些類須要建立對象加載到Spring容器裏面。
3.exclude屬性
經過Class的方式排除不掃描的類,就是該類不建立對象。
4.excludeName屬性
經過類的全限制名的方式,排除不掃描的類,指定的類不會在容器中建立對象。
7.4 @AutoConfigureBefore註解
做用:指定在SpringBoot框架自動配置的配置類執行完成以前,執行指定的自定義的配置類。
若是放在Application入口類,表示在全部自動配置的配置類尚未執行就先加載自定義的配置類。
源碼:
@Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.TYPE })public @interface AutoConfigureBefore { Class<?>[] value() default {}; String[] name() default {}; }
屬性說明:
value:使用類的方式指定自動配置類
name:使用類的全限制名(字符串)類指定配置類
7.5 @AutoConfigureAfter註解
做用:指定在SpringBoot框架自動配置的配置類執行完成以後,而後執行指定的自定義的配置類。
源碼:
@Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.TYPE })public @interface AutoConfigureAfter { Class<?>[] value() default {}; String[] name() default {}; }
屬性說明:
value:使用類的方式指定自動配置類
name:使用類的全限制名(字符串)類指定配置類
7.6 @SpringBootTest註解
做用:用於使用JUnit測試SpringBoot程序時,啓動SpringBoot框架。測試SpringBoot必定要加上。
示例:
package com.gjs.springBoot.test; import java.sql.SQLException;import javax.sql.DataSource;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringJUnit4Cla***unner; @RunWith(SpringJUnit4Cla***unner.class) @SpringBootTest//若是不加該註解,沒法啓動SpringBootpublic class DataSourceTest { @Autowiredprivate DataSource dataSource; @Testpublic void dataSource() {try { System.out.println(dataSource.getConnection()); } catch (SQLException e) { e.printStackTrace(); } } }
8.SpringBoot配置流程(A)
SpringBoot框架是一個將整合框架的整合代碼都寫好了的框架。但整合框架有些屬性是須要咱們配置的,而這些屬性名是SpringBoot規定好的,咱們須要找到這些屬性而後對其進行配置。
咱們須要知道如何找到各類整合框架能夠配置的屬性,以及屬性對應的屬性名。
配置流程說明:
1.在SpringBoot的spring-boot-autoconfigure-1.5.4.RELEASE.jar中編寫了因此內置支持的框架的自動整合代碼
2.全部支持的框架根據功能類型來劃分包,每一個包都有一個XxxxAutoConfiguration配置類,都是一個基於純註解的配置類,是各類框架整合的框架代碼。
3.若是配置的框架有默認的配置參數,都放在一個命名爲XxxxProperties的屬性
4.經過項目的resources下的application.properties文件能夠修改每一個整合框架的默認屬性,從而實現了快速整合的目的。
配置流程圖:
9.配置文件
Spring Boot的參數配置文件支持兩種格式。分別爲application.propertie,application.yml。
配置Spring Boot時能夠二選一。
application.propertie:是鍵值對風格
application.yml:是層級鍵值對風格
9.1 application.propertie配置文件
默認狀況下,Spring Boot會加載resources目錄下的application.properties來得到配置的參數。
application.propertie多配置文件支持:
1.在application.properties配置文件下,增長多個application-xxx.properties文件名的配置文件,其中xxx是一個任意的字符串。
如:application-database.properties
application-mvc.properties
application-freemarker.properties
2.在application.properties總配置文件指定,加載的多個配置文件
spring.profiles.active=database,mvc,freemarker
9.2 application.yml配置文件
SpringBoot支持一種由SpringBoot框架自制的配置文件格式。後綴爲yml。yml後綴的配置文件的功能和properties後綴的配置文件的功能是一致的。
例如:配置文件:application.properties
#配置數據源 spring.datasource.url=jdbc:mysql://localhost:3306/schoolspring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.username=root spring.datasource.password=123456spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource #spring-data-jpa配置 #顯示SQL語句 spring.jpa.show-sql=true#表示是否須要根據view的生命週期來決定session是否關閉 spring.jpa.open-in-view=true
能夠修改成配置文件:application.yml,內容爲:
#配置數據源 spring: datasource: url: jdbc:mysql://localhost:3306/school driverClassName: com.mysql.jdbc.Driver username: root password: 123456 #配置鏈接池 type: org.apache.commons.dbcp2.BasicDataSource #配置JPA的屬性 jpa: show-sql: true open-in-view: true
其實application.yml配置文件就是將原來application.properties使用(.)分割的方式,改成樹狀結構,使用(:)分割。
注:key的字段與值之間的冒號(:)後面必定要有一個空格。
application.yml多配置文件支持:
1.在application.yml配置文件下,增長多個application-xxx.yml文件名的配置文件,其中xxx是一個任意的字符串。
例如:application-database.yml
application-mvc.yml
application-freemarker.yml
2.在application.yml總配置文件指定,加載的多個配置文件
spring: profiles: active: database,mvc,freemarker
9.3 配置示例-Spring數據源配置
配置Spring數據源,並支持DBCP2數據源:
1.在pom.xml加入支持數據源的類庫
<!-- 數據庫驅動 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!-- dbcp2鏈接池 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> </dependency> <!-- Springboot測試包 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- jdbc --> <!-- SpringBoot配置jdbc模塊,必須導入JDBC包的 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> </dependency>
2.找到數據源的配置類
3.數據源的配置類的屬性以下
/prefix 前綴:在配置文件用spring.datasource.屬性名=值 來配置屬性 @ConfigurationProperties(prefix = "spring.datasource") public class DataSourcePropertiesimplements BeanClassLoaderAware, EnvironmentAware, InitializingBean {private ClassLoader classLoader;private Environment environment;private String name = "testdb";private boolean generateUniqueName;//必須配置的屬性 private Class<? extends DataSource> type; //數據源類型:數據源全限定名private String driverClassName; //數據庫驅動名private String url; //數據庫地址private String username; //數據庫帳號private String password; //數據庫密碼private String jndiName;private boolean initialize = true;private String platform = "all";private List<String> schema;private String schemaUsername;private String schemaPassword;private List<String> data;private String dataUsername;private String dataPassword;private boolean continueOnError = false;private String separator = ";";private Charset sqlScriptEncoding;private EmbeddedDatabaseConnection embeddedDatabaseConnection = EmbeddedDatabaseConnection.NONE;private Xa xa = new Xa();private String uniqueName;
4.application.properties配置文件修改數據源參數:
#datasource spring.datasource.url=jdbc:mysql://localhost:3306/springbootspring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.username=root spring.datasource.password=1234#support dbcp2 datasource spring.datasource.type=org.apache.commons.dbcp2.BasicDataSource
5. 測試代碼
package com.gjs.springBoot.tset;import java.sql.SQLException;import javax.sql.DataSource;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringJUnit4Cla***unner; @RunWith(SpringJUnit4Cla***unner.class)//SpringBoot測試要加上這個註解@SpringBootTestpublic class DataSourceTest { @Autowiredprivate DataSource dataSource; @Testpublic void dataSource() {try { System.out.println(dataSource.getConnection()); } catch (SQLException e) {// TODO Auto-generated catch block e.printStackTrace(); } } }
9.4 得到自定義application.properties聲明的屬性值
使用@ConfigurationProperties註解能夠直接得到application.properties配置的屬性值。
1.@ConfigurationProperties屬性說明:
prefix屬性:表示得到application.properties時忽略的指定的前綴,如:
@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false)
ignoreUnknownFields屬性:忽略未知的字段值。若是爲true時,就是當application.properties設置的輸入找不到對應的字段時,就忽略它。
2.使用@ConfigurationProperties須要導入支持的依賴包:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
3.只須要在類上打上@ConfigurationProperties就能直接使用application.properties配置的屬性值
不用再使用@value註解