2019年7月23日html
1.Spring Boot簡介java
簡化Spring應用開發的一個框架jquery
整個Spring技術棧的整合web
J2EE開發的一站式解決方案spring
2.微服務json
微服務:架構風格數組
一個應用應該是一組小型服務;能夠經過HTTP方式進行互通緩存
每個功能元素最終都是一個可獨立替換和獨立升級的軟件單元springboot
3.配置文件session
做用:修改SpringBoot自動配置的默認值
application.properties
application.yml
(1)yaml基本語法
k: v:表示一對鍵值對(空格必須有)
以空格的縮進來控制層級關係
屬性和值大小寫敏感
(2)值得寫法
字面量:普通的值(數字,字符串,布爾)
k: v:字面直接來寫
字符串默認不用加上單引號或者雙引號
"":雙引號不會轉義字符串裏面的特殊字符,特殊字符會做爲自己想表示的意思
'':單引號會轉義特殊字符,特殊字符最終只是一個普通的字符串數據
對象、Map(屬性和值)(鍵值對)
k: v:在下一行來寫對象的屬性和值的關係
對象仍是k: v的方式
friends:
lastName:zhangsan
age:20
行內寫法:
friends: {lastName: zhangsan,age: 18}
數組(List、Set)
用- 值表示數組中的一個元素
pets:
- cat
- dog
- pig
行內寫法
pets: [cat,dog,pig]
(3)配置文件值注入
配置文件:application.yml
server:
port: 8081
person:
lastName: zhangsan
age: 18
boss: false
birth: 2017/12/12
maps: {k1: v1,k2: 12}
lists: [lisi,zhaoliu]
dog: {name: 小狗,age: 12}
配置文件:application.properties
person.last-name=張三
person.age=18
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=dog
person.dog.age=15
javaBean:
/** * 將配置文件中每個屬性的值,映射到這個組件中 * @ConfigurationProperties:告訴SpringBoot將本類中全部屬性和配置文件中相關的配置進行綁定 * prefix = "person":配置文件中哪一個下面的全部屬性進行一一映射 * 只有這個組件是容器中的組件,才能使用容器提供的@ConfigurationProperties功能
* @ConfigurationProperties(prefix = "person")默認從全局配置文件中獲取值 */ @Component @ConfigurationProperties(prefix = "person") public class Person { private String lastName; private Integer age; private Boolean boss; private Date birth; private Map<String,Object> maps; private List<Object> lists; private Dog dog;
導入配置文件處理器
<!--導入配置文件處理器,配置文件進行綁定會有提示--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
@ConfigurationProperties獲取配置文件值
@Component
@ConfigurationProperties(prefix = "person")
@Value獲取文件值
public class Person { @Value("${person.last-name}") private String lastName; @Value("#{11*2}") private Integer age; @Value("true") private Boolean boss; private Date birth;
(4)@PropertySource&@ImportResource
@PropertySource:加載指定的配置文件
@PropertySource(value = {"classpath:***.properties"}) @Component @ConfigurationProperties(prefix = "person") public class Person { private String lastName; private Integer age; private Boolean boss; private Date birth;
@ImportResource:導入Spring的配置文件,讓配置文件裏面的內容生效
Spring Boot裏面沒有Spring的配置文件,咱們本身編寫的配置文件,也不能自動識別
@ImportResource({"classpath:***.xml"})
(5)Spring推薦使用@Bean給容器添加組件
/** * @Configuration:指明當前類是一個配置類,用來替代Spring配置文件 */ @Configuration public class MyAppConfig { //將方法的返回值添加到容器中:容器中這個組件默認的id就是方法名 @Bean public HelloService helloService(){ return new HelloService(); } }
2019年7月24日
1.配置文件佔位符
(1)隨機數
${random.value}、${random.int}、${random.long}
${random.int(10)}、${random.int[1024,65536]}
(2)佔位符獲取以前配置的值,若是沒有能夠用:指定默認值
person.last-name=張三${random.uuid}
person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.last-name:name}_dog
person.dog.age=15
2.Profile
Profile是Spring對不一樣環境提供不一樣配置功能的支持,能夠經過激活、指定參數等方式快速切換環境
(1)多Profile文件
編寫主配置文件時,文件名能夠是application-{profile}.properties/yml
默認使用application.properties的配置
(2)yml支持多文檔方式
server:
port: 8081
spring:
profiles:
active: prod
---
server:
port: 8083
spring:
profiles:dev
---
server:
port: 8084
spring:
profiles:prod
(3)激活指定profile
3.配置文件加載位置
Spring Boot啓動會掃描如下位置的application.properties或者application.yml文件做爲Spring Boot的默認配置文件
以上按照優先級從高到低的順序,全部位置的文件都會被加載,高優先級配置內容會覆蓋低優先級配置內容
還能夠經過spring.config.location來改變默認的配置文件的位置
項目打包好之後,咱們可使用命令行參數的形式,啓動項目的時候來指定配置文件的新位置;指定配置文件和默認加載的配置文件共同起做用造成配置互補
4.外部配置加載順序
SpringBoot也能夠從如下位置加載配置;優先級從高到低;高優先級的配置覆蓋低優先級的配置,全部的配置會造成互補配置
java -jar ***.jar -server.port=**** -server.context.path=/***
5.自動配置原理
(1)SpringBoot啓動的時候加載主配置類,開啓了自動配置功能@EnableAutoConfiguration
(2)@EnableAutoConfiguration做用:
SpringFactoriesLoader.loadFactoryNames()
掃描全部jar包類路徑下 META-INF/spring.factories
把掃描到的這些文件內容包裝成properties對象
從properties中獲取到EnableAutoConfiguration.class類(類名)對應的值,而後填入到容器中
(3)每個自動配置類進行自動配置功能
ex:HttpEncodingAutoConfiguration
@Configuration //表示這是一個配置類,能夠給容器添加組件 @EnableConfigurationProperties(HttpEncodingProperties.class) //啓用指定類的ConfigurationProperties功能:將配置文件中對應的值和HttpEncodingProperties綁定起來 @ConditionalOnWebApplication //判斷當前應用是不是web應用;Spring底層@Condition註解,若是知足指定的條件,整個配置類纔會生效 @ConditionalOnClass(CharacterEncodingFilter.class) // 判斷當前項目有沒有這個類 @ConditionalOnProperty(prefix = "spring.http.encoding", value = "enable", matchIfMissing = true) //判斷配置文件中是否存在某個配置;若是不存在,也是成立的 public class HttpEncodingAutoConfiguration {
根據當前不一樣的條件判斷,決定這個配置類是否生效;一但這個配置類生效,這個配置類就會給容器中添加各類組件;這些組件的屬性是從對應的properties類中獲取的,這些類裏面的每個屬性又和配置文件綁定
(4)總結
6.SpringBoot日誌
SpringBoot選用SLF4j和logback實現記錄日誌
(1)SLF4j
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info("Hello World"); } }
(2)如何讓系統中全部的日誌都統一到slf4j:
將系統中其餘日誌框架先排除
用中間包來替換原有的日誌框架
導入slf4j其餘的實現
(3)日誌使用
SpringBoot默認幫助咱們配置好了日誌
#日誌輸出級別設置
logging.level.com.mxj=trace
#不指定路徑在當前項目下生成springboot.log日誌
#能夠指定完整的路徑
logging.file=D:/***.log
#在當前磁盤的根路徑下建立spring文件夾和裏面的log文件夾:使用spring.log做爲默認文件
logging.path=/spring/log
#在控制檯輸出的日誌格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
#指定文件中日誌輸出的格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} === %msg%n
日誌輸出格式:
%d:表示日期時間
%thread:表示線程名
%-5level:從左顯示5個字符寬度
%logger{50}:表示logger名字最長50個字符,不然按照句點分割
%msg:日誌消息
%n:換行符
(4)切換日誌框架
能夠按照slf4j的日誌適配圖,進行相關的切換
7.SpringBoot_Web開發
(1)使用SpringBoot
(2)自動配置原理
****AutoConfiguration:給容器自動配置組件
****Properties:配置類封裝配置文件的內容
(3)SpringBoot對靜態資源的映射規則
@ConfigurationProperties(prefix = "spring.resources", ignoreUnknownFields = false) public class ResourceProperties implements ResourceLoaderAware, InitializingBean {
//能夠設置和靜態資源有關的參數,緩存時間
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { if (!this.resourceProperties.isAddMappings()) { logger.debug("Default resource handling disabled"); return; } Integer cachePeriod = this.resourceProperties.getCachePeriod(); if (!registry.hasMappingForPattern("/webjars/**")) { customizeResourceHandlerRegistration(registry .addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/") .setCachePeriod(cachePeriod)); } String staticPathPattern = this.mvcProperties.getStaticPathPattern(); if (!registry.hasMappingForPattern(staticPathPattern)) { customizeResourceHandlerRegistration( registry.addResourceHandler(staticPathPattern) .addResourceLocations( this.resourceProperties.getStaticLocations()) .setCachePeriod(cachePeriod)); } }
全部/webjars/**,都去classpath:/META-INF/resources/webjars/找資源
webjars:以jar包的方式引入靜態資源
<!--引入jquery-webjar-->在訪問時只需寫webjars下面資源的名字 <dependency> <groupId>org.webjars.bower</groupId> <artifactId>jquery</artifactId> <version>3.4.1</version> </dependency>
"classpath:/META-INF/resources/"
"classpath:/resources/"
"classpath:static/"
"classpath:/public/"
"/"當前項目的根路徑
localhost:8080/ 找index頁面
(3)模板引擎——Thymeleaf
引入Thymeleaf
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!--切換thymeleaf版本--> <thymeleaf.version>3.0.9.RELEASE</thymeleaf.version> <!--佈局功能支持程序--> <thymeleaf-layout-dialect.version>2.2.2</thymeleaf-layout-dialect.version>
Thymeleaf使用&語法
@ConfigurationProperties(prefix = "spring.thymeleaf") public class ThymeleafProperties { private static final Charset DEFAULT_ENCODING = Charset.forName("UTF-8"); private static final MimeType DEFAULT_CONTENT_TYPE = MimeType.valueOf("text/html"); public static final String DEFAULT_PREFIX = "classpath:/templates/"; public static final String DEFAULT_SUFFIX = ".html";
//只要咱們把HTML頁面放在classpath:/templates/文件夾下,thymeleaf就能自動渲染
使用:
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!--th:text 設置div裏面的文本內容--> <div th:text="${hello}">這裏顯示歡迎信息</div> </body> </html>
(1)th : 任意html屬性,來替換原聲屬性的值
片斷包含:th:insert th:replace
遍歷: th:each
條件判斷:th:if th:unless th:switch th:case
聲明變量:th:object th:with
任意屬性修改:th:attr th:attrprepend th:attrappend
修改指定屬性默認值:th:value th:href th:src
修改標籤體內容:th:text(轉義特殊字符) th:utext(不轉義特殊字符)
聲明片斷:th:fragment th:remove
(2)表達式語法
${...}:獲取變量值OGNL
獲取對象的屬性、調用方法
使用內置的基本對象:ctx vars locale request response session servletContext
*{...}:和${...}在功能上是同樣的,配合th:object使用
#{...}:獲取國際化內容
@{...}:定義URL
~{...}:片斷引用表達式
(3)內置的工具對象
example:
@Controller public class HelloController { @ResponseBody @RequestMapping("/hello") public String hello(){ return "Hello World"; } @RequestMapping("/success") public String success(Map<String,Object> map){ map.put("hello","<h1>你好</h1>"); map.put("users", Arrays.asList("zhangsan","lisi","wangwu")); return "success"; } }
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!--th:text 設置div裏面的文本內容--> <div th:text="${hello}">這裏顯示歡迎信息</div> <div th:text="${hello}"></div> <div th:utext="${hello}"></div> <hr/> <!-- th:each每次遍歷都會生成當前標籤,3個h4--> <h4 th:text="${user}" th:each="user:${users}"></h4> <hr/> <h4> <span th:text="${user}" th:each="user:${users}"></span> </h4> </body> </html>
8.SpringBoot-SpringMVC自動配置
SpringBoot自動配置好了SpringMVC:
ContentNegotiatingViewResolver:組合全部的視圖解析器
如何定製:咱們能夠本身給容器中添加一個視圖解析器,自動將其組合進來
Converter:類型轉換器
Formatter:格式化器