前言
上一篇博客中介紹了如何創(chuàng)建一個簡單的Spring boot應(yīng)用,本篇文章介紹Spring boot中的一些基本配置,只有認(rèn)識和了解這些配置,才能為我們以后的深入學(xué)習(xí)Spring boot做好鋪墊。
文章首發(fā)于個人博客:【http://www.xiongfrblog.cn】
入口類
首先,我們在新建一個Spring boot項目的時候,Spring boot會自動為我們在包的根目錄下創(chuàng)建一個名為xxxApplication.java的啟動類,該啟動類是我們項目的入口類,包含一個main方法,執(zhí)行該方法就啟動了項目。
啟動類中有一個核心的注解@SpringBootApplication,它是一個組合注解,包含以下三個注解:
-
@Configuration:表示將當(dāng)前類作為Spring的配置類,經(jīng)常配合
@Bean使用將某個對象注冊到Spring上下文。 - @EnableAutoConfiguration:表示啟動程序時自動加載Spring boot的默認(rèn)配置。
-
@ComponentScan:表示啟動程序時自動掃描當(dāng)前包及子包下所有交由Spring管理的類,比如被
@Component,@Service,@Controller等標(biāo)記的類。
注意
上邊說過啟動類一般放在包的根目錄下,是因為@ComponentScan注解默認(rèn)掃描當(dāng)前包及子包,如果需要指定掃描路徑,需要加上參數(shù),例如
@ComponentScan("com.example.demo.dao")。
Spring boot官方配置了@SpringBootApplication注解來替代上邊介紹的三個注解,更加簡潔明了。
全局配置文件
Spring boot使用一個全局的配置文件application.properties或application.yml,該配置文件一般位于src/main/resource目錄下,兩種配置文件唯一的區(qū)別就在于書寫的格式不一樣,現(xiàn)在比較主流的是application.yml格式的配置文件,要熟練使用該種格式的配置文件需要熟悉基礎(chǔ)的yaml語法,這里不做過多介紹,本篇博客均使用application.properties格式的配置文件,下面介紹兩個最基本的配置。
修改項目啟動端口
server.port=1188
修改訪問項目的默認(rèn)路徑
一般訪問項目的根路徑默認(rèn)localhost:11188,但是有時候我們會在訪問路徑上加上當(dāng)前項目的名字,這時候就需要修改默認(rèn)的訪問路徑了。
#spring boot版本2.0以下
server.context-path=/demo
#spring boot版本2.0以上
server.servlet.context-path=/demo
這里根據(jù)Spring boot的版本不同有不同的配置們大家根據(jù)自己的版本選擇對應(yīng)的屬性名即可,由于我的Spring boot版本是2.1.2,所以選擇server.servlet.context-path的屬性名,此時訪問項目的根路徑就的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.
這里就不列舉了,太多了,具體可以查閱官方文檔【傳送門】
自定義屬性
在實際項目中,很多情況我們需要定義一些全局屬性,在需要的地方注入使用即可,Spring boot允許我們在application.properties下自定義一些屬性,下面介紹自定義屬性并且使用。
在配置文件中定義屬性
blog.login.name=admin
blog.login.pass=1234
我們在application.properties定義了blog.login.name和blog.login.pass兩個屬性。
注入自定義屬性
為了方便演示,我們定義一個名為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(屬性名名)的方式注入我們自定義的屬性,此時啟動項目瀏覽器訪問localhost:1188/demo/test或127.0.0.1:1188/demo/test得到如下結(jié)果:

由圖可以看出,我們拿到了在配置文件中自定義屬性的值admin和1234。
這里有一點需要大家特別注意,只有在被Spring管理的類中才能注入屬性,比如上文中我們的
TestController.java控制器類名上加了@Controller注解,表明將此類交由Spring管理。
簡單驗證
新建一個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();
}
重啟項目,瀏覽器訪問localhost:1188/demo/check,此時得到如下結(jié)果:

