開發模型:
以微服務劃分。
接口是解耦和的,現在是每個服務是獨立的了,就沒必要寫接口了。
訪問地址:http://localhost:9001/label
---------------------------------------------01----------------------02--------------------------------------------
UML建模:
powerdesigner:架構師設計數據庫的工具。用來談業務的。
UML建模語言。
-------------------------------------------------------03-----------------------------------------------------------
項目說明:
模塊的劃分:
common:是公用的。
我們看下這個公共模塊的代碼:
第一個實體類:PageResult:
第二個實體類:Result:
第三個實體類:StatusCode:
本機的swagger看接口:
-----------------------------------------------------------------------------------04-----------------------------------------------------------------------------------
Restful:
面試問題:冪等和安全問題
安全:髒讀什麼的
冪等:在操作成功的前提下會不會對數據庫造成額外的影響,舉個例子比如訂單你點一次返回的時候可能信號不好,又點擊了一次。
GET:安全冪等
POST:不安全不冪等
DELETE:不安全冪等
PUT:不安全冪等
-----------------------------------------------------------------------------------05-----------------------------------------------------------------------------------
mysql微服務。
配置文件:這個是虛擬機的網卡的配置文件。
看下這個配置文件是如何配置的,用的時候再看就可以。
製作mysql容器。
注意上面的語句有密碼:123456
-e:後面爲初始化變量
3306:3306:宿主機的端口:容器的,mysql默認端口
docker的自啓動:
https://blog.csdn.net/xtjatswc/article/details/86586769
https://segmentfault.com/a/1190000019783852?utm_source=tag-newest
-----------------------------------------------------06-------------------------------------------------------------
執行建表語句
----------------------------------------------------------------------------07------------------------------------------------------------------------------------------
如何創建一個父子工程:
第一步:父親工程沒有pom就不能在子工程用父親工程的資源了。
第二步:
父工程什麼都不要。
父工程不寫代碼,刪掉src的東西。
導入pom。
--------------------------------------------------------------------------08--------------------------------------------------------------------------------------------
構建公共的子模塊:
第一步:new一個module,然後直接不用模板。
第二步:創建返回值的實體類。
第三步:寫分頁的實體類
第四步:狀態碼
-----------------------------------------------------09-------------------------------------------------------------
雪花算法:64bit。
1:不用的
41:時間戳可以使用到2082年
10:工作機器id可以支持1024臺機器
12:序列號可以1毫秒產生4096個自增序列id
分佈式id生成器。
二進制的64位,2的64次方。
時間戳是毫秒值的相減,2的41次方。
前五位數 爲宿主機器 後五位爲微服務的id。
12:隨機數真正的隨機數。
1秒產生26萬個id。超了放在消息隊列中。
兩個微服務操作一張表:都用雪花算法不用主鍵自增。
美團的全局ID:https://www.cnblogs.com/imstudy/p/11573025.html
-----------------------------------------------------10-------------------------------------------------------------
基礎微服務的crud:
問答。
用模板:
生成項目:base
我們分析下pom的結構:
這個不能去掉。
1.clean2.編譯3.發佈4.安裝
最後的pom:
結論:不建議用模板。
我們寫pom文件:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<artifactId>tensquare_common</artifactId>
<groupId>com.tensquare</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<artifactId>mysql</artifactId>
<groupId>mysql-connector-java</groupId>
</dependency>
</dependencies>
-------------------------------------------------------11------------------------------------------------------------
base的準備工作:
spring:
application:
name: temsquare-base
這個語句的作用:是eureak的註冊的名字,細節,必須中間是橫槓。
注意一個知識點:
driverClassName是一樣的,都可以識別。
完整的:
server:
port: 9001
spring:
application:
name: temsquare-base
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.244.136:3306/tensquare_base?characterEncoding=utf‐8
username: root
password: 123456
jpa:
database: mysql
show-sql: true
接下來寫啓動類:
注意跨域不在這裏面寫。在Controller裏面寫。
寫好入口文件。
-------------
接下來我們用id生成器。
id生成器的原則就是誰用誰放在容器裏面。
//將id生成器放在容器裏面
@Bean
public IdWorker idWorker(){
return new IdWorker(1,1);
}
講下源碼:
springboot在啓動的時候會檢索這個文件:
這個就是spring的入口,寫web.xml的
點進去:
----------------------------------------------------------12---------------------------------------------------------
寫一個controller:
跨域註解:cnblogs.com/mmzs/p/9167743.html
總結:1和3要一樣的,要是不一樣要保持1和2一樣。
基本得crud嚴格按照接口文檔書寫:
寫實體類。
注意一點分佈式得開發要寫這個一定要寫,加這句話才能在不同平臺之間使用io流進行傳輸。:
寫帶分頁得Dao:
寫Service。
在controller寫service。
---------------------------------------------------------------13-----------------------------------------------------
postman測試:
swagger地址:http://localhost/#/default/post_label
---------------------------------------------------------------14-----------------------------------------------------
異常處理:
只對Exception處理,可以加別的。
@RestControllerAdvice
public class BaseExceptionHandler {
@ExceptionHandler(value = Exception.class)
public Result error( Exception e) {
e.printStackTrace();
return new Result(false, StatusCode.ERROR, e.getMessage());
}
}
----------------------------------------------------------26--------------------------------------------------------------
規範的層次結構示例代碼:
1.Controller:
跨域請求寫在這裏。
2.Service
3.Dao
4.實體類