SpringBoot2.0學習 (一)
SpringBoot簡介
SpringBoot是什麼?
SpringBoot是由Pivotal團隊提供的全新框架 ,它使用特定的方式進行配置(大多數為自動配置),省去了Spring繁瑣的xml配置,內建了http伺服器,可以通過java程式啟動web容器,也整合了常用的框架。總之,SpringBoot幫助程式設計師進行快速開發和構建專案。
SpringBoot和SpringMvc
在使用SpringBoot構建web專案時,我們需要引入spring-starter-web模組,實際上這個模組會幫我們引入SpringMvc,由此可見,SpringBoot並不是一個全新的web框架,它只是幫助我們將一些框架整合起來,在構建web專案時,底層還是使用的SpringMvc。
SpringBoot和SpringCloud
SpringCloud是一套微服務框架,它基於SpringBoot開發,簡化了分散式系統的基礎設施的開發,比如配置中心、負載均衡、路由、服務治理等,簡單的說SpringCloud依賴SpringBoot
SpringBoot中幾個常用的註解
@Configuration
作用在類上,底層使用的@Component註解,和xml中的<bean>標籤功能類似,Spring容器啟動時會載入這個類,可以用作配置。
@EnabledAutoConfiguration
作用在類上,會自動載入jar包裡的META-INF/spring-autoconfigure-metadata.properties配置的類(自動配置)
@ComponentScan
開啟註解掃描,如果不指定範圍,預設掃描當前類所在包範圍
@SpringBootApplication
相當於@Configuration、@EnabledAutoConfiguration、@ComponentScan三個註解,通常為專案的入口
SpringBoot中的配置檔案
SpringBoot可以使用.yml(或者.yaml)和.properties作為配置檔案,我們一般使用.yml,因為它結構清晰,更方便閱讀
** Springboot提供了兩種配置檔案的格式:application.properties和application.yml, 因為.yml檔案編寫和結構更加清晰,所以我們應該儘量使用application.yml作為配置檔案 1.配置server(埠、專案訪問路徑等資訊) server: port: 8081 context-path: /girl 2.配置spring整合外部框架和應用的資訊,如datasource、redis、thymeleaf等 spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/girl username: root password: 444668 3.配置自定義資訊: (1) 普通訊息:在程式中如果需要引用這些引數,使用@Value("${引數名}")註解 name: eragon age: 23 (2) 封裝成物件: 在程式中如果需要引用到這個物件,那麼需要寫一個POJO類,並使用@ConfigurationProperties(prefix="該物件的名稱")和@Component註解,通過@Autowire引用 gril: name: eragon age:23 (3) 引用配置檔案中的引數 name: eragon age: 23 content: ${name},${age} 4. 配置profiles:在開發中,我們由於開發環境和生產環境的不同,經常要進行配置檔案的切換,比如資料庫等資訊的配置,會非常的麻煩。通過配置profiles可以實現非常方便的環境 切換。spriingboot中預設採用application-{profileName}.yml來適用於不同環境的配置檔案。通過在application.yml主配置檔案中使用如下配置: profiles: active: dev // 這裡的dev指向的是application-dev.yml 5. 配置隨機值:通過${random}可以生成不同型別的隨機值: age: ${random.int} name: ${random.value} 6. 配置日誌: debug: ture // debug級別的日誌也會被列印到控制檯 logging: path: c:/upload/ // 指定日誌輸出目錄,會自動生成spring.log檔案記錄日誌 file: c:/upload/my.log // 自定義日誌輸出路徑,需要注意的是path和file如果同時使用,只有file會生效 level: com.eragon: warn // 表時com.eragon包下的所有類以warn級別輸出日誌 另外還可以引入外部配置檔案,比如使用logback時,以下規則的配置檔案都會被載入:logback-spring.xml、logback-spring.groovy、logback.xml、logback.groovy 也可以自定義外部配置檔案: config: classpath:myLogback.xml
SpringBoot中的靜態資源訪問
classpath:/META-INF/resources classpath:/resources classpath:/static classpath:/public 上面4個目錄都是SpringBoot的靜態資源對映路徑,優先順序順序為:META-INF/resources > resources > static > public 對應在application.yml中的預設配置為: spring: mvc: static-path-pattern: ##預設值為 /** resources: static-locations: ##預設值為classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ 這兩個配置相當於nginx的配置,可以通過修改上面兩個屬性來配置自定義的靜態資源路徑對映。
SpringBoot整合Freemarker模板
在pom中新增Freemarker的依賴後就可以在專案中使用Freemarker了
SpringBoot全域性捕獲異常
在專案中我們的程式中肯定會出現異常,直接將異常返回給前臺展示對使用者非常的不友好,所以我們需要異常進行捕獲,用JSON或者其他格式返回給頁面。SpringBoot可以通過@ControllerAdvice註解來配置一個全域性異常處理類,它可以且只能處理Controller中丟擲的異常,不能處理其他如service層丟擲的異常。
SpringBoot中使用Lombok簡化程式碼
在專案中我們經常要在JavaBean類中寫getter、setter、toString等方法,每新增一個屬性都需要改寫,非常不方便。Lombok通過改變位元組碼檔案(使用javac技術),讓我們只用幾個註解就可以簡單方便的建立JavaBean。在IDEA中需要先下載Lombok外掛。
可以使用@Getter、@Setter等註解自動擁有getter方法和setter方法,也可以直接使用@Data等於@Getter、@Setter、@ToString等。另外我們可以在@Slf4j註解,用來簡化日誌的輸出。
SpringBoot中非同步執行方法
如果要在controller中使用非同步方法,一般會使用java多執行緒技術,new一個Thread去執行,在SpringBoot中我們可以使用@Async註解達到同樣的效果。
@Async
public String sendEmail() {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "success";
}
另外還需要在controller類中使用@EnableAsync開啟非同步方法掃描
@EnableAsync
@RestController
public class AsyncController {
@Autowired
private IEmailService emailService;
@RequestMapping("test/async")
public String testAsync(){
// 這個方法將會被非同步執行
emailService.sendEmail();
return "";
}
}