Spring Boot入門
1.spring boot是配置好的spring集成框架,約定大於配置
2.微服務:把service拆出來獨立運行在各個機器上。看下面這兩篇論文
- 原文地址:http://martinfowler.com/articles/microservices.html
- 翻譯:https://www.cnblogs.com/liuning8023/p/4493156.html
3.從官網下模板創建spring boot項目
從https://start.spring.io/里找generate項目,下載zip包,用Idea以maven形式導入
4.通過Idea的Spring Initializer創建
以上二種方式,要自己選依賴的組件
pom開頭parent標簽指定父依賴是spring-boot-starter-parent,負責版本管理與打包
web主要依賴包是spring-boot-starter-web
熱部署是spring-boot-starter-devtools
4.項目架構
1.java下的程序主入口:
2.resource下的application.properties
3.resource下的static目錄
4.resource下的templates目錄
5.springboot的主類用SpringBootApplication注解裝配,他會去掃描同級目錄下的包注解
6.配置文件修改
server.port=8081 #改端口號,每一個springboot服務一個端口
7.導出的jar包用java jar包路徑運行即可
8.resource目錄下可以放banner.txt放啟動字符
9.自動配置原理:
看pom文件,點入父標簽,進入可以看到spring-boot-dependencies依賴
SpringApplication run方法啟動程序
注解:@SpringBootApplication
- @SprintBootConfiguration
- @Configuration
- @Component
- @EnableConfiguration
- AutoConfigurationPackage
總結下來,就是會找sprint-boot-autoconfigure包里的/META-INF/spring.factories文件,當引入某個starter時相應的配置生效
10.主類:
SpringApplication類注解初始化項目,SpringApplication的run方法拿這些配置來跑
11.yaml配置文件
格式:
key: value
server:
port: 8081
path: /hello
yaml比properties先進的地方在於語法支持的多,甚至可以存儲對象
雙引號不轉義,單引號轉義
存對象
properties:
student.name="a"
yaml:
studnet:
name: "a"
行內寫法:
student: {name: "a", age: 12}
數組:
行內寫法:
studnet: 【{},{}】
多行寫法:
pets:
- cat
- dog
yaml 對空格的要求十分高,一定要對齊
12.yaml配置注入:
通過ConfigurationProperties注解指定prefix來引入配置
@ConfigurationProperties(prefix = "person")
13.Property文件注入
@PropertySource(value = "classpath:person.properties")
@Component //注冊bean public class Person { //直接使用@value @Value("${person.name}") //從配置文件中取值 private String name; @Value("#{11*2}") //#{SPEL} Spring表達式 private Integer age; @Value("true") // 字面量 private Boolean happy; 。。。。。。 }
14.JSR303校驗
@Validated注解表明要校驗
可以接着使用其中定義的其他格式規范注解,比如@Email
15.多config文件
可以在jar里用命令行參數spring.config.location指定config文件位置。默認是項目根目錄下config,項目根目錄, 資源根目錄下config,資源根目錄
用spring.profiles.acitve=test指定配置文件后綴
yml多文檔模塊:
---分割模塊
spring:
profiles: dev
指定模塊名
16.自動查看配置
注解@EnableConfigurationProperties指定配置類
@EnableConfigurationProperties({HttpProperties.class})
相應的@ConfigurationProperties注解就指定yaml和properties文件里的配置名稱
@ConfigurationProperties( prefix = "spring.http" ) //從配置文件中獲取指定的值和bean的屬性進行綁定 public class HttpProperties {
@ConditionalOnWebApplication,@ConditionalOnClass,@ConditionalOnProperty等注解指定條件滿足配置成立
1)、SpringBoot啟動會加載大量的自動配置類
2)、我們看我們需要的功能有沒有在SpringBoot默認寫好的自動配置類當中;
3)、我們再來看這個自動配置類中到底配置了哪些組件;(只要我們要用的組件存在在其中,我們就不需要再手動配置了)
4)、給容器中自動配置類添加組件的時候,會從properties類中獲取某些屬性。我們只需要在配置文件中指定這些屬性的值即可;
xxxxAutoConfigurartion:自動配置類;給容器中添加組件
xxxxProperties:封裝配置文件中相關屬性;
debug=true 屬性指定是否打開debug
所有配置可以從SpringBoot官方文檔這里拿
Spring Boot Web開發
17.導入靜態資源
webjars:以maven的形式引入jquery,放到jar包的META-INF/resources/webjars下
resources目錄 ,static,public,根目錄,也可以放資源,一般來說public的是外邊可以通過地址直接訪問的,不用走controller接口層
或者指定spring.mvc.static-path-pattern(用逗號分隔),以上全部失效
18.首頁定制:
根據property或者index.html文件放在相應資源目錄下
19.模板引擎
SpringBoot不支持jsp,使用模板引擎生成前端文件
可以用freemarker或者thymeleaf
根據Thymeleaf的prperties配置類,可以知道文件以html結尾,放在templates文件夾里
20.Thymeleaf語法
html標簽頭加命名空間約束
<html lang="en" xmlns:th="http://www.thymeleaf.org">
語法分以下幾部分:
- 取值
- [[${}]]行內取值
- 常量
- 運算符
- 條件表達式:th:if
- 循環表達式:th:each
- th命名空間下的標簽
th標簽可以替換html里的任意元素
21.拓展SpringMVC的配置
寫一個類用@Config注解標注,並實現WebMvcConfigurer接口。要完全替換則再加一個@EnableWebMvc注解。
可以通過@Bean注解,把這個類里的關於SpringMVC的配置發送出去
22.前端怎么寫
- 模板:別人寫好的自己改
- 框架:不用改,自己裝配傳參拼接(組件)
- 柵格系統
- 導航欄
- 側邊欄
- 表單
23.網站怎么么寫:
- 頁面長什么樣
- 數據設計
- 前端自動運行(獨立化工程)
- 數據接口如何對接
- 前后端聯調測試
24.准備工作:
- 有一套自己熟悉的后台模板(x-admin)
- 前端通過框架,組合出來一個網站頁面
- index
- about
- blog
- post
- user
- 404
- 部署網站
25.整合JDBC
1.引入jdbc和mysql驅動
2.resourcs下在application.yml 里配置數據庫信息
spring: datasource: username: root password: 123456 #?serverTimezone=UTC解決時區的報錯 url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 driver-class-name: com.mysql.jdbc.Driver
3.DataSource可以通過@Autowired自動引入了
屬性配置可以去點擊進去類DataSourceProperties看
默認使用Hikari數據源連接池
Connection可以通過datasource getConnection獲取
隨后可以做commit,close等操作
26.jdbc template crud
1.自動引入JdbcTemplate
2.execute執行sql語句,query和queryForList等方法查詢,call調用存儲過程/函數,update和batchUpdate等方法更新
27.指定數據源
spring.datasource.type指定數據源,要是全限定名
28.整合Druid
加入了日志監控功能的數據庫連接池
1.maven導入依賴
2.配置文件指定數據庫連接池類名
3.配置插件,包括監控,性能慢查詢等
#配置監控統計攔截的filters,stat:監控統計、log4j:日志記錄、wall:防御sql注入
#如果允許時報錯 java.lang.ClassNotFoundException: org.apache.log4j.Priority
#則導入 log4j 依賴即可,Maven 地址: https://mvnrepository.com/artifact/log4j/log4j
filters: stat,wall,log4j
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
4.引用了log4j插件,就要導入這個依賴
5.自己添加一個@Configuration注解修飾的Druid配置類,把DruidDataSource注入到spring。要綁定配置文件的全局配置,使用@ConfigurationProperties注解,prefix指定為spring.datasoure
6.配置Druid的監控web頁面,可以通過spring boot注冊一個servlet(ServletRegistrationBean),配置登陸的用戶名/密碼等
7.配置FilterRegistrationBean來設置監控哪些東西
29.整合Mybatis
1.引入mybatis-spring-boot整合包
2.配置數據源
3.使用@Mapper注解定義mapper接口
4.添加sql xml
5.配置文件里配置mapper和實體類路徑
#指定myBatis的核心配置文件與Mapper映射文件
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
# 注意:對應實體類的路徑
mybatis.type-aliases-package=com.kuang.mybatis.pojo
6.自動裝配拿到mapper
@Mapper注解,怎么被掃描到,mapper xml放的位置配置,可以總結下
30. 異步任務
@EnableAsync,開啟異步
@Async注解,表明方法異步執行。spring自動給方法開線程執行
31.郵件任務
1.引入郵件依賴
2.去autoconfig里找配置前綴,去proerty里找具體配置
3.@Autowired注入JavaMailSenderImpl,調用其方法設置並發送
32.定時執行任務
1.TaskExecutor
2.TaskScheduler
3.@EnableScheduling,開啟定時任務注解;@Scheduled,表示什么時候執行
4.Cron表達式,使用在線表達式生成器
33.Swagger
API框架,開發階段瀏覽API接口,可自動生成API文檔,RestFul風格,可以直接運行在線測試,
1.引入依賴,有兩個,swagger2和swagger-ui
2.集成swagger。添加config類,@Configuration,@EnableSwagger2。訪問swagger-ui.html
3.配置swagger。config類里添加@Bean Docket,配置Docket類。ApiInfo類配置信息
4.配置掃描接口。Docket select方法決定掃描哪些接口。使用api().build()來選擇,可以使用RequestHandlerSelectors,用其basePackage指定掃描基准包;path方法設置指定路徑,
5.配置開關 。enable方法決定是否開啟。可以通過Profiles和Environment獲取配置文件的環境變量
6.給api分組。通過groupName方法
7.實體類配置(Model)。 只要接口用到了實體類,實體類就會被掃描到。進一步的注釋,@ApiModel指定實體類,@ApiModelProperty給字段添加,這種注解還有很多
34.員工管理系統
1.引入模版html頁面,放入templates文件夾
2. css和js,img放入static文件夾
3.添加首頁路由映射,除了直接用@controller,還可以在WebMvcConfigure的子類里,實現addViewController方法,用ViewControllerRegistry.addViewController方法添加
4.spring.thymeleaf.cache=false,禁用緩存;其他地方搞的模版,url路徑等配置要用thymeleaf接管
5.server.servlet.context-path=/kunag,設置項目虛擬目錄,給url路徑加一層,本地是項目上一級多了一個文件夾
6.頁面國際化:
1.resources目錄下建立一個i18n目錄
2.建立login.properties和login_zh_CN.properties文件。自動創建一個login文件夾,可在Resource Bundle下配置,給每一個key設置不同的版本
3.給spring.message.basename指定為i18n.login,指定位置文件
4.在模板文件里,用#{key}取值
5.可以重寫LocaleResolver,解析語言配置,返回Locale類。默認的語言配置,讀取Accept-Language
6.在WebMvcCofigure子類里,用@Bean注入這個LocaleResolver子類
7.除了重定向,可以用setViewName給url做映射來改url
8.登陸攔截器。實現HandlerInterceptor,在WebMvcConfigure的addInterceptors里添加攔截器
9.頁面組件分類后,調用他們的時候可以給他們傳參數,決定不同數據下的表現。代碼要基於數據改變,而不是直接搞dom
10. 有錯誤的話,templates下新建一個error文件夾,相應錯誤碼的html文件放進去即可
35.dubbo+zookeeper
RPC架構
架構為生產者/消費者模式
生產者向注冊中心注冊自己。消費者通過注冊中心找到生產者,調用生產者方法
1.生產者先引入duooo+zookeeper依賴
<!-- Dubbo Spring Boot Starter --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency>
<!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient --> <dependency> <groupId>com.github.sgroschupf</groupId> <artifactId>zkclient</artifactId> <version>0.1</version> </dependency>
<!-- 引入zookeeper --> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>2.12.0</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.14</version> <!--排除這個slf4j-log4j12--> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>
2.配置dubbo+zookeeper
#當前應用名字
dubbo.application.name=provider-server
#注冊中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#掃描指定包下服務
dubbo.scan.base-packages=com.kuang.provider.service
3.用@Service注冊服務到dubbo,用@Component注解注冊到Spring
4.可以在duboo-admin里發現這個服務
消費者配置,先引入一樣的依賴
配置應用名字與注冊中心
#當前應用名字
dubbo.application.name=consumer-server
#注冊中心地址
dubbo.registry.address=zookeeper://127.0.0.1:218
使用@Reference注解,可以用pom坐標,也可以在本地建立一個一模一樣路徑的接口,然后調用RPC接口
36.未來
微服務架構,要有四個業務
1.API網管,服務路由
2.HTTP/RPC通信,同步/異步調用
3.服務注冊,發現,治理,高可用
4.服務熔斷,異常處理
有二代技術
第零點五代,Dubbo+zookeeper,無法實現全部方案
第一個代,SpringClound,由此各個公司推出了不同技術,比如SpringCloud NetFlix,SpringCloud Alibaba
第二代,Service Mesh技術,k8s,Istio,
這些業務,解決的是網絡不可靠情況下的穩定性
y