使用 IDEA 創建 SpringBoot 項目
一、SpringBoot 案例實現源碼
博客地址:SpringBoot 綜合案例源碼
二、SpringBoot 相關配置
1. 快速創建 SpringBoot 項目
SpringBoot建議使用官方提供的工具來快速構建項目,網站:https://start.spring.io/ ,IDEA自帶該功能,但需要聯網使用, 也可以使用 https://start.springboot.io/
注意:官方提供的構建工具默認只能選擇固定的版本,有些版本之間的差異非常大,所以如果需要選擇某個版本可以自行在pom.xml文件中修改版本
1.1 新建項目
1.2 填寫項目信息
根據你需求填寫
1.3 勾選web依賴包
1.4 構建完成
2. springBoot標准項目結構
resources:資源文件,存放靜態文件,模板文件,配置文件
static:存放靜態文件
templates:存放模板文件
application.properties:springboot配置文件
3. springboot項目打包部署
springboot默認將項目打包成jar,然后獨立運行
3.1 加載maven插件
<!-- pom.xml中添加插件 -->
<build>
<plugins>
<!-- SpringBoot打包插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
3.2 maven命令打包
- 通過 maven 運行打包工具
- 打包成功之后,在項目的target包可以找到 jar 包
- 進入target源目錄,通過命令行的方式運行 jar(開發過程中我們直接運行啟動類就可以了)
- 打開cmd命令框, 運行: java -jar xxx.jar
注意:如果想修改項目端口, 可以: java -jar xxx.jar --server.port=8888,這里的優先級比在配置文件中的配置的端口號要高
4. SpringBoot優缺點
4.1 優點:
- 創建獨立運行的Spring應用程序
- 嵌入的Tomcat,無需部署war文件
- 簡化Maven配置
- 自動配置Spring
- 提供生產就緒型功能,如:日志,健康檢查和外部配置等
- 不要求配置 XML
- 非常容易和第三方框架集成起來
4.2 缺點:
-
版本更新較快,可能出現較大變化
-
因為約定大於配置,所以經常會出現一些很難解決的問題
5. 修改banner(了解)
5.1 修改 banner
SpringBoot提供了一些擴展點,比如修改banner,
例如:在resources根目錄中新建一個 banner.txt 文件,替換默認的banner,txt 內容如下:
_ooOoo_
o8888888o
88" . "88
(| -_- |)
O\ = /O
____/`---'\____
.' \\| |// `.
/ \\||| : |||// \
/ _||||| -:- |||||_ \
| | \\\ - /// | |
| \_| ''\---/'' | |
\ .-\__ `-` ___/-. /
___`. .' /--.--\ `. . __
."" '< `.___\_<|>_/___.' >'"".
| | : `- \`.;`\ _ /`;.`/ - ` : | |
\ \ `-. \_ __\ /__ _/ .-` / /
======`-.____`-.___\_____/___.-`____.-'======
`=---='
佛祖保佑 永無BUG
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
5.2 關閉 banner
#application.properties
#關閉banner
spring.main.banner-mode=off
6. 熱部署插件(了解)
除了使用JRebel來實現熱部署,還可以使用Springboot提供的spring-boot-devtools包來完成Springboot應用熱部署
<!-- SpringBoot熱部署插件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
SpringBoot重啟是reload重啟,通過監控classpath的變化,如果classpath中的文件發生變化,即觸發重啟.springboot通過兩個classpath來完成reload,一個basic classloader中加載不變的類(jar包中的類),一個restart classloader中加載classpath中的類(自己寫的類),重啟的時候,restart classloader中的類丟棄並重新加載
#默認排除的資源
spring.devtools.restart.exclude=static/**,templates/**,public/**
#增加額外的排除資源
spring.devtools.restart.additional-exclude=public/** #處理默認配置排除之外的
spring.devtools.restart.enabled=false #禁用自動重啟
7. 切換運行環境(了解)
在實際開發中,一個系統是有多套運行環境的,如開發時有開發的環境,測試時有測試的環境,不同的環境中,系統的參數設置是不同的,如:連接開發數據和測試數據庫的URL絕對是不同的,那么怎么快速的切換系統運行的環境,我們需要為不同的環境創建不同的配置文件。
- application-dev.properties
server.port=8081
- application-test.properties
server.port=8082
- 在application.properties中指定需要使用的環境即可
#指定使用的環境是dev
spring.profiles.active=dev
8.SpringBoot參數配置
8.1 參數來源
主要流程摘要:
1,命令行參數; 如: java -jar xxx.jar --server.port=80
2,ServletConfig和ServletContext;
3,操作系統環境變量;
4,application-{profile}.properties或者YAML文件;
5,application.properties或者YAML文件;
一般用的比較多的就是直接在application.properties或者YAML配置 , 其次是命令行啟動方式
application.properties語法
server.port=80
server.session-timeout=30
server.tomcat.uri-encoding=UTF-8
spring.datasource.url = jdbc:mysql://localhost:3306/crm
spring.datasource.username = root
spring.datasource.password = mymysql
spring.datasource.driverClassName = com.mysql.jdbc.Driver
vs
application.yml語法
server:
port: 80
session-timeout: 30
tomcat.uri-encoding: UTF-8
spring:
datasource:
url : jdbc:mysql://localhost:3306/crm
username : root
password : mymysql
driverClassName : com.mysql.jdbc.Driver
8.2 application.properties優先級
一個項目中可以有多個application.properties文件存放在不同目錄中,此時他們會遵循固定的優先級來處理有沖突的屬性配置, 優先級由高到底,高優先級的配置會覆蓋低優先級的配置
- 項目/config/application.properties
- 項目/application.properties
- classpath:config/application.properties
- classpath:application.properties
注意:一般都在classpath:application.properties做配置,其他方式不使用
9. 參數屬性綁定
9.1 准備工作
#application.properties
jdbc.username=root
jdbc.password=admin
9.2 @Value綁定單個屬性
@Controller
public class HelloController {
@Value("${jdbc.username}")
private String username;
@RequestMapping("/hello")
@ResponseBody
public Object hello(){
return "hello, springboot~" + username;
}
}
直接訪問/hello觀察username值,也可以在自定義的類上綁定, 注意前提是這個類必須交給spring容器管理
@Component
@ToString
@Setter
@Getter
public class MyData {
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
}
注入MyDataSource 測試value是否能取值
@Autowired
private MyData myData;
@RequestMapping("/value")
@ResponseBody
public Object value(){
return myData;
}
9.3 @ConfigurationProperties批量綁定屬性
若覺得上面的方式比較笨重, 可以把前綴抽取到@ConfigurationProperties中, 並且設置類屬性與需要綁定的參數名相同, 可實現自動綁定 ,
自定義類
@Component
@ToString
@Setter
@Getter
@ConfigurationProperties("jdbc") //相當於 @ConfigurationProperties(prefix="jdbc")
public class MyData {
private String username;
private String password;
}
或者在配置類中加入如下代碼:
/** * 獲取到 application.properties 中對應前綴為 jdbc. 后面的屬性名(username、password) * 並把屬性名對應的值設置到 MyData 對應的成員變量上,然后創建實例並交給 Spring 容器管理 */
@Bean
@ConfigurationProperties("jdbc")
public MyData myData() {
return new MyData();
}
10.系統日志
10.1 為什么要用日志?
- 比起System.out.println,日志框架更為靈活,可以把日志的輸出和代碼分離
- 日志框架可以方便的定義日志的輸出環境,控制台,文件,數據庫
- 日志框架可以方便的定義日志的輸出格式和輸出級別
10.2 SpringBoot中的日志介紹
-
Springboot默認已經開啟日志
默認的日志格式為: 時間 日志級別 線程ID 線程名稱 日志類 日志說明; -
Springboot的日志分為: 系統日志和應用日志;
-
日志級別,設置的級別越高,輸出的內容越少, 如果設置的級別為info, 則debug以及trace級別的都無法顯示
trace < debug < info < warn < error; -
Springboot默認選擇Logback作為日志框架,也能選擇其他日志框架,但是沒有必要
common-logging / java-logging / log4j / log4j2 / logback / slf4j; -
SpringBoot 默認日志級別是 info,因為 debug、trace 低於 info 級別,所以不會顯示,除非主動配置;
10.3 類中使用日志輸出
在我們自定義的類中如果要使用日志框架來輸出
方式1: 在類中定義一個靜態Logger對象
這里傳入當前類的作用是方便輸出日志時可以清晰地看到該日志信息是屬於哪個類的(導入的包是 org.slf4j)
private static final Logger log = LoggerFactory.getLogger(當前類.class);
方式2: 使用lombok提供的@Slf4j注解來簡化代碼 , 其實和方式1的作用是一樣的
@Slf4j
@Service
public class PermissionServiceImpl implements IPermissionService {}
在需要輸出日志的地方使用日志的輸出方法
log.info(...);
log.error(...);
...
//輸出日志中有變量可以使用{}作為占位符
log.info("刪除id為{}的數據", id);
如果要修改日志級別,最快速的方式是在application.properties配置
#把日志級別修改為debug,不過我們一般不會更改,除非要調試找bug,不然控制台顯示的內容太多也容易亂
logging.level.root=debug
10.4 Logback配置文件的使用
Logback框架默認會自動加載classpath:logback.xml,作為框架的配置文件,在SpringBoot中使用時,還會額外的支持自動加載classpath:logback-spring.xml,在SpringBoot中推薦使用logback-spring.xml,功能更強大些
樣板文件:
<?xml version="1.0" encoding="UTF-8"?>
<!-- scan:開啟日志框架的熱部署,默認值true表示開啟 scanPeriod:熱部署的頻率,默認值60 second debug:設置輸出框架內部的日志,默認值false -->
<configuration scan="true" scanPeriod="60 second" debug="false">
<property name="appName" value="springboot demo" />
<contextName>${appName}</contextName>
<!-- appender:日志輸出對象,配置不同的類擁有不同的功能 ch.qos.logback.core.ConsoleAppender:日志輸出到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd-HH:mm:ss} %level [%thread]-%logger{35} >> %msg %n</pattern>
</encoder>
</appender>
<!-- ch.qos.logback.core.FileAppender:日志輸出到文件中 <appender name="fileAppender" class="ch.qos.logback.core.FileAppender"> <encoder> <pattern>%-4relative [%thread] %level %logger{35} - %msg %n</pattern> </encoder> <append>true</append> <file>mylog.log</file> </appender> -->
<!-- root是項目通用的logger,一般情況下都是使用root配置的日志輸出 level:按照級別輸出日志,日志級別,級別越高,輸出的內容越少 trace < debug < info < warn < error -->
<root level="info">
<appender-ref ref="STDOUT" />
</root>
<!-- 自定義的logger,用於專門輸出特定包中打印的日志 <logger name="cn.wolfcode.crm.mapper" level="trace"> </logger> -->
</configuration>
參考日志格式:
- %d{yyyy-MM-dd-HH:mm:ss} %level [%thread]-%class:%line >> %msg %n
格式中的標識符組成:
-
%logger{n}: 輸出Logger對象類名,n代表長度
-
%class{n}: 輸出所在類名,
-
%d{pattern}或者date{pattern}: 輸出日志日期,格式同java
-
%L/line: 日志所在行號
-
%m/msg: 日志內容
-
%method: 所在方法名稱
-
%p/level: 日志級別
-
%thread: 所在線程名稱
總結
以上就是 SpringBoot 基本配置的介紹了,代碼僅供參考,歡迎討論交流。
SpringBoot 項目入門請看我上一篇博客,博客地址:SpringBoot快速入門(解析+入門案例源碼實現)