Spring boot學(xué)習(xí)(二) Spring boot基礎(chǔ)配置

前言

上一篇博客中介紹了如何創(chuàng)建一個(gè)簡(jiǎn)單的Spring boot應(yīng)用,本篇文章介紹Spring boot中的一些基本配置,只有認(rèn)識(shí)和了解這些配置,才能為我們以后的深入學(xué)習(xí)Spring boot做好鋪墊诡渴。

文章首發(fā)于個(gè)人博客:【http://www.xiongfrblog.cn

入口類

首先,我們?cè)谛陆ㄒ粋€(gè)Spring boot項(xiàng)目的時(shí)候菲语,Spring boot會(huì)自動(dòng)為我們?cè)?strong>包的根目錄下創(chuàng)建一個(gè)名為xxxApplication.java的啟動(dòng)類妄辩,該啟動(dòng)類是我們項(xiàng)目的入口類,包含一個(gè)main方法山上,執(zhí)行該方法就啟動(dòng)了項(xiàng)目眼耀。

啟動(dòng)類中有一個(gè)核心的注解@SpringBootApplication,它是一個(gè)組合注解,包含以下三個(gè)注解:

  1. @Configuration:表示將當(dāng)前類作為Spring的配置類佩憾,經(jīng)常配合@Bean使用將某個(gè)對(duì)象注冊(cè)到Spring上下文畔塔。
  2. @EnableAutoConfiguration:表示啟動(dòng)程序時(shí)自動(dòng)加載Spring boot的默認(rèn)配置。
  3. @ComponentScan:表示啟動(dòng)程序時(shí)自動(dòng)掃描當(dāng)前包及子包下所有交由Spring管理的類鸯屿,比如被@Component澈吨,@Service@Controller等標(biāo)記的類寄摆。

注意

上邊說過啟動(dòng)類一般放在包的根目錄下谅辣,是因?yàn)锧ComponentScan注解默認(rèn)掃描當(dāng)前包及子包,如果需要指定掃描路徑婶恼,需要加上參數(shù),例如@ComponentScan("com.example.demo.dao")桑阶。

Spring boot官方配置了@SpringBootApplication注解來替代上邊介紹的三個(gè)注解柏副,更加簡(jiǎn)潔明了。

全局配置文件

Spring boot使用一個(gè)全局的配置文件application.propertiesapplication.yml,該配置文件一般位于src/main/resource目錄下蚣录,兩種配置文件唯一的區(qū)別就在于書寫的格式不一樣割择,現(xiàn)在比較主流的是application.yml格式的配置文件,要熟練使用該種格式的配置文件需要熟悉基礎(chǔ)的yaml語(yǔ)法萎河,這里不做過多介紹荔泳,本篇博客均使用application.properties格式的配置文件,下面介紹兩個(gè)最基本的配置虐杯。

修改項(xiàng)目啟動(dòng)端口

server.port=1188

修改訪問項(xiàng)目的默認(rèn)路徑

一般訪問項(xiàng)目的根路徑默認(rèn)localhost:11188玛歌,但是有時(shí)候我們會(huì)在訪問路徑上加上當(dāng)前項(xiàng)目的名字,這時(shí)候就需要修改默認(rèn)的訪問路徑了擎椰。

#spring boot版本2.0以下
server.context-path=/demo
#spring boot版本2.0以上
server.servlet.context-path=/demo

這里根據(jù)Spring boot的版本不同有不同的配置們大家根據(jù)自己的版本選擇對(duì)應(yīng)的屬性名即可支子,由于我的Spring boot版本是2.1.2,所以選擇server.servlet.context-path的屬性名达舒,此時(shí)訪問項(xiàng)目的根路徑就的url就變成了localhost:11188/demo值朋。

其它配置

當(dāng)然,Spring boot中可以配置屬性還有很多巩搏,比如配置 Email:

spring.mail.default-encoding=UTF-8 # Default MimeMessage encoding.
spring.mail.host= # SMTP server host. For instance, `smtp.example.com`.
spring.mail.jndi-name= # Session JNDI name. When set, takes precedence over other Session settings.
spring.mail.password= # Login password of the SMTP server.
spring.mail.port= # SMTP server port.
spring.mail.properties.*= # Additional JavaMail Session properties.
spring.mail.protocol=smtp # Protocol used by the SMTP server.
spring.mail.test-connection=false # Whether to test that the mail server is available on startup.
spring.mail.username= # Login user of the SMTP server.

這里就不列舉了昨登,太多了,具體可以查閱官方文檔【傳送門】

自定義屬性

在實(shí)際項(xiàng)目中塔猾,很多情況我們需要定義一些全局屬性篙骡,在需要的地方注入使用即可,Spring boot允許我們?cè)?code>application.properties下自定義一些屬性丈甸,下面介紹自定義屬性并且使用糯俗。

在配置文件中定義屬性

blog.login.name=admin
blog.login.pass=1234