可以看到輸出為null,正是因為我們的Text.java類沒有交由Spring管理,所以Spring并沒有為我們自動注入屬性,這點一定要注意!
熱部署
從之前的操作中,很多小伙伴肯定已經(jīng)發(fā)現(xiàn)了我們每次對項目做修改的時候都需要手動重啟項目才能夠正確訪問到新的內(nèi)容,這對我們平常的開發(fā)來說肯定非常不友好的,別擔(dān)心,Spring boot也為我們設(shè)計了熱部署功能,修改完代碼保存之后Spring boot會自動重啟加載最新的內(nèi)容,只需要我們簡單的配置即可。
Devtools
Spring為開發(fā)者提供了一個名為spring-boot-devtools的模塊來使Spring boot應(yīng)用支持熱部署,提高開發(fā)者的開發(fā)效率,無需手動重啟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)容(其實不添加也可以,因為默認(rèn)就是打開的,這里提出來是方便有時候可以關(guān)閉熱部署。)
spring.devtools.restart.enabled: true
需要關(guān)閉熱部署功能時將屬性值設(shè)置為false即可。
好了,至此熱部署的功能就已經(jīng)配置完成了,現(xiàn)在可以啟動項目,然后隨便修改一個文件保存,你會發(fā)現(xiàn)控制臺已經(jīng)更新了日志,等待項目重新啟動之后發(fā)現(xiàn)更新的內(nèi)容已經(jīng)展示在瀏覽器上了。
Profile配置
在實際的企業(yè)級開發(fā)過程中,我們總是有開發(fā)環(huán)境,生產(chǎn)環(huán)境等不同的環(huán)境,同一個項目在每一個不同的環(huán)境需要的配置總是不一樣的,這時候如果每換一個環(huán)境就修改一次application.properties配置文件的內(nèi)容,對開發(fā)人員來說是非常糟糕的體驗,所以Spring boot為我們提供了不同環(huán)境指定特定的配置文件的功能,而我們只需要簡單的配置即可,完美解決難題。
多環(huán)境配置文件必須以application-{profile}.properties的格式命名,其中{profile}為環(huán)境標(biāo)識,比如我們有一個開發(fā)環(huán)境需設(shè)置啟動端口為1188,一個生產(chǎn)環(huán)境需設(shè)置啟動端口為1189,兩個配置文件分別為:
- application-dev.properties:開發(fā)環(huán)境
server.port=1188 - application-prod.properties:生成環(huán)境
server.port=1189
啟動項目具體加載哪個配置文件需要在application.properties配置文件中添加如下代碼指定(比如我們使用開發(fā)環(huán)境):
spring.profiles.active=dev
項目打包
pom.xml配置
Spring boot可以將項目打成不同類型的包,比如jar包,war包,pom包等,這里我們只介紹最長用的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,該插件將項目打成一個可執(zhí)行的jar包,包括把應(yīng)用程序的所有依賴打入jar文件內(nèi),能讓你在命令行用java -jar來運行應(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打包
右鍵項目選擇Run As->Maven build,在彈出框的Goals輸入clean package點擊Run即可。
打包前在項目的根目錄下會發(fā)現(xiàn)一個空的target文件夾,打包生成的文件會放在這個文件夾內(nèi),打包前:
打包后:
可以看到生成了一個jar文件。
執(zhí)行jar包
命令行進(jìn)入jar包所在的目錄,運行Java -jar jar包名.jar即可啟動項目,此時啟動瀏覽器訪問localhost:1188/demo/test可以看到與之前一樣的內(nèi)容。
命令行參數(shù)
在執(zhí)行jar包的時候我們也可以指定參數(shù),比如指定端口號為8089java -jar jar包名.jar --server.port=8089,也可以指定使用哪個環(huán)境的配置文件等很多東西,這里不一一概述了。
結(jié)語
好了,Spring boot的一些基礎(chǔ)的配置就說到這里,更多的內(nèi)容需要我們自己在不斷的實踐中繼續(xù)了解,下期內(nèi)容再見,bye~