1. 程式人生 > >SpringBoot入門及YML檔案詳解

SpringBoot入門及YML檔案詳解

SpringBoot

簡介

微框架,與 Spring4 一起誕生,基於約定、生來為了簡化 spring 的配置

優點

  • 可以快速的上手,整合了一些子專案(開源框架或者第三方開源庫)
  • 可以依賴很少的配置快速的搭建專案
  • 基於 spring 使開發者快速入門,門檻很低。
  • 可以建立獨立執行的應用而不需要依賴容器
  • 提供很多 maven 極簡配置,缺點是會引入很多不需要的包
  • 提供視覺化的相關功能,方便監控
  • 簡化配置

使用場景

  • 有 Spring 的地方都行
  • J2EE/web 專案
  • 微服務的基礎

需要的Java版本:1.8+

核心功能

起步依賴

起步依賴實際上就是一個 Maven 專案物件模型,定義了對其他庫的傳遞依賴。這些東西加在一起支援某項功能。從一定程度上規避了依賴衝突問題

自動配置

對於一些約定的屬性,springboot 在 spring-boot-autoconfigure 包下 META-INF/spring-configuration-metadata.json 檔案中進行了預設屬性配置。如果我們不通過配置檔案覆蓋這個配置,在應用程式啟動時,如果應用程式啟動條件符合註解的要求,就會採用這些預設配置來完成應用的初始化配置。如果我們覆蓋這個配置,就會採用我們定義的配置

原理分析:

@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 專案

快速建立的工程只能選擇最新的幾個版本,如果想使用老版本可以在工程搭建完成後手動更改版本號

配置檔案

SpringBoot使用一個全域性的配置檔案,並且名稱是固定的,配置檔案有兩種(截圖自來自spring-boot-starter-parent-1.5.9.RELEASE.pom):

由該 pom 檔案也可以得出一個結論,當同時存在 .yml 和 .properties 配置檔案且配置了相同的引數時,會因為後加載 properties 而導致 yml 裡面的相同配置配覆蓋。當然實際開發也幾乎不會有人這麼做

application.properties 就是常規的 key=value 格式配置檔案,當要配置的引數比較多就會發現他的層次不是那麼清晰,不便於閱讀

application.yml

yml(也叫yaml):是一種以資料為中心的配置檔案, 比 json,xml 等更適合做配置檔案

yml基本語法:

key:(空格)value ---> 鍵和值中間用冒號空格!!!連線,記住是冒號空格,缺一不可

不同層級的關係用空格表示,只要是左對齊的一列資料,都是同一層級的:

server:
 port: 8888
字串

預設不用加引號,

如果加上 “” 雙引號,雙引號內的特殊字元將作為本身的意思展示

如果加上 ‘’ 單引號,單引號內的特殊字元將會被轉義

物件、Map

在下一行來寫物件的屬性和值的關係;注意縮排

user:
  name: yaya
  age: 18
  address: xian
firends: {name: zhangsan, age: 18}
# map裡面的 冒號後面也得有 空格
陣列 List、Set

用 - 值表示陣列中的一個元素

arr:
  - 1
  - 2
  - 3
例:用yml構造一個物件
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資料校驗 支援 不支援
複雜型別封裝 支援 不支援

Bean對Json對映處理

@JsonIngore

@JsonFormat

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"}

@JsonInclude

忽略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

Devtools熱部署

  1. 在pom.xml中新增
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-devtools</artifactId> 
    <!-- 關閉此項的依賴傳遞,即別的專案依賴該專案時,不會傳遞依賴此jar -->
    <optional>true</optional>
</dependency>  
  1. 配置IDEA自動編譯
  2. 按 Ctrl+Shift+Alt+/ , 開啟 Registry .配置IDEA執行時自動編譯

一些額外的配置

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;
}

配置tomcat

server:
  port: 8888 # 埠號
  session-timeout: 60 # session 超時時間/分鐘,預設是30
  context-path: /demo # 全域性虛擬路徑
  error:
    path: /error.html # 錯誤跳轉頁
  tomcat:
    uri-encoding: utf-8 # 設定tomcat編碼

整合模板引擎

整合FreeMarker

匯入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

新增 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啟動器

 <!-- redis -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置host和埠

其實從圖中可以看出,springboot預設對Redis的配置就是 localhost:6379 所以如果Redis也是這個路徑,可以不用自行配置

相關推薦

SpringBoot入門YML檔案

SpringBoot 簡介 微框架,與 Spring4 一起誕生,基於約定、生來為了簡化 spring 的配置 優點 可以快速的上手,整合了一些子專案(開源框架或者第三方開源庫) 可以依賴很少的配置快速的搭建專案 基於 spring 使開發者快速入門,門檻很低。 可以建立獨立執行的應用而不需要依賴容器 提供

SpringBoot快速入門部分問題

前言 從根本上說,Spring Boot的專案就是普通的Spring專案,只是它在Spring的基礎上添加了起步依賴和自動配置而已。 建立專案 安裝Spring Boot CLI 建立專案有多種方式,最快的是安裝Spring Boot CLI。這裡我們採用軟體開

keepalived介紹配置檔案

