Spring Boot 入門
一、前言
Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。通過這種方式,Spring Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成為領導者。本文介紹用idea搭建springboot
二、環境搭建
idea搭建springboot步驟如下:
1.打開IDEA,創建新項目,選擇Spring Initializr
2.輸入Artifact
3.勾選Web
4.點擊finish完成
5.進入項目,可以將mvn、mvnw、mvnw.刪除得到如下項目目錄結構
2.1 添加依賴
在 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> <groupId>com.example</groupId> <artifactId>springbootdemo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>springbootdemo</name><description>Demo project for Spring Boot</description> <!--起步依賴--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <!--開發web項目相關依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--springboot單元測試--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <!--maven構建--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2.2 目錄和配置文件含義
application.properties:用於配置項目運行所需的配置數據。
static:用於存放靜態資源,如:css、js、圖片等。
templates:用於存放模板文件。
目錄結構如下:
2.3 啟動類
7.程序自動生成的SpringbootdemoApplication,會有一個@SpringBootApplication的註解,這個註解用來標明這個類是程序的入口,如下:
package com.ggband; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** 該註解指定項目為springboot,由此類當作程序入口 自動裝配 web 依賴的環境 **/ @SpringBootApplication public class SpringbootApplication { public static void main(String[] args) { SpringApplication.run(SpringbootApplication.class, args); } }
@SpringBootApplication開啟了Spring的組件掃描和springboot的自動配置功能,相當於將以下三個註解組合在了一起
(1)@Configuration:表名該類使用基於Java的配置,將此類作為配置類
(2)@ComponentScan:啟用註解掃描
(3)@EnableAutoConfiguration:開啟springboot的自動配置功能
2.4 案例演示
創建 com.ggband.web包,在該包下創建一個 Controller 類,如下:
package com.ggband.web; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class WelcomeController { @RequestMapping("/hello") public String hello() { return "hello,this is a springboot demo"; } }
在 SpringbootApplication 文件中右鍵 Run as -> Java Application。當看到 “Tomcat started on port(s): 8080 (http)” 字樣說明啟動成功。
打開瀏覽器訪問 http://localhost:8080/hello,結果如下:
三、多環境切換
application.properties 是 springboot 在運行中所需要的配置信息。
當我們在開發階段,使用自己的機器開發,測試的時候需要用的測試服務器測試,上線時使用正式環境的服務器。
這三種環境需要的配置信息都不一樣,當我們切換環境運行項目時,需要手動的修改多出配置信息,非常容易出錯。
為了解決上述問題,springboot 提供多環境配置的機制,讓開發者非常容易的根據需求而切換不同的配置環境。
在 src/main/resources 目錄下創建三個配置文件:
application-dev.properties:用於開發環境
application-test.properties:用於測試環境
application-prod.properties:用於生產環境
我們可以在這個三個配置文件中設置不同的信息,application.properties 配置公共的信息。
在 application.properties 中配置:
spring.profiles.active=dev
表示激活 application-dev.properties 文件配置, springboot 會加載使用 application.properties 和 application-dev.properties 配置文件的信息。
同理,可將 spring.profiles.active 的值修改成 test 或 prod 達到切換環境的目的。
四、配置日誌
4.1 配置 logback(官方推薦使用)
4.1.1 配置日誌文件
spring boot 默認會加載 classpath:logback-spring.xml 或者 classpath:logback-spring.groovy。
如需要自定義文件名稱,在 application.properties 中配置 logging.config 選項即可。
在 src/main/resources 下創建 logback-spring.xml 文件,內容如下:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 文件輸出格式 --> <property name="PATTERN" value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) |-%-5level [%thread] %c [%L] -| %msg%n" /> <!-- test文件路徑 --> <property name="TEST_FILE_PATH" value="d:/test.log" /> <!-- pro文件路徑 --> <property name="PRO_FILE_PATH" value="/opt/test/log" /> <!-- 開發環境 --> <springProfile name="dev"> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${PATTERN}</pattern> </encoder> </appender> <logger name="com.light.springboot" level="debug" /> <root level="info"> <appender-ref ref="CONSOLE" /> </root> </springProfile> <!-- 測試環境 --> <springProfile name="test"> <!-- 每天產生一個文件 --> <appender name="TEST-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 文件路徑 --> <file>${TEST_FILE_PATH}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 文件名稱 --> <fileNamePattern>${TEST_FILE_PATH}/info.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 文件最大保存歷史數量 --> <MaxHistory>100</MaxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${PATTERN}</pattern> </layout> </appender> <root level="info"> <appender-ref ref="TEST-FILE" /> </root> </springProfile> <!-- 生產環境 --> <springProfile name="prod"> <appender name="PROD_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${PRO_FILE_PATH}</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${PRO_FILE_PATH}/warn.%d{yyyy-MM-dd}.log</fileNamePattern> <MaxHistory>100</MaxHistory> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${PATTERN}</pattern> </layout> </appender> <root level="warn"> <appender-ref ref="PROD_FILE" /> </root> </springProfile> </configuration>
其中,springProfile 標簽的 name 屬性對應 application.properties 中的 spring.profiles.active 的配置。
即 spring.profiles.active 的值可以看作是日誌配置文件中對應的 springProfile 是否生效的開關。
4.2 配置 log4j2
4.2.1 添加依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
4.2.2 配置日誌文件
spring boot 默認會加載 classpath:log4j2.xml 或者 classpath:log4j2-spring.xml。
如需要自定義文件名稱,在 application.properties 中配置 logging.config 選項即可。
log4j2.xml 文件內容如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <properties> <!-- 文件輸出格式 --> <property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} |-%-5level [%thread] %c [%L] -| %msg%n</property> </properties> <appenders> <Console name="CONSOLE" target="system_out"> <PatternLayout pattern="${PATTERN}" /> </Console> </appenders> <loggers> <logger name="com.light.springboot" level="debug" /> <root level="info"> <appenderref ref="CONSOLE" /> </root> </loggers> </configuration>
log4j2 不能像 logback 那樣在一個文件中設置多個環境的配置數據,只能命名 3 個不同名的日誌文件,分別在 application-dev,application-test 和 application-prod 中配置 logging.config 選項。
除了在日誌配置文件中設置參數之外,還可以在 application-*.properties 中設置,日誌相關的配置:
logging.config # 日誌配置文件路徑,如 classpath:logback-spring.xml
logging.exception-conversion-word # 記錄異常時使用的轉換詞
logging.file # 記錄日誌的文件名稱,如:test.log
logging.level.* # 日誌映射,如:logging.level.root=WARN,logging.level.org.springframework.web=DEBUG
logging.path # 記錄日誌的文件路徑,如:d:/
logging.pattern.console # 向控制臺輸出的日誌格式,只支持默認的 logback 設置。
logging.pattern.file # 向記錄日誌文件輸出的日誌格式,只支持默認的 logback 設置。
logging.pattern.level # 用於呈現日誌級別的格式,只支持默認的 logback 設置。
logging.register-shutdown-hook # 初始化時為日誌系統註冊一個關閉鉤子
五、配置freemarker模板引擎
5.1 添加freemarker依賴
<!-- 添加freemarker資源 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
5.2 在templates創建index.ftl模板文件
5.2 創建Controller文件
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class WebController { @RequestMapping("/index") public ModelAndView index(ModelAndView modelAndView) { modelAndView.addObject("name","世界"); modelAndView.setViewName("index"); return modelAndView; } }
5.3 測試運行http://localhost:8080/index
5.4 spring boot freemarker常用配置
模板文件默認在項目classpath:/templates/下,開發者也可以自己自動定義配置:
在application.properties添加自定義配置:
# freemarker config spring.freemarker.allow-request-override=false spring.freemarker.allow-session-override=false spring.freemarker.cache=false spring.freemarker.charset=UTF-8 spring.freemarker.check-template-location=true spring.freemarker.content-type=text/html spring.freemarker.enabled=true spring.freemarker.expose-request-attributes=false spring.freemarker.expose-session-attributes=false spring.freemarker.expose-spring-macro-helpers=true spring.freemarker.prefer-file-system-access=true spring.freemarker.suffix=.ftl #設定ftl文件路徑 spring.freemarker.template-loader-path=classpath:/templates/ spring.freemarker.settings.template_update_delay=0 spring.freemarker.settings.default_encoding=UTF-8 spring.freemarker.settings.classic_compatible=true spring.freemarker.settings.date_format=yyyy-MM-dd spring.freemarker.settings.time_format=HH:mm:ss spring.freemarker.settings.datetime_format=yyyy-MM-dd HH:mm:ss spring.freemarker.order=1
六、打包運行
打包的形式有兩種:jar 和 war。
6.1 打包成可執行的 jar 包
默認情況下,通過 maven 執行 package 命令後,會生成 jar 包,且該 jar 包會內置了 tomcat 容器,因此我們可以通過 java -jar 就可以運行項目,如下圖:
6.2 打包成部署的 war 包
讓 SpringbootApplication 類繼承 SpringBootServletInitializer 並重寫 configure 方法,如下:
@SpringBootApplication
public class SpringbootApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringbootApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
修改 pom.xml 文件,將 jar 改成 war,如下:
<packaging>war</packaging>
打包成功後,將 war 包部署到 tomcat 容器中運行即可。
Spring Boot 入門