SpringBoot入門學習看這一篇就夠了


1.SpringBoot是什么?
SpringBoot是一套基於Spring框架的微服務框架。
2.為什么需要SpringBoot
由於Spring是一個輕量級的企業開發框架,主要的功能就是用於整合和管理其他框架。但隨着整合的框架越來越多,Spring的整合配置也日益繁瑣。在這個情況下,Spring團隊有了一個想法:就是將平時主流的、經常使用到的框架的整合配置預先寫好,然后通過簡單的幾個參數就可以實現框架的快速整合。這個想法催生SpringBoot框架,它是實現了各種主流框架與Spring的自動整合的框架。
 
3.SpringBoot的特點
1.實現了各種主流的框架的快速整合
2.實現了Spring的應用的快速部署,使用Spring Boot的Web應用可以以Jar的方式部署。(實現原理是將tomcat服務器打包到我們的web應用里面。)
 
4.參考資料
1.Spring官方的示例代碼,地址如下:
https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples
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插件可以直接右擊運行
0
 
沒有裝STS插件只能通過Maven運行
0
 
0
 
 
5.2 使用@SpringBootApplication注解配置
上面的示例有一個問題,就是每有一個Controller就需要配置一次
SpringApplication.run(HelloController.class, args);

 

使用@SpringBootApplication注解來配置就能解決這個問題
在入口類(有main方法的類,一般為xxxApplication)使用@SpringBootApplication注解,啟動項目時,SpringBoot框架會掃描加了@SpringBootApplication注解的入口類的同級目錄和子目錄的組件類的對象到Spring容器。
0
 
package com.gjs.springBoot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication    //等同於@EnableAutoConfiguration+@ComponentScan+@Configuration
public 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.SpringJUnit4ClassRunner;
 
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest//如果不加該注解,無法啟動SpringBoot
public class DataSourceTest {
    @Autowired
    private DataSource dataSource;
    @Test
    public 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文件可以修改每個整合框架的默認屬性,從而實現了快速整合的目的。
 
配置流程圖:
0
 
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/school
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
spring.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.找到數據源的配置類
0
3.數據源的配置類的屬性如下
/prefix 前綴:在配置文件用spring.datasource.屬性名=值 來配置屬性
@ConfigurationProperties(prefix = "spring.datasource") 
public class DataSourceProperties
        implements 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/springboot
spring.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.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
//SpringBoot測試要加上這個注解
@SpringBootTest
public class DataSourceTest {
    
    @Autowired
    private DataSource dataSource;

    @Test
    public 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注解
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM