1. 程式人生 > >SpringBoot簡介及與整合

SpringBoot簡介及與整合

SpringBoot

SpringBoot簡介:

簡單的說,spring boot就是整合了很多優秀的框架,不用我們自己手動的去寫一堆xml配置然後進行配置。 從本質上來說,Spring Boot就是Spring,它做了那些沒有它你也會去做的Spring Bean配置。它使用“習慣優於配置”(專案中存在大量的配置,此外還內建了一個習慣性的配置,讓你無需手動進行配置)的理念讓你的專案快速執行起來。使 用Spring Boot很容易建立一個獨立執行(執行jar,內嵌Servlet容器)、準生產級別的基於Spring框架的專案,使用Spring Boot你可以不用或者只需要很少的Spring配置。

SpringBoot工程環境快速搭建

步驟分析: 建專案– 建立一個maven工程 注意:springboot整合的時候在建立maven工程的時候一定要建立一個父 工程 而且,父工程選擇2.x的版本,因為我們用的是spring5.x的版本。

導依賴– spring-boot-web.jar

寫配置… 配置SpringBoot的核心配置檔案application.properties 此處省略一堆字。因為我們今天要用springboot

建立類– 在src目錄下的com.itiheimaba包下新建一個SpringBootApplicationRunner的類。並且在類上加上 @SpringBootApplication 的註解來表示此類就是一個SpringBoot的啟動器。另外還需要我們在此類中寫一個main方法,方法中利用 SpringApplication.run(SpringBootApplicationRunner.class,args); 來完成最終的啟動。

訪問localhost:8080 分析spring-boot-web這個依賴:由於這個依賴的匯入,根據maven 的依賴機制他給我們匯入了一大堆支援我們開發的依賴。

springboot啟動器

@SpringBootApplication
public class SpringBootApplicationRunner {

	public static void main(String[] args) {
		SpringApplication.run(SpringBootApplicationRunner.class, args);
	}
}

解釋此類的作用: 這個類就是我們SpringBoot 整合其他框架的一個啟動類,一會所有準備都完事後,只要一執行此類,那麼整合就完事了。

解釋@SpringBootApplication的作用:

@SpringBootApplication = @Configuration + @EnableAutoConfiguration + @ComponentScan @Configuration – 提到@Configuration就要提到他的搭檔@Bean。使 用這兩個註解就可以建立一個簡單的spring配置 類,可以用來替代相應的xml配置檔案。 @EnableAutoConfiguration – 能夠自動配置spring的上下文,試圖猜 測和配置你想要的bean類,通常會自動 根據你的類路徑和你的bean定義自動配 置。 @ComponentScan – 會自動掃描指定包下的全部標有@Component的類,並註冊成bean

經常見到的幾個jdk的元註解:

@Target(ElementType.TYPE) // 當前註解的使用範圍 @Retention(RetentionPolicy.RUNTIME) //生命週期 @Documented // 宣告在生成doc文件時是否帶著註解 @Inherited // 宣告是否子類會顯示父類的註解 總結:一個@SpringBootApplication註解就搞定了所有事,因為它覺得以上三個註解都是我們固定的配置,所以就給我們省略了。又封裝出一個註解來代替,這就是SpringBoot 的核心設計思想。

思考–我們為什麼要把SpringBoot工程的啟動類建立在base包下? SpringBoot工程執行時,掃描包來建立容器會掃描啟動類所在的包以及它下面的子包。

細節一分析

SpringApplication.run(SpringBootApplicationRunner.class,args); 備註: – run方法: 此方法是用於把啟動類的位元組碼傳入給SpringBoot的核心容器, 通過註解配置解析來建立IOC容器。 – 引數一:就是啟動類的位元組碼。 – 引數二:通常情況下就是main方法的args **拓展:args有內容嗎? 驗證:進行列印,會出現一個物件的地址

細節二分析

問題:我們關注控制檯,有一個SpringBoot的圖示。那這個圖示我們可以不讓其列印嗎? 解釋:可以。按照以下操作 SpringBootApplication sba = new SpringBootApplication(class); sba.setBannerMode(Mode.off); sba.run(args);

SpringBoot與SpringMVC的整合

入門案例:springboot 整合Spring 和 springMVC 步驟分析: ** 在com.itheima 包下新建一個web.controller包 ** 在web.controller下新建 HelloController ** 加入 @RestController 註解就ok 啦! ** 然後通過訪問 localhost:8080/…

@RestController
public class TestController {
	@RequestMapping("/hello")
	public String hello(){
		return "success";
	}
}

SpringBoot熱部署的使用-spring5x和spring-devtools-2.0.0

  1. 重啟傳統的springmvc專案,訪問一把!OK 修改:此時隨便在controller類中改改 再訪問!不OK 原因:我們改變原始碼了,但是沒有重新部署!!! 解決:重新部署一遍,又OK了!!!

  2. 分析: 問題: 總是重新部署勢必會花費大量的時間!這時候大膽暢想一下能不能修改原始碼後不重新部署也能生效呢? 注意:修改原始碼必須重新編譯,重啟是重新編譯的手段。這個思想是沒有問題的,但是我們此時要想的是能不能不重新部署也能完成重新編譯!!! 解決:利用SpringBoot的熱部署就可以實現。

  3. 如何實現SpringBoot的熱部署 – 匯入依賴 spring-boot-devtools.jar 2.0.0 導完座標儲存後我們的專案在開發工具中會有一個變化

    springloaded-1.2.9.jar 注意:這個jar包我們直接匯入不了,需要手動改變一下版本號。匯入包以後還需要我們 在eclipse中配置 -javaagent:D:/RepMaven/RepMaven/org/springframework/springloaded/1.2.9/springloaded-1.2.9.jar -noverify 引數配置:是springloaded-1.2.9.jar 這個包在maven本地倉庫的位置。 此時熱部署就可以正常使用了…

SpringBoot整合springdatajpa

– 建立一個新的專案 在剛才整合完springmvc的基礎上進行整合 – 導依賴 mysql 驅動包 spring-boot-starter-data-jpa.jar – 寫配置 在專案的resources目錄下新建application.properties檔案 此檔案中配置一些 經常修改 的資訊,此處我們配置的是 資料庫連線資訊。

– 建立類 ** 建立實體類 並利用註解建立與資料庫的對應關係。 ** 建立Dao介面並且 extends JpaRepository和JpaSpecificationExecutor ** 建立service層 ** 建立Controller層,寫相應的查詢方法 引入jQueryeasyUI 外掛,將資料顯示到表格中 步驟分析: – 在resources目錄下新建一個static資料夾,必須 命名為static 這是springboot的規定,然後將easyUI的相關檔案放入,最後直接訪問 user.html 通過ajax 請求請求後臺資料。 application.properties

#DB Configuration:
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springdata
spring.datasource.username=root
spring.datasource.password=199505140110

#JPA Configuration:
spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update

SpringBoot整合MyBatis

步驟分析:

  1. 建專案(還用剛才的)
  2. 導依賴 在 pom.xml 中加入以下依賴

< dependency > < groupId>org.mybatis.spring.boot</ groupId> < artifactId>mybatis-spring-boot-starter</ artifactId> < version>1.1.1</ version> </ dependency>

  1. 寫配置(springboot的核心配置檔案,此時不用改!)
  2. 建立類 – 新建IUserMapper 介面 寫一個根據username模糊查 詢User集合的介面 和之前的方式一樣,只是多了兩個註解: @Mapper:宣告 Mapper 介面 @Select:宣告這個介面所需要使用的 sql,當然,有查 詢的註解,肯定就有增刪改的註解。
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import cn.itcast.info.pojo.User;
@Mapper
public interface UserMapper {
@Select("select * from user where name like 
'%${value}%'")
public List<User> queryUserByName(String name);

}

– Service層新增一個介面和實現方法 – 進入controller 新增一個方法(此時需要傳入引數,我 們用一下REST 風格)

@RequestMapping(“findUserByName/{name})
public List<User> findUserByName(@PtahVarable(“name”)String name){
List<User> list = userService.findUserByName(name);
Return list;   
}

總結: 通過以上操作我們發現一個問題,就是熱部署也不是萬能的,當我們修改了Dao層中註解裡面的SQL語句並不能自動部署。這個問題要注意,它屬於一個細節,但是往往細節也能決定你的身價!! 注意: mybatis的特性,只有實體類欄位與資料庫欄位相同時物件才可以封裝成功,如果不相同,記得sql語句起別名

SpringBoot整合Redis

  1. 準備工作 – Windows下開啟Redis服務 – 為了方便查檢視,開啟Redis的一個客戶端管理工具
  2. 整合步驟分析 – 建專案(此處還用原來的專案) – 導依賴 在 pom.xml 加入依賴 spring-boot-starter-redis – 寫配置(注意:SpringBoot的核心配置不用改,但 是此時由於是要快取資料庫,需要配置若干註解) – 開啟SpringBoot啟動類,加入 @EnableCaching 意思就是開啟快取的支援。 – 接著到service中在配置快取的具體適用規則。 ** @Cacheable(value=”…”) 注:在執行查詢的方法上加@Cacheable註解表示第一次查詢到資料庫取值然後在快取中存一份,當再次查詢的時候就先到快取中取值,知道執行快取清理操作快取資料才消失,其中重點分析註解中的兩個引數 value :指定存入redis中的key的值。 **@CacheEvict(value=”…”) 注:這個註解適用於清除快取,裡面的引數和存入註解時的一樣,只是多一個allEntries屬性表示是否徹底清除。
@Override
 //@Cacheable(value="userList")
 @CacheEvict(value="userList",allEntries=true)
 public List<User> findAll() {
 	System.err.println("到資料庫查詢*****************************************");
 	return userDao.findAll();
 }

SpringBoot整合Junit

  1. 步驟分析: – 建專案(此處還用以上的專案為例) – 導依賴 在 pom.xml 中加入測試依賴 spring-boot-starter-test – 寫配置(SpringBoot核心配置不用改) – 建立類 在工程的test目錄下新建一個測試類 測試類內容如下:
//替換執行器
@RunWith(SpringJUnit4ClassRunner.class)
 //指定引導類的位元組碼
@SpringBootTest(classes=SpringBootApplicationRunner.class) 
public class SpringBootJunitTest {
	@Autowired
	private IUserService userService;
	
	@Test
	public void testFindAll() {
		List<User> users = userService.findAll();
		for(User user : users) {
			System.out.println(user);
		}
	}
}

總結:SpringBoot的Junit整合其實和spring對Junit的整合差不多,只是換了一個註解配置。

SpringBoot讀取配置檔案

SpringBoot讀取application.properties配置檔案

  1. properties檔案通常是做什麼的? 在我們程式中,一些我們經常要進行修改的屬性, 通常配在properties檔案中,這樣當修改的時候就可以修改properties檔案就可以了。但是有一個環節必不可少,那就是我們想用這些屬性的時候,必然要去讀取properties檔案。所以讀取properties檔案也是我們程式中必須的一部分。
  2. 在SpringBoot中如何讀取核心配置檔案application.properties 步驟分析: – 在測試類中注入一個Envrionment 物件。 private Envrionment environment; – 然後呼叫這個物件的getProperty() 方法就可以了。 environment.getProperty(key); 注意:此物件只用於讀取SpringBoot的核心配置檔案, 不是它核心配置檔案的內容讀不出來。
// 專門用來讀取SpringBoot的核心配置檔案
	@Autowired
	private Environment environment;
	/**
	 * 讀取SpringBoot的核心配置檔案(application.properties)
	 */
	 @Test
	 public void test(){
		 String url = environment.getProperty("spring.datasource.url");
		 System.err.println(url);
	 }

SpringBoot讀取自定義properties檔案

  1. 需求分析: – 自定義一個mail.properties 檔案 – 再建立一個MailProperty.java 物件 – mail.properties檔案中的值和MailProperty.java 物件的屬性對應。 – 然後最終直接操作MailProperty.java物件就相當於 操作mail.properties檔案,從而達到不直接讀取 mail.properties檔案就能對其進行操作的目的。

  2. 操作步驟: – 自定義一個mail.properties 檔案 – 再建立一個MailProperty.java 物件 – mail.properties檔案中的值和MailProperty.java 物件的屬性對應。 – 在MailProperty.java 物件上配置兩個註解 @ConfigurationProperties(prefix=”mail”) @PropertySource(value=”classpath:mail.properties”) 注意:@ConfigurationProperties prefix屬性的含義就是指定properties檔案中的屬性的字首。 @PropertySource 註解是指定對應的properties檔案的位置。 – 配置完了還不能用,此時我們需要一個springboot的一個依賴 spring-boot-configuration-processor

– 完成以上步驟後,發現還不行,此時我們還需要一個註解的配合才能完成。 == @Component 或者 @Configuration== 把以上註解配置到我們的MailProperty.java上就相當於把這個類當做一個可配置的類,才能夠最終將 MailProperty.java 注入到IOC 容器中。 總結:這樣做的好處就是當專案中有大量的properties檔案的時候我們可以不用頻繁的解析配置檔案,而是轉化成操作物件的方式,變得更簡單。

MailProperty.java:

@Component
@Configuration
@PropertySource("classpath:mail.properties")// 找目標檔案
@ConfigurationProperties("mail")
public class MailProperty {

  private String host;
  private String port;
  private String username;
  private String password;
  
  
  public String getHost() {
  	return host;
  }
  public void setHost(String host) {
  	this.host = host;
  }
  public String getPort() {
  	return port;
  }
  public void setPort(String port) {
  	this.port = port;
  }
  public String getUsername() {
  	return username;
  }
  public void setUsername(String username) {
  	this.username = username;
  }
  public String getPassword() {
  	return password;
  }
  public void setPassword(String password) {
  	this.password = password;
  }
  @Override
  public String toString() {
  	return "MailProperty [host=" + host + ", port=" + port + ", username=" + username + ", password=" + password
  			+ "]";
  }

測試類

	
	@Autowired
	private MailProperty mailProperty;
	/**
	 *   自定義的配置檔案(xx.proerties)
	 *   需求: 傳送一份郵件,需要有傳送郵件的相關必備資訊
	 */
	 @Test
	 public void test1(){
		 System.err.println(mailProperty.getHost());
	 }

mail.properties

mail.host=smtp.sina.com 
mail.port=25 
mail.username=itcast 
mail.password=heima

SpringBoot讀取yml配置檔案

概述:yml檔案也是springboot為我們提供的一種核心配置檔案的格式,它除了能像application.properties檔案那樣寫配置,另外他也提供了一種新的資料結構就是 更加 一目瞭然 的樹形結構。 用法: 1.讀取普通資料 – 使用@Value 註解配合 Spring 的 EL 表示式 @Value("${mail.host}") private String mailHost;

2.讀取物件資料 – 和讀取自定義的properties一樣。

MailYml

@Component
@PropertySource("classpath:mail.yml")// 找目標檔案
@ConfigurationProperties("mail")
public class MailYml {

	private String host;
	private String port;
	private String username;
	private String password;
	
	
	public String getHost() {
		return host;
	}
	public void setHost(String host) {
		this.host = host;
	}
	public String getPort() {
		return port;
	}
	public void setPort(String port) {
		this.port = port;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "MailYml [host=" + host + ", port=" + port + ", username=" + username + ", password=" + password
				+ ", getHost()=" + getHost() + ", getPort()=" + getPort() + ", getUsername()=" + getUsername()
				+ ", getPassword()=" + getPassword() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode()
				+ ", toString()=" + super.toString() + "]";
	}
	
}

測試類

@Autowired
	private MailYml mailYml;
	/**
	 * 讀取yml配置檔案(SpringBoot中的一種特製 xx.yml)
	 */
	 @Value("${spring.jpa.database}")
	 private String aaa;
	 
	 @Test
	 public void test2(){
		 System.err.println(aaa);
		 System.err.println(mailYml);
	 }

mail.yml

#普通資料
spring.jpa.database: mysql

#物件資料
mail:
 host: smtp.sina.com
 port: 25
 username: itcast
 password: heima