Spring Boot核心(基本配置)


上一篇Spring Boot我們簡單講了如何快速創建一個SpringBoot項目。大家都知道SpringBoot非常強大,可以輕松與各種工具集成,但是我們知其然,也必須知其所以然。今天開始就和大家一起學習一下SpringBoot核心,核心由於過於重要,需要分成好幾章,今天我們先來看看基本配置。

入口類和@SpringBootApplication

使用過或者瞄過一眼Spring Boot工程的小伙伴都知道,
SpringBoot有一個特別顯著的特點,
就是每個SpringBoot工程都會有一個入口類,
在這個入口類上都會有這么一個注解@SpringBootApplication。

這個類中有一個main方法,main方法中使用
SpringApplication.run(*Application.class,args),
用來啟動SpringBoot項目。如下所示:
    public static void main(String[] args) {
		SpringApplication.run(Createproject2Application.class, args);
	}

@SpringBootApplication

@SpringBootApplication是Spring Boot的核心注解,
它是一個組合注解
(通常我們稱由多個注解組成的注解叫組合注解)。點進去瞧一眼
@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 {
@SpringBootApplication注解主要(我這里說了主要喔)組合了
@Configuration,@EnableAutoConfiguration,@ComponentScan
言外之意就是可以將這三個注解直接替換@SpringBootApplication

image

  1. @EnableAutoCOnfiguration讓Spring Boot根據類路徑中的jar包依賴為當前項目進行自動配置。例如添加了spring-boot-starter-web依賴,會自動添加Tomcat和Spring MVC的依賴,Spring Boot就會對Tomcat和Spring MVC進行自動配置。

2.@ComponentScan 讓Spring Boot去掃描與入口類同級以及以下包的Bean(使用注解配置的),把他們添加到Spring容器,若為JPA項目還可以掃描標注@Entity的實體類。

3.@Configuration 表示當前是一個配置類,也會被Spring進行加載

關閉特定的自動配置

SpringBoot為我們提供了自動化配置,但是在某些特定的場景下,
我們可能不需要某個自動配置,
這時可以在@SpringBootApplication中配置
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

定制Banner

什么是Banner呢,
就是在Spring Boot項目啟動的時候最開始顯示的橫幅。
我記得我第一次啟動Spring Boot項目的時候印象最深的就是這個橫幅
內心不斷OS(wc這么酷炫的嗎)。

下面我們看看怎么自定義橫幅吧。如果不自定義,默認顯示下面圖案

image

修改Banner

  1. 我們在src/main/sources下新建一個banner.txt
  2. 登錄http://patorjk.com/software/taag 生成我們自己想要的圖案
    image
  3. 復制圖案到banner.txt中
    image
  4. 啟動項目驗證
    image

關閉banner

當然了,這個banner也不是必須要顯示的,我們可以手動關閉它。
  • 修改啟動類中的main方法
    
  SpringApplication app = new SpringApplication(Createproject2Application.class);
		app.setBannerMode(Banner.Mode.OFF);
		app.run(args);

Spring Boot的配置文件

Spring Boot在src/main/resources下有一個全局的配置文件
application.properties或application.yml

說到yml這種配置文件,是有點東西的。全稱為yaml,是以數據為中心,
支持多種數據格式(如數組),在配置數據的時候具有面向對象的特征。

簡單示例

在兩種配置文件中配置Tomcat的端口號和默認的訪問路徑
  • application.properties中可以如下配置:
server.port=8888
server.servlet.context-path=/xicent
  • application.yml中可以如下配置:
server:
  port: 8888
  servlet:
    context-path: /xicent

其實我們從簡單的實例中可以看出,yaml的格式更加清晰,所有配置看過去一目了然。並且它是有序的。
在以前idea中是不支持yml提示的,現在也都支持了。
但是yaml卻引來了另一個問題,yaml格式有嚴格的要求,稍有配錯都有可能出現問題。
因此在項目中看我們如何去取舍了,目前默認還是以properties為主。

使用xml配置

Spring Boot提倡的是0配置,即無xml配置,但是在實際開發中,
我們有時難免會需要加載xml配置,
這時我們就可以通過Spring提供的@ImportResource來加載xml配置
例如:
@ImportResource({"classpath:some-context.xml"})
這樣我們就成功加載xml配置啦。

命令行參數配置

在Spring Boot中,我們大部分配置都寫在了配置文件中,
但是有些配置我們可能需要啟動時才能確定,
因此Spring Boot還提供了一種命令行配置方式
下面演示如何在運行jar包的時候,配置Tomcat的端口號
    java -jar xx.jar --server.port=8888

常規屬性配置

在常規的Spring環境中,如果我們想加載某個properties文件,
獲取其中的配置。通常的做法是在類上加注解@PropertiesSource()
指定配置文件的位置。
然后在類中使用@Value()加載屬性。

在Spring Boot中,
我們只需在application.properties中定義屬性,
直接用@Value注入即可。

1.application.properties增加屬性

xicent.author=kris
xicent.age=1

2.修改入口類

@Value("${xicent.author}")
String name;

@Value("${xicent.age}")
int age;

@RequestMapping("/")
String index(){
    return "author is"+name+",age is"+age;
}

獲取其他屬性

通用我們用@Value都是獲取properties配置文件中配置的屬性,
但是@Value的功能可不遠遠不止這一點喔。
通過@Value注解,
我們還能獲取系統屬性,url,隨機數,文字流等等。
//  普通字符串
    @Value("xicent")
    private String str;

//  操作系統名稱
    @Value("#{systemProperties['os.name']}")
    private String osName;

//    隨機數
    @Value("#{T(java.lang.Math).random()*168.0}")
    private double randomNumber;

//  其他bean的屬性
    @Value("#{demoService.another}")
    private String fromAnother;

//  獲取文件資源
    @Value("classpath:banner.txt")
    private Resource file;

//   獲取地址資源
    @Value("http://www.baidu.com")
    private Resource url;

    public void testValue() throws IOException {
        System.out.println(getStr());
        System.out.println(getOsName());
        System.out.println(getRandomNumber());
        System.out.println(getFromAnother());
        System.out.println(IOUtils.toString(file.getInputStream(),"UTF-8"));
        System.out.println(IOUtils.toString(url.getInputStream()));
    }

//省略getter,setter方法

訪問接口

    @RequestMapping("/testvalue")
	void testValue() throws IOException {
		xicentBean.testValue();
	}

image

類型安全的配置(基於properties)

上面的例子,我們每個屬性都要使用@Value注解會顯得格外的麻煩,
我們配置的屬性通常會是許多個。
在Spring Boot中使用@ConfigurationProperties
將配置與bean相關聯,
這就是所謂的類型安全的配置。

這里將配置配在一個專門的properties文件中,
當然也能直接配置在application.properties中

1.resources文件夾下新增xicent.properties文件,添加如下屬性

xicent.author=kris
xicent.age=1

2.創建一個類

@Component
@PropertySource("classpath:xicent.properties")
@ConfigurationProperties(prefix = "xicent")
public class XicentBean {
    private String author;
    private int age;

代碼解釋:@PropertySource可以指定我們需要加載的文件的路徑。@ConfigurationProperties指定我們屬性配置的前綴

3.創建接口訪問

    @Autowired
	XicentBean xicentBean;

	@RequestMapping("/xicent")
	XicentBean getXicent(){
		return xicentBean;
	}

4.請求接口

image

Profile配置

Profile是Spring用來針對不同環境使用不同的配置文件。
一般命名為:application-{profile}.properties
(如application-prod.properties)。

然后在application.properties中
設置spring.profiles.active=prod來指定活動的Profile。
下面演示生產環境(prod)使用8888端口,
開發環境(dev)使用9999端口

1.創建application-prod.properties,配置生產環境的端口

server.port=8888

2.創建application-dev.properties,配置開發環境的端口

server.port=9999

3.application.properties中指定生效的profile

spring.profiles.active=prod

image

4.啟動項目,可以看到prod配置文件生效了,綁定端口為8888

image

疑問:如果我application.properties和application-prod.properties都配了端口,哪個會生效呢? 答案是prod的會生效

ok,今天就暫時分享這么多啦,以上講的是Spring Boot中的基本配置,其中有很多地方都是可以深挖單獨拿出來講的。
今天這里只講了一些基本的,比較常用的基本配置,后續我們還會再詳細分享。

喜歡的小伙伴可以關注公眾號:喜訊XiCent 有任何問題可以隨時問我喔~


免責聲明!

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



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