微框架,與 Spring4 一塊兒誕生,基於約定、生來爲了簡化 spring 的配置html
須要的Java版本:1.8+前端
起步依賴實際上就是一個 Maven 項目對象模型,定義了對其餘庫的傳遞依賴。這些東西加在一塊兒支持某項功能。從必定程度上規避了依賴衝突問題java
對於一些約定的屬性,springboot 在 spring-boot-autoconfigure 包下 META-INF/spring-configuration-metadata.json 文件中進行了默認屬性配置。若是咱們不經過配置文件覆蓋這個配置,在應用程序啓動時,若是應用程序啓動條件符合註解的要求,就會採用這些默認配置來完成應用的初始化配置。若是咱們覆蓋這個配置,就會採用咱們定義的配置mysql
原理分析:web
@SpringBootConfiguration // 至關於 @Configuration @EnableAutoConfiguration // 開啓自動配置 @ComponentScan( // 配置註解掃描。掃描該包及其子包的註解 excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} ) public @interface SpringBootApplication {}
使用IDEA能夠快速的建立 springboot 項目,固然也能夠經過建立 Maven 工程並導入依賴來新建 springboot 項目redis
快速建立的工程只能選擇最新的幾個版本,若是想使用老版本能夠在工程搭建完成後手動更改版本號spring
SpringBoot使用一個全局的配置文件,而且名稱是固定的,配置文件有兩種(截圖自來自spring-boot-starter-parent-1.5.9.RELEASE.pom):sql
由該 pom 文件也能夠得出一個結論,當同時存在 .yml 和 .properties 配置文件且配置了相同的參數時,會由於後加載 properties 而致使 yml 裏面的相同配置配覆蓋。固然實際開發也幾乎不會有人這麼作數據庫
application.properties 就是常規的 key=value 格式配置文件,當要配置的參數比較多就會發現他的層次不是那麼清晰,不便於閱讀apache
yml(也叫yaml):是一種以數據爲中心的配置文件, 比 json,xml 等更適合作配置文件
key:(空格)value ---> 鍵和值中間用冒號空格!!!鏈接,記住是冒號空格,缺一不可
不一樣層級的關係用空格表示,只要是左對齊的一列數據,都是同一層級的:
server: port: 8888
默認不用加引號,
若是加上 「」 雙引號,雙引號內的特殊字符將做爲自己的意思展現
若是加上 ‘’ 單引號,單引號內的特殊字符將會被轉義
在下一行來寫對象的屬性和值的關係;注意縮進
user: name: yaya age: 18 address: xian firends: {name: zhangsan, age: 18} # map裏面的 冒號後面也得有 空格
用 - 值表示數組中的一個元素
arr: - 1 - 2 - 3
person: # 前綴名 name: yaya age: 18 address: 西安 arr: - 1 - 2 - 3 friend: {name: zs,age: 13} son: name: 張三 age: 13
@Component // 配置 Bean 被 Spring 容器管理 @ConfigurationProperties(prefix = "person") // 配置文件和實體進行映射,配置前綴,這裏對應 yml 文件中的對象名 public class User { private String name; private int age; private String address; private List<Integer> arr; private Map<String, Object> friend; private Son son; // 引入一個外部類 setter/getter ... }
public class Son{ // 該類不用加任何註解,框架仍是會將 yml 中的屬性映射到該類的屬性上 private String name; private int age; }
@Value 獲取值和 @ConfigurationProperties 獲取值的比較:
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的屬性 | 一個個指定 |
鬆散綁定(鬆散語法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303數據校驗 | 支持 | 不支持 |
複雜類型封裝 | 支持 | 不支持 |
public class Person { private String name; @JsonIgnore // 轉換時忽略該字段 private Integer age; // Json格式化 @JsonFormat(pattern = "yyyy年MM月dd日 HH:mm:ss", locale = "zh", timezone = "GMT+8") private Date birthday; }
@RequestMapping("/person") public Person person(){ Person p = new Person(); p.setName("張三"); p.setAge(23); p.setBirthday(new Date()); System.out.println(p); return p; }
這時,返回的JSON數據中就不會出現 age 屬性,而且對 birthday 進行了格式化
{"name":"張三","birthday":"2019年08月07日 15:34:45"}
忽略null屬性
若是前端須要將 null 返回爲空串/不返回,咱們可使用。
@JsonInclude(content = JsonInclude.Include.NON_NULL) // 若是該屬性爲 null,則它不參與序列化
注意:在 spring-boot 1.5.9 版本中, @JsonInclude 註解沒有對 value 和 content 關聯(沒有在 content 上配置 @AliasFor 註解),因此剛剛上面的配置是無效的。採用下面的配置:
@JsonInclude(JsonInclude.Include.NON_NULL)
也能夠在 yml 文件中配置全局忽略,配置方法以下:
spring: jackson: default-property-inclusion: non_null
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <!-- 關閉此項的依賴傳遞,即別的項目依賴該項目時,不會傳遞依賴此jar --> <optional>true</optional> </dependency>
spring: freemarker: cache: true # 關閉thymeleaf的頁面緩存 devtools: remote: restart: enabled: false # 熱部署開關 restart: additional-paths: springboot-demo/src/main/java # 設置重啓的目錄,對那個目錄的文件進行修改後須要重啓 exclude: static/** # 設置classpath下 static 目錄內容修改後不重啓。通常設置爲靜態資源目錄
有時咱們採用一些本身定義的資源文件(非 application.xxx )想要獲取裏面的屬性值時,須要採用如下配置
<!-- 配置文件處理器依賴,配置後能夠進行資源配置文件的加載 --> <!-- 配置這個依賴後,書寫yml文件時自定義的屬性會有提示 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
@Configuration // 也是一個 @Component 語義化註解 @ConfigurationProperties(value = "admin") // 配置文件中共有的前綴名 @PropertySource(value = "classpath:user.properties") // 資源文件的位置 public class Admin implements Serializable { private String username; private String password; }
server: port: 8888 # 端口號 session-timeout: 60 # session 超時時間/分鐘,默認是30 context-path: /demo # 全局虛擬路徑 error: path: /error.html # 錯誤跳轉頁 tomcat: uri-encoding: utf-8 # 設置tomcat編碼
導入FreeMarker啓動器
<!-- freemarker --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
配置 freemarker
spring: freemarker: cache: false # 關閉freemarker緩存。即時刷新。上線環境建議修改成 true template-loader-path: classpath:/template # 模板文件的路徑 charset: UTF-8 # 編碼,默認也是u8 check-template-location: true # 檢查模板路徑 content-type: text/html # 默認也是 text/html
添加 mybatis 起步依賴,mysql 數據庫依賴
<!-- mybatis起步依賴 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!-- mysql數據庫依賴 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
在 yml 文件中配置數據源
spring: datasource: username: keats password: 521 url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC driver-class-name: com.mysql.jdbc.Driver # 對於mysql數據庫鏈接版本 v6+ 這個驅動要修改爲 com.mysql.cj.jdbc.Driver。固然也能夠什麼都不寫用默認的
MyBatis相關配置
mybatis: mapper-locations: classpath:mapping/*Mapping.xml # 配置 mapper 文件所在的路徑 type-aliases-package: cn.keats.mybatisdemo.pojo # 配置這個包下的全部類起別名
建立實體類
public class User implements Serializable { private Integer id; private String username; private String password; private Date birthday; setter/getter ... }
建立映射關係接口
接口要添加 @Mapper 註解,這樣容器中才會有接口的實現類
@Mapper // public interface UserMapper { @Select("select * from user where id = #{id}") User selectById(Integer id); // 採用註解的方式書寫SQL語句 void insert(User user); // 採用mapper配置文件的方式書寫SQL語句 }
Mapper映射文件,四個要求
namespace 等於 UserMapper 接口的全限定名
id 等於 方法名
parameterType 等於方法的參數類型
resaultType 等於方法的返回值類型
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper namespace="cn.keats.mybatisdemo.mapper.UserMapper"> <insert id="insert" parameterType="user"> insert into user values (null , #{username}, #{password}, #{birthday}) </insert> </mapper>
導入Redis啓動器
<!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
配置host和端口
其實從圖中能夠看出,springboot默認對Redis的配置就是 localhost:6379 因此若是Redis也是這個路徑,能夠不用自行配置