我們?cè)?code>application.properties定義了blog.login.nameblog.login.pass兩個(gè)屬性。

注入自定義屬性

為了方便演示睦擂,我們定義一個(gè)名為TestController.java的控制器得湘,使用@Value注解注入屬性,全部代碼如下:

package com.web.springbootconfig.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
* @author Promise
* @createTime 2018年12月27日 下午10:11:35
* @description 
*/
@Controller
public class TestController {
    
    @Value("${blog.login.name}")
    private String name;
    
    @Value("${blog.login.pass}")
    private String pass;
    
    @RequestMapping("/test")
    @ResponseBody
    public String configTest() {
        return "name="+name+";pass="+pass+";nick="+nick;
    }
}

可以看到使用@Value(屬性名名)的方式注入我們自定義的屬性顿仇,此時(shí)啟動(dòng)項(xiàng)目瀏覽器訪問localhost:1188/demo/test127.0.0.1:1188/demo/test得到如下結(jié)果:

在這里插入圖片描述

由圖可以看出淘正,我們拿到了在配置文件中自定義屬性的值admin1234

這里有一點(diǎn)需要大家特別注意臼闻,只有在被Spring管理的類中才能注入屬性鸿吆,比如上文中我們的TestController.java控制器類名上加了@Controller注解,表明將此類交由Spring管理述呐。

簡(jiǎn)單驗(yàn)證

新建一個(gè)Text.java類惩淳,內(nèi)容如下:

package com.web.springbootconfig.entity;

import org.springframework.beans.factory.annotation.Value;

/**
* @author Promise
* @createTime 2019年1月14日 下午11:35:52
* @description 
*/
public class Test {

    @Value("${blog.login.name}")
    private String name;
    
    @Value("${blog.login.pass}")
    private String pass;

    //省略getter,setter方法
}

再在TestController.java控制器中添加如下方法:

    @RequestMapping("/check")
    @ResponseBody
    public String check() {
        Test test =new Test();
        return "name="+test.getName()+";pass="+test.getPass();
    }

重啟項(xiàng)目,瀏覽器訪問localhost:1188/demo/check乓搬,此時(shí)得到如下結(jié)果:

在這里插入圖片描述

可以看到輸出為null思犁,正是因?yàn)槲覀兊?code>Text.java類沒有交由Spring管理代虾,所以Spring并沒有為我們自動(dòng)注入屬性,這點(diǎn)一定要注意激蹲!

熱部署

從之前的操作中棉磨,很多小伙伴肯定已經(jīng)發(fā)現(xiàn)了我們每次對(duì)項(xiàng)目做修改的時(shí)候都需要手動(dòng)重啟項(xiàng)目才能夠正確訪問到新的內(nèi)容,這對(duì)我們平常的開發(fā)來說肯定非常不友好的学辱,別擔(dān)心乘瓤,Spring boot也為我們?cè)O(shè)計(jì)了熱部署功能,修改完代碼保存之后Spring boot會(huì)自動(dòng)重啟加載最新的內(nèi)容项郊,只需要我們簡(jiǎn)單的配置即可馅扣。

Devtools

Spring為開發(fā)者提供了一個(gè)名為spring-boot-devtools的模塊來使Spring boot應(yīng)用支持熱部署斟赚,提高開發(fā)者的開發(fā)效率着降,無(wú)需手動(dòng)重啟Spring boot應(yīng)用。

修改pom.xml

pom.xml文件中添加Devtools依賴拗军,代碼如下:

<!-- 熱部署 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

并且修改build模塊任洞,如下:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
            </configuration>
        </plugin>
    </plugins>
</build>

修改application.properties配置文件

在配置文件中添加如下內(nèi)容(其實(shí)不添加也可以,因?yàn)槟J(rèn)就是打開的发侵,這里提出來是方便有時(shí)候可以關(guān)閉熱部署交掏。)

spring.devtools.restart.enabled: true

需要關(guān)閉熱部署功能時(shí)將屬性值設(shè)置為false即可。

好了刃鳄,至此熱部署的功能就已經(jīng)配置完成了盅弛,現(xiàn)在可以啟動(dòng)項(xiàng)目,然后隨便修改一個(gè)文件保存叔锐,你會(huì)發(fā)現(xiàn)控制臺(tái)已經(jīng)更新了日志挪鹏,等待項(xiàng)目重新啟動(dòng)之后發(fā)現(xiàn)更新的內(nèi)容已經(jīng)展示在瀏覽器上了。

Profile配置

在實(shí)際的企業(yè)級(jí)開發(fā)過程中愉烙,我們總是有開發(fā)環(huán)境讨盒,生產(chǎn)環(huán)境等不同的環(huán)境,同一個(gè)項(xiàng)目在每一個(gè)不同的環(huán)境需要的配置總是不一樣的步责,這時(shí)候如果每換一個(gè)環(huán)境就修改一次application.properties配置文件的內(nèi)容返顺,對(duì)開發(fā)人員來說是非常糟糕的體驗(yàn),所以Spring boot為我們提供了不同環(huán)境指定特定的配置文件的功能蔓肯,而我們只需要簡(jiǎn)單的配置即可遂鹊,完美解決難題。

