[toc]java
從上篇文章中知道@SpringBootApplication
是加載啓動類上的一個組合註解,源碼定義:web
@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 { //other code... }
能夠看到這個註解包含了@SpringBootConfiguration
、@EnableAutoConfiguration
、@ComponentScan
三個經常使用的註解,他們的做用以下:spring
@Service
、@Repository
、@Component
、@Controller
、@RestController
、@Configuration
等),默認掃描的類都位於當前類所在包的以及子包,所以一般將啓動類放在項目根包中SpringBoot完成了大量的自動化配置,可是開發過程當中,不免須要咱們本身定義配置一些信息,好比數據庫的配置,所以SpringBoot提供了properties配置,SpringBoot會默認讀取application.properties
中的配置信息。 SpringBoot項目中的application.properties
的存放位置以及優先級關係:數據庫
application.properties
的配置信息以鍵值對(key = value)的形式編寫:tomcat
server.port=8080 user.name=gongSir user.major=computer user.grade=2017 server.error.path=/error
YAML是JSON的超集,是一種專門用來寫配置文件的語言,簡介而強大,能夠用來替代application.properties。YAML簡單易上手,用縮進表示層級關係,區分大小寫。 如今改寫上文的properties,將文件後綴改爲yml,即application.yml
:服務器
server: port: 8080 error: /error user: name: gongSir major: computer grade: 2017
不管是properties仍是yaml配置都會被SpringBoot加載到environment中。spring提供了@Value註解以及EnvironmentAware接口將Spring Environment中的數據注入到bean屬性上,demo以下: 首先在pom中引入依賴:session
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
如今來讀取上文的user信息,寫一個bean:app
@Component //user是前綴 @ConfigurationProperties(prefix = "user") public class User { private String name; private String major; private String grade; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMajor() { return major; } public void setMajor(String major) { this.major = major; } public String getGrade() { return grade; } public void setGrade(String grade) { this.grade = grade; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", major='" + major + '\'' + ", grade='" + grade + '\'' + '}'; } }
添加一個/user
接口:ide
@RestController public class HelloController { @GetMapping(path = "/hello") public String hello(){ return "hello spring boot!"; } @Autowired User user; @GetMapping(path = "/user") public String user(){ System.out.println(user); return user.toString(); } }
使用@Autowired註解注入註冊的bean信息,而後接口輸出信息: 使用@Value註解,修改上述代碼:spring-boot
@RestController public class HelloController { @GetMapping(path = "/hello") public String hello(){ return "hello spring boot!"; } @Value("${user.name}") String myName; @Autowired User user; @GetMapping(path = "/user") public String user(){ System.out.println("myName: "+myName); System.out.println(user); return user.toString(); } }
控制檯:
在生產開發過程當中,項目上線以前,常常須要切換運行環境,即在開發環境、測試環境、預發佈、發佈環境以前切換,而這些不一樣的環境每每有不一樣的配置文件信息,每次都去修改application.properties不免複雜繁瑣,SpringBoot提供了很好的解決方案,SpringBoot中約定了不一樣環境下配置文件的名稱規則爲application-{profile}.properties
(YAML同理),profile表示當前環境的名稱,具體配置: 一、建立配置文件 假設如今有test和dev兩個環境,咱們在resource
下分別建立==application-test.properties==、==application-dev.properties==,分別表示測試環境和開發環境的配置,簡單配置: ==application-dev.properties==:
server.port=8080
==application-test.properties==:
server.port=8081
二、修改application.properties
接下來咱們在==application.properties==中配置環境名稱便可:
spring.profiles.active=dev
演示test環境啓動: 演示dev環境啓動:
SpringBoot內置了默認的tomcat服務器,所以不須要特別配置,如需修改tomcat端口等信息,可在上文中的application.properties
文件中配置:
#端口號 server.port=8081 #錯誤頁面 server.error.path=/error #session失效時間 server.servlet.session.timeout=30m #Tomcat的請求編碼 server.tomcat.uri-encoding=utf-8
更多配置參考官方文檔!
除了Tomcat,SpringBoot也支持嵌入Jetty,配置以下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 取出Tomcat默認項 --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!-- 嵌入Jetty服務器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency>
由於SpringBoot默認在web中內嵌了Tomcat,所以須要從web中去除tomcat,而後加入Jetty依賴便可。 啓動項目:
SpringBoot項目啓動時會在後臺打印一個banner,以下圖: 咱們也能夠本身定製想要的啓動頁: 在resource
目錄下新建一個==banner.txt==文件,把想打印的字符保存在這個TXT裏面,SpringBoot啓動時,就會打印出來: 也能夠定製藝術字體,直接去這裏定製,而後複製到banner中便可!
本文主要介紹SpringBoot的基礎配置,包括啓動註解、配置文件、服務器配置等。待續......