Spring Boot 核心(一)
基本配置:
1.入口類和@SpringBootApplication
springboot 通常有一個名為*Application 的入口類,入口類裡有一個 main 方法,這個 main 方法其實就是一個標準 Java 應用的入口方法。在 main 方法中使用 SpringApplication.run(Application.class, args); ,啟動 springboot 應用程式。
@SpringBootApplication 是 springboot 的核心註解,它是一個組合註解,原始碼如下:
* Copyright 2012-2017 the original author or authors.
package org.springframework.boot.autoconfigure;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.core.annotation.AliasFor;
/**
* Indicates a {@link Configuration configuration} class that declares one or more
* {@link Bean @Bean} methods and also triggers {@link EnableAutoConfiguration
* auto-configuration} and {@link ComponentScan component scanning}. This is a convenience
* annotation that is equivalent to declaring {@code @Configuration},
* {@code @EnableAutoConfiguration} and {@code @ComponentScan}.
*
* @author Phillip Webb
* @author Stephane Nicoll
* @since 1.2.0
*/
@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 {
/**
* Exclude specific auto-configuration classes such that they will never be applied.
* @return the classes to exclude
*/
@AliasFor(annotation = EnableAutoConfiguration.class)
Class<?>[] exclude() default {};
/**
* Exclude specific auto-configuration class names such that they will never be
* applied.
* @return the class names to exclude
* @since 1.3.0
*/
@AliasFor(annotation = EnableAutoConfiguration.class)
String[] excludeName() default {};
/**
* Base packages to scan for annotated components. Use {@link #scanBasePackageClasses}
* for a type-safe alternative to String-based package names.
* @return base packages to scan
* @since 1.3.0
*/
@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
String[] scanBasePackages() default {};
/**
* Type-safe alternative to {@link #scanBasePackages} for specifying the packages to
* scan for annotated components. The package of each class specified will be scanned.
* <p>
* Consider creating a special no-op marker class or interface in each package that
* serves no purpose other than being referenced by this attribute.
* @return base packages to scan
* @since 1.3.0
*/
@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
Class<?>[] scanBasePackageClasses() default {};
}
@SpringBootApplication 註解主要組合了 @Configuration 、@EnableAutoConfiguration、@ComponentScan;若不使用 @SpringBootApplication 註解則可以在入口類上面直接使用。
其中,@EnableAutoConfiguration 讓 SpringBoot 根據類路徑中 jar 包依賴為當前專案進行自動配置。
例如,新增了 spring-boot-starter-web 依賴,會自動新增 Tomcat 和 springmvc 的依賴,那麼 springboot 會對 Tomcat 和 springmvc 進行自動配置。
又如,新增了 spring-boot-starter-data-jpa 依賴,springboot 會自動進行 jpa 相關的配置。
springboot 會自動掃描 @SpringBootApplication 所在類的同級包以及包裡的 bean (若為 JPA 專案還可以掃描 @Entity 的實體類)。建議入口類放置的位置在 groupid+arctifactID 組合包下。
2.關閉特定的自動配置
通過上面的 @SpringBootApplication 的原始碼我們可以看出,關閉特定的自動配置應該使用 @SpringBootApplication 註解的 exclude 引數,例如:
@SpringBootApplication(exclude = (xx.class))
3.定製 banner
1).修改 banner
①:在 springboot 啟動的時候會有一個預設的啟動圖案,見上篇文章截圖。
②:我們在 src/main/resources 下新建一個 banner.txt
③:通過 http://patorjk.com/software/taag 網站生成字元,複製到 banner.txt
作者推薦 idea,個人還是偏愛 eclipse,用過 idea 還是不習慣!!!
4.springboot 的配置檔案
springboot 使用一個全域性的配置檔案 application.properties 或 application.yml ,放置在 src/main/resource 目錄或者類路徑的 /config 下。
springboot 不僅僅支援常規的 properties 配置檔案,還支援 yaml 語言的配置檔案。yaml 是以資料為中心的配置語言,在配置資料的時候具有物件導向的特徵。
springboot 的全域性配置檔案的作用是對一些預設配置的配置值進行修改。
①:簡單示例:
將 Tomcat 的預設埠 8080 改為 9090,並將預設的訪問路徑 / 修改為 /helloboot。
可以在 application.properties 中新增:
application.yml:
從上面的配置可以看出,在 springboot 中,context-path、contextPath 或者 CONTEXT_PATH 形式其實是通用的。並且,yaml 的配置更加簡潔清晰。
5. starter pom
spring boot 為我們提供了簡化企業級開發絕大多數場景的 starter pom, 只要使用了應用場景需要的 starter pom,相關的技術配置將會消除,就可以得到 springboot 為我們提供的自動配置的 bean。有官方和第三方提供的 starter pom.
6.使用 xml 配置
springboot 提倡零配置,即無 xml 配置,但是實際專案中,可能有一些特殊要求你必須使用 xml 配置,這時我們可以通過 spring 提供的 @ImportResource 來載入 xml 配置,例如:
@ImportResource({"a.xml","b.xml"})
外部配置
springboot 允許使用 properties 檔案、yaml 檔案或者命令列引數作為外部配置。
1. 命令列引數配置
springboot 可以是基於 jar 包執行的,打成 jar 包的程式可以直接通過下面命令執行:
java -jar xx.jar
可以通過一下命令修改 Tomcat 埠號
java -jar xx.jar --server.port=9090
2.常規屬性配置
在 spring 環境下面,注入 properties 配置檔案,只需要通過註解 @PropertySource 指明 properties 檔案的位置,然後通過 @Value 注入值。在 springboot 裡,只需在 application.properties 裡定義屬性,然後直接使用 @Value 即可。
3.型別安全的配置(基於 properties)
上例中使用@Value 注入每個配置在實際專案中會顯得格外麻煩,因為我們的配置通常會有許多個,若使用上例中的方式則要使用@Value 注入很多次。
springboot 還提供了基於型別安全的配置方式,通過 @ConfigurationProperties 將 properties 屬性和一個 bean 及其屬性關聯,從而實現型別的安全的配置。
之前,按照作者的書一路看過來,碰到了第一個錯,springboot 會掃描所有的(或者同包下,猜測) Application 檔案,另外一個 @RequestMapping 也使用了 / ,本以為我啟動 SettingApplication ,Application 不會有影響!小記。
日誌配置
springboot 支援 Java Util Logging、Log4J、Log4J2 和 Logback 作為日誌框架,無論使用哪種日誌框架,springboot 已為當前使用日誌框架的控制檯輸出以及檔案輸出做好了配置。
Profile 配置
Profile 是 spring 用來針對不同的環境對不同的配置提供支援,全域性 Profile 配置使用 application-{profile}.properties ( 如 application-prod.properties)。
通過 application.properties 中設定 spring.profiles.active= prod 來指定活動的 Profile。
下面我們做一個示例,我們分為生產環境和開發環境,生產環境埠號為 80, 開發環境為 8888。
相關文章
- Spring Boot核心配置Spring Boot
- Spring Boot 核心(二)Spring Boot
- Spring Boot學習筆記:Spring Boot核心配置Spring Boot筆記
- Spring Boot核心技術Spring Boot
- Spring Boot核心原理-自動配置Spring Boot
- Spring Boot系列(一):Spring Boot快速開始Spring Boot
- Spring Boot系列(一):Spring Boot 入門篇Spring Boot
- Spring Boot學習(一)——Spring Boot介紹Spring Boot
- Spring boot學習(一)開啟Spring boot之旅Spring Boot
- Spring Boot入門(一):搭建Spring Boot專案Spring Boot
- Spring Boot 之路(一):一個簡單的Spring Boot應用Spring Boot
- Spring boot入門(一):快速搭建Spring boot專案Spring Boot
- spring boot(一)hello worldSpring Boot
- Spring Boot 2.0深度實踐之核心技術篇Spring Boot
- 深入理解SpringBoot核心機制《spring-boot-starter》Spring Boot
- Spring Boot:Spring Boot配置MybatisSpring BootMyBatis
- Spring Boot:Spring Boot配置SwaggerSpring BootSwagger
- Spring Boot (一)快速入門Spring Boot
- spring boot(一)hello world 搭建Spring Boot
- Spring Boot + Mybatis + Spring MVC環境配置(一) :Spring Boot初始化,依賴新增Spring BootMyBatisMVC
- Spring Boot 最核心的 25 個註解,都是乾貨!Spring Boot
- spring、spring MVC、spring BootMVCSpring Boot
- Spring Boot系列十九 Spring boot整合 swaggerSpring BootSwagger
- Spring Boot 參考指南(Spring Boot文件)Spring Boot
- Spring Boot 2.0(八):Spring Boot 整合 MemcachedSpring Boot
- 開發一個Spring Boot Starter!Spring Boot
- Spring boot 微服務核心元件集 mica v1.0.1 釋出Spring Boot微服務元件
- Spring Boot —— Spring SecuritySpring Boot
- Spring BootSpring Boot
- Jeecg-Boot Spring BootSpring Boot
- 一步一步學spring bootSpring Boot
- Spring boot學習(三) Spring boot整合mybatisSpring BootMyBatis
- Spring boot學習(四)Spring boot整合DruidSpring BootUI
- Spring Boot系列(四):Spring Boot原始碼解析Spring Boot原始碼
- Spring Boot 2.0(四):使用 Docker 部署 Spring BootSpring BootDocker
- Spring Boot 構建多租戶SaaS平臺核心技術指南Spring Boot
- Spring Boot核心技術之Restful對映以及原始碼的分析Spring BootREST原始碼
- Spring Boot 動手寫一個 StartSpring Boot