前言
上一篇博客中介紹了如何創(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è)注解:
-
@Configuration:表示將當(dāng)前類作為Spring的配置類佩憾,經(jīng)常配合
@Bean
使用將某個(gè)對(duì)象注冊(cè)到Spring上下文畔塔。 - @EnableAutoConfiguration:表示啟動(dòng)程序時(shí)自動(dòng)加載Spring boot的默認(rèn)配置。
-
@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.properties
或application.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.name
和blog.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/test
或127.0.0.1:1188/demo/test
得到如下結(jié)果:
由圖可以看出淘正,我們拿到了在配置文件中自定義屬性的值admin
和1234
。
這里有一點(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~