keepalived介紹 Keepalived軟體起初是專為LVS負載均衡軟體設計的,用來管理並監控LVS集群系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。因此,Keepalived除了能夠管理LVS軟體外,還可以作為其他服務(例如:Nginx、Hapr

Nginx實戰之1.1-1.6 Nginx介紹,安裝配置檔案

1.1 Nginx介紹 HTTP協議發展簡史 加粗  https://coding.net/u/aminglinux/p/nginx/git/blob/master/http/version.md  1991年釋出0.9版,只有GET方法,僅支援html,一個連線一個請求 &n

NTP時間服務相關基礎配置檔案

NTPS時間服務的應用場景 在我們搭建伺服器叢集的時候,各個主機時間不同步會導致各種未知bug,我了避免這種事情的發生,我們就要保證各個伺服器的時間是一致的,而做一臺時間伺服器就能夠輕鬆地保證叢集中各個節點的時間時刻保持一致。 計算機時間 系統時間:是有Linux K

yum常用命令配置檔案

yum 屬於軟體包管理工具的一種,可以自動解決RPM包與包的依賴關係 它是紅帽系的shell軟體管理器,能夠從指定的伺服器自動下載RPM包並安裝,可自動處理依賴關係,無須再去解決RPM包令人嫌棄的依賴關係。 yum工作原理 yum在接受到安裝命令之後,會根據本地的yu

ELK & ElasticSearch 5.1 基礎概念配置檔案【轉】

轉自:https://blog.csdn.net/zxf_668899/article/details/54582849 1. 配置檔案 elasticsearch/elasticsearch.yml 主配置檔案 elasticsearch/jvm.options jvm引數配置檔案

SpringBoot之屬性配置檔案

在之前的各篇文章中都有提及關於application.properties的使用,主要用來配置資料庫連線、日誌相關配置等。除了這些配置內容之外,本文將具體介紹一些在application.properties配置中的其他特性和使用方法。 自定義屬性與載入 我們在使用Spring Boot的時候,通常也

Docker Compose 配置檔案 Docker-Compose.yml 檔案

先來看一份 docker-compose.yml 檔案,不用管這是幹嘛的,只是有個格式方便後文解說: version: '2' services: web: image: dockercloud/hello-world ports: - 80

nginx伺服器安裝配置檔案(轉載)

nginx在工作中已經有好幾個環境在使用了,每次都是重新去網上扒部落格,各種編譯配置,今天自己也整理一份安裝文件和nginx.conf配置選項的說明,留作以後參考。像負載均衡配置(包括健康檢查)、快取(包括清空快取)配置例項,請參考http://segmentfault.

JavaEE--SSH--structs2-執行流程配置檔案

struts2的執行流程:1.啟動tomcat伺服器.載入web.xml檔案2.讀取filter標籤建立核心過濾器(strutsPrepareAndExecuteFilter)物件,通過這個物件讀取strtus.xml檔案3.載入完struts.xml檔案後,此時初始化完成,

docker-compose常用命令配置檔案

1 -f: 標識用於指定Compose的配置檔案,可以指定多個,當沒有使用-f標識時,預設在專案跟目錄及其子目錄下尋找docker-compose.yml和docker-compose.override.yml檔案,至少需要存在docker-compose.yml檔案 2

nginx伺服器安裝啟動配置檔案

1.安裝Nginx 1.1 選擇穩定nginx版本 centos的yum不提供nginx安裝,通過配置官方yum源的方式獲取到的也只是原始碼包。所以我們找到了Nginx官網看下官方提供的安裝方式:Nginx原始碼包下載的官網地址(http://nginx

全網最詳細的Ceph14.2.5叢集部署配置檔案,快來看看吧! -- <2>

部署Ceph叢集 Ceph版本選擇 Ceph版本來源介紹 Ceph 社群最新版本是 14,而 Ceph 12 是市面用的最廣的穩定版本。 第一個 Ceph 版本是 0.1 ,要回溯到 2008 年 1 月。多年來,版本號方案一直沒變,直到 2015 年 4 月 0.94.1 ( Hammer 的第一個修正版)

SpringBoot入門筆記09——屬性配置檔案以及多環境配置

SpringBoot的外部配置 Spring Boot允許將配置外部化(externalize) ,這樣你就能夠在不同的環境下使用相同的程式碼。你可以使用properties檔案,YAML檔案,環境變數和命令列引數來外部化配置。使用@Value註解,可以直接將屬性值注入到beans中,然

docker-compose.yml 配置檔案專案釋出

一. 前言關於 docker compose 技術可以檢視官方文件 Docker Compose 以下的內容是確立在已經下載好 Docker 以及 Docker Compose,可參看 Docker Compose 的官方安裝教程 Install Docker Compose 二. Docker Comp

大數據入門初學者需要學習的內容學習路線

公司 hub spark 特征選擇 什麽是 group by 簡單 們的 如何使用 很多人都知道大數據很火,就業很好,薪資很高,想往大數據方向發展。但該學哪些技術,學習路線是什麽樣的呢? 大數據的三個發展方向,平臺搭建/優化/運維/監控、大數據開發/設計/架構、數據分析/挖

SpringBoot非官方教程 | 第二篇:Spring Boot配置檔案

springboot採納了建立生產就緒Spring應用程式的觀點。 Spring Boot優先於配置的慣例,旨在讓您儘快啟動和執行。在一般情況下,我們不需要做太多的配置就能夠讓spring boot正常執行。在一些特殊的情況下,我們需要做修改一些配置,或者需要有自己的配置屬性。 當我們

Spring boot 配置檔案 (properties 和yml )

從其他框架來看 我們都有自己的配置檔案, hibernate有hbm,mybatis 有properties, 同樣, Spring boot 也有全域性配置檔案。 Springboot使用一個全域性的配置檔案,而且配置檔案的名字是固定的。 有兩種 application.properties

SpringBoot學習第二篇:Spring Boot配置檔案

原文首發於:https://www.fangzhipeng.com/springboot/2017/07/11/springboot2-config-file/ 本文出自方誌朋的部落格 springboot採納了建立生產就緒Spring應用程式的觀點。 Spring Boot優先於配置的慣例,旨