2.21彙報

李國穩發表於2022-02-21

問題

這周遇到的問題主要是環境問題
第一個就是歷史遺留問題,MySQL版本問題當時沒有及時解決,當時想著就是啥時候遇到問題再說,然後在跑日誌系統的時候是沒有問題的,後來在智慧社群就有問題了。其實當時是沒有裝MySQL的,當時裝了xampp,然後用的xampp內建的MySQL服務,沒辦法只能重新裝MySQL。
裝完mysql遇到一個很離譜的問題,終端輸入異常

解決完這個又發現資料庫出問題

又重新修改使用者名稱密碼,重新登入解決
第二個是navicat突然用不了了,過年之前還是可以正常使用的,然後電腦就一直沒開過,過完年開工發現突然打不開了,在嘗試各種方法無法解決後選擇了另一款軟體,DBeaver


目前用起來感覺還不錯,重點是免費,不用像navicat費心思破解或去找破解版
DBeaver安裝使用

nginx

對於nginx在之前學thinkphp時接觸過,但只是用了http server,所以對nginx完全不知道怎麼用

什麼是nginx

Nginx (engine x) 是一款輕量級的 Web 伺服器 、反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器。

什麼是反向代理?

反向代理(Reverse Proxy)方式是指以代理伺服器來接受 internet 上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給 internet 上請求連線的客戶端,此時代理伺服器對外就表現為一個反向代理伺服器。

我理解的流程

而在沒有nginx時的流程為

在我第一次梳理完這個流程後感覺nginx有些雞肋
為什麼不能直接訪問前臺並由前臺直接訪問後臺呢

為什麼使用nginx

1、保護了真實的web伺服器,web伺服器對外不可見,外網只能看到反向代理伺服器,而反向代理伺服器上並沒有真實資料,因此,保證了web伺服器的資源安全。
2、反向代理為基礎產生了動靜資源分離以及負載均衡的方式,減輕web伺服器的負擔,加速了對網站訪問速度
3、節約了有限的IP地址資源,企業內所有的網站共享一個在internet中註冊的IP地址,這些伺服器分配私有地址,採用虛擬主機的方式對外提供服務

動靜資源分離:動靜分離是讓動態網站裡的動態網頁根據一定規則把不變的資源和經常變的資源區分開來,動靜資源做好了拆分以後,我們就可以根據靜態資源的特點將其做快取操作,這就是網站靜態化處理的核心思路
負載均衡:將工作分配到多個伺服器上

常用命令

nginx               啟動
nginx -s stop       快速關閉Nginx,可能不儲存相關資訊,並迅速終止web服務。
nginx -s quit       平穩關閉Nginx,儲存相關資訊,有安排的結束web服務。
nginx -s reload     因改變了Nginx相關配置,需要重新載入配置而過載。
nginx -s reopen     重新開啟日誌檔案。
nginx -c filename   為 Nginx 指定一個配置檔案,來代替預設的。
nginx -t            不執行,而僅僅測試配置檔案。nginx 將檢查配置檔案的語法的正確性,並嘗試開啟配置檔案中所引用到的檔案。
nginx -v            顯示 nginx 的版本。
nginx -V            顯示 nginx 的版本,編譯器版本和配置引數。

使用時只需要在nginx.conf中include 專案的nginx.conf檔案即可

想了解更多nginx配置檔案的資訊可以參考
Nginx 簡易教程
nginx配置檔案詳解

@JsonView

簡介

@JsonView是Jackson的一個註解,可以用來過濾序列化物件的欄位屬性,是你可以選擇序列化物件哪些屬性,哪些過濾掉。
可以簡單理解為一個過濾器,可以根據需要對實體進行進行處理,返回需要的資料,而不是整個實體

具體使用

首先在實體中建立介面

        // 檢視1
    public interface OneView{};
        // 檢視2 繼承檢視1
    public interface TwoView extends OneView{};

然後在get方法中加入註解

@JsonView(OneView.class)
    public String getUsername() {
        return username;
    }
    
    public void setUsername(String username) {
        this.username = username;
    }
    
    @JsonView(OneView.class)
    public String getPassword() {
        return password;
    }
    
    public void setPassword(String password) {
        this.password = password;
    }

    @JsonView(TwoView.class)
    public String getRealName() {
        return realName;
    }

    public void setRealName(String realName) {
        this.realName = realName;
    }
    
    @JsonView(TwoView.class)
    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

最後在controller方法中加入註解

@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping("/user1")
    @JsonView(OneView.class)
    public User queryUser1() {
        User user = new User();
        user.setUsername("test1");
        user.setPassword("123456");
        user.setRealName("測試");
        user.setSex("男");
        return user;
    }

    @GetMapping("/user2")
    @JsonView(TwoView.class)
    public User queryUser2( String id) {
        User user = new User();
        user.setUsername("test1");
        user.setPassword("123456");
        user.setRealName("測試");
        user.setSex("男");
        return user;
    }

這樣在訪問兩個方法時就可以得到不同的結果
訪問user1時是

user2是

但是這個用法和專案中有所不同
專案中直接將註解加到實體的成員上而不是get方法上

    @ApiModelProperty("負責小區")
    @OneToMany(mappedBy = "propertyCompany")
    @JsonView(VillageJsonView.class)
    @Where(clause = "deleted = false")
    private List<Village> villages = new ArrayList<>();

經過測試,將註解加到成員或者get方法效果是一樣的
開始理解的是會把所有新增註解的顯示出來,沒有新增註解或新增其他註解的會被過濾掉,
自己測試後發現只會過濾掉新增其他註解的,沒有註解的不會過濾

總結

在環境問題上花費太多時間,現在開始寫後臺發現還是有很多東西要學

相關文章