多環(huán)境配置文件必須以application-{profile}.properties的格式命名蔗包,其中{profile}為環(huán)境標(biāo)識(shí)秉扑,比如我們有一個(gè)開發(fā)環(huán)境需設(shè)置啟動(dòng)端口為1188,一個(gè)生產(chǎn)環(huán)境需設(shè)置啟動(dòng)端口為1189气忠,兩個(gè)配置文件分別為:

  • application-dev.properties:開發(fā)環(huán)境
    server.port=1188
    
  • application-prod.properties:生成環(huán)境
    server.port=1189
    

啟動(dòng)項(xiàng)目具體加載哪個(gè)配置文件需要在application.properties配置文件中添加如下代碼指定(比如我們使用開發(fā)環(huán)境):

spring.profiles.active=dev

項(xiàng)目打包

pom.xml配置

Spring boot可以將項(xiàng)目打成不同類型的包邻储,比如jar包赋咽,war包,pom包等吨娜,這里我們只介紹最長(zhǎng)用的jar包脓匿,打包需要在pom.xml文件中有如下的配置(這里貼出完整的pom.xml):

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.web</groupId>
    <artifactId>springboot-config</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>springboot-config</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 熱部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>                
            </plugin>
        </plugins>
    </build>

</project>

其中關(guān)于打包的重要代碼為:

指定打包的類型

<packaging>jar</packaging>

Spring Boot Maven打包插件spring-boot-maven-plugin,該插件將項(xiàng)目打成一個(gè)可執(zhí)行的jar包宦赠,包括把應(yīng)用程序的所有依賴打入jar文件內(nèi)陪毡,能讓你在命令行用java -jar來運(yùn)行應(yīng)用程序。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
            </configuration>                
        </plugin>
    </plugins>
</build>

使用eclipse打包

右鍵項(xiàng)目選擇Run As->Maven build勾扭,在彈出框的Goals輸入clean package點(diǎn)擊Run即可毡琉。

打包前在項(xiàng)目的根目錄下會(huì)發(fā)現(xiàn)一個(gè)空的target文件夾,打包生成的文件會(huì)放在這個(gè)文件夾內(nèi)妙色,打包前:

在這里插入圖片描述

打包后:

在這里插入圖片描述

可以看到生成了一個(gè)jar文件桅滋。

執(zhí)行jar包

命令行進(jìn)入jar包所在的目錄,運(yùn)行Java -jar jar包名.jar即可啟動(dòng)項(xiàng)目身辨,此時(shí)啟動(dòng)瀏覽器訪問localhost:1188/demo/test可以看到與之前一樣的內(nèi)容丐谋。

命令行參數(shù)

在執(zhí)行jar包的時(shí)候我們也可以指定參數(shù),比如指定端口號(hào)為8089java -jar jar包名.jar --server.port=8089,也可以指定使用哪個(gè)環(huán)境的配置文件等很多東西煌珊,這里不一一概述了号俐。

結(jié)語(yǔ)

好了,Spring boot的一些基礎(chǔ)的配置就說到這里定庵,更多的內(nèi)容需要我們自己在不斷的實(shí)踐中繼續(xù)了解吏饿,下期內(nèi)容再見,bye~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蔬浙,一起剝皮案震驚了整個(gè)濱河市猪落,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌敛滋,老刑警劉巖许布,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異绎晃,居然都是意外死亡蜜唾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門庶艾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袁余,“玉大人,你說我怎么就攤上這事咱揍∮卑瘢” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)掩完。 經(jīng)常有香客問我噪漾,道長(zhǎng),這世上最難降的妖魔是什么且蓬? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任欣硼,我火速辦了婚禮,結(jié)果婚禮上恶阴,老公的妹妹穿的比我還像新娘诈胜。我一直安慰自己,他們只是感情好冯事,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布焦匈。 她就那樣靜靜地躺著,像睡著了一般昵仅。 火紅的嫁衣襯著肌膚如雪缓熟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天岩饼,我揣著相機(jī)與錄音荚虚,去河邊找鬼薛夜。 笑死籍茧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梯澜。 我是一名探鬼主播寞冯,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼晚伙!你這毒婦竟也來了吮龄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤咆疗,失蹤者是張志新(化名)和其女友劉穎漓帚,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體午磁,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡尝抖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了迅皇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昧辽。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖登颓,靈堂內(nèi)的尸體忽然破棺而出搅荞,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布咕痛,位于F島的核電站痢甘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏茉贡。R本人自食惡果不足惜产阱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望块仆。 院中可真熱鬧构蹬,春花似錦、人聲如沸悔据。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)科汗。三九已至藻烤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間头滔,已是汗流浹背怖亭。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坤检,地道東北人兴猩。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像早歇,于是被迫代替她去往敵國(guó)和親倾芝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容