1. 程式人生 > >微服務(一)--Common

微服務(一)--Common

目錄

一個完整的springCloud專案怎麼去搭建

首先我們看看 Common包

列舉類

通用

public interface IUnexEnum<E extends Enum<?>> { 
     * 獲取code 
    public String code(); 
     * 獲取name 
    public String desc(); 
     * 判斷code是否相等  
    public boolean equals(String code);

}

怎麼使用 他呢

public poEnum implents IUnexEnum<poEnum>{

   we("我們"
,"我們"), our("我們的","我們的"); private final String code; private final String desc; @Override public boolean equals(String code) { return this.code.equals(code); } private poEnum(String code, String desc) { this.code = code; this.desc = desc; } }

異常

Throwable 是 Error 和Exception的父類:
我們真的有需求要在序列化後新增一個欄位或者方法呢?應該怎麼辦?那就是自己去指定serialVersionUID,防止版本升級時反序列化出錯,

public class UnexBaseException extends RuntimeException{

    // serialVersionUID
    private static final long serialVersionUID = 8458544317507845657L; 
    // 異常編碼
    private String errorCode; 
    // 異常資訊資源ID
private String messageId; // 異常資訊引數 private Object[] messageArgs; // 構造方法 public UnexBaseException(){ } /** * 用指定的cause異常構造一個新的BaseException * * @param cause the exception cause */ public UnexBaseException(Throwable cause){ super(cause); } /** * 用指定的messageText異常構造一個新的BaseException * * @param messageText 異常資訊文字 */ public UnexBaseException(String messageText){ super(messageText); } /** * 用指定的messageText異常構造一個新的BaseException * * @param messageText 異常資訊文字 * @param cause 異常物件 */ public UnexBaseException(String messageText, Throwable cause){ super(messageText, cause); } /** * 用指定code和異常日誌 */ public UnexBaseException(String errorCode, Throwable cause, String messageId, Object[] messageArgs){ super(cause); this.errorCode = errorCode; this.messageId = messageId; if (null != messageArgs){ this.messageArgs = messageArgs.clone(); } } /** * 用指定code和異常日誌 message構造一個BaseException * * @param errorCode 異常編碼 * @param messageId 異常資訊資源ID * @param messageArgs 異常資訊資源引數 */ public UnexBaseException(String errorCode, String messageId, Object[] messageArgs){ this.errorCode = errorCode; this.messageId = messageId; if (null != messageArgs){ this.messageArgs = messageArgs.clone(); } } getter...setter }

具體使用:

 public static Date parseDate(String text,String pattern){ 
        try{
            return formatter.parse(text);
        }catch (ParseException e){
            throw new UnexBaseException("ParseDate failed. [" + text + "]");
        }
    }

javabean的操作

繼承spring.beans中的beans類,完成自己的自定義操作,因為我的專案中大量使用 Dto 和Vo 和Po 的轉化,所以,我需要 能將 Vo和Po進行轉化的工具類
其中使用了反射:
用其方法應優先使用java.beans.PropertyDescriptor獲取Method進行方法呼叫
PropertyDescriptor類
PropertyDescriptor類表示JavaBean類通過儲存器匯出一個屬性。主要方法:
1、getPropertyType(),獲得屬性的Class物件。
2、getReadMethod(),獲得用於讀取屬性值的方法;getWriteMethod(),獲得用於寫入屬性值的方法。

public class BeanCopyUtil extends BeanUtils{
 public static void copyProps(Object source,Object target,String[] igonre){
        Assert.notNull(source, "Source must not be null");
        Assert.notNull(target, "Target must not be null");
        Class<?> actualEditable = target.getClass();
        PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable);
        Object methodName = null;
        // Object targetValue=null;
        // 需複製欄位
        for (PropertyDescriptor targetPd : targetPds){
            if (targetPd.getWriteMethod() != null){ 
                    PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(), targetPd.getName());

                    if (sourcePd != null && sourcePd.getReadMethod() != null){// 判空
                        Method readMethod = sourcePd.getReadMethod();
                        if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())){
                            readMethod.setAccessible(true);
                        }
                        Object value = readMethod.invoke(source);
                        // Check whether the value is empty, only copy the properties which are not empty
                        // targetValue=value;
                        if (value != null){// 判空
                            Method writeMethod = targetPd.getWriteMethod();
                            methodName = writeMethod.getName();
                            if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())){
                                readMethod.setAccessible(true);
                            }
                            writeMethod.invoke(target, value);
                        }

                    }

    }
}

就是 一個 將vo中的屬性值全部利用反射注入到po中,
參考

Person po=new Person(12,"sdf"); 
        PropertyDescriptor pd = new PropertyDescriptor("age",po.getClass());
        Method methodGetX = pd.getReadMethod();//Read對應get()方法
        Object reValue = methodGetX.invoke(po);
        System.out.println(reValue);

age— 這個東西
PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable);
是springBean中的提供的獲取所有的屬性的方法,

列舉類工具類

通常我們會遇到 根據 code 獲取到 整個Enum,或者 根據 Msg 獲取到整個 Enum,

  public class UnexEnumUtil {
  public static <E extends Enum<?>> E code2Enum(Class<E> enumClass, String code) {

        // Only for IUnexEnum
        if (!IUnexEnum.class.isAssignableFrom(enumClass)) {
            return null;
        }

        for(E e : enumClass.getEnumConstants()) {
            IUnexEnum<?> ce = IUnexEnum.class.cast(e);
            if (ce.equals(code)) {
                return e;
            }
        }

        return null;
    }
    }

Po類公共屬性

public class UnexBaseVo implements java.io.Serializable {

    // serialVersionUID
    private static final long serialVersionUID = 1566887093391005767L;

    // ID
    private Long id;

    // 建立者
    private Long createUser;

    // 建立時間
    private Date createTime;

    // 更新者
    private Long updateUser;

    // 更新時間
    private Date updateTime;

    // 邏輯刪除: 0-未刪除 1-已刪除
    private String logicDelete;

   getter .setter...
}

相關推薦

服務--Common

目錄 一個完整的springCloud專案怎麼去搭建 首先我們看看 Common包 列舉類 通用 public interface IUnexEnum<E extends Enum<?>> { * 獲取code

基於天氣預報項目談springcloud構建的服務

個人理解 動態 spring 解決方案 消費 服務架構 方式 mage 什麽是 單體架構 簡單介紹一下四個模塊分別的作用: 城市信息模塊: 主要是調用第三方服務獲取所有的城市信息,用於數據采集的時候調用 數據采集模塊: 由於是基於調用第三方 api 的服務,所以我們要考

SpringBoot搭建服務HelloWorld!

1.建立專案,寫pom.xml 使用maven構建專案後,寫依賴檔案pom.xml內容如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apa

從0開始學習服務

話不多說,首先介紹微服務的相關概念 所謂微服務就是將單體應用的本地呼叫改變為通過HTTP或者RPC遠端呼叫的多應用 相比於傳統單體應用的優缺點 單體應用缺點: 不同模組直接邏輯耦合性高 任何一個模組程式碼有改動時即使是不相關的模組也要重新打包部署 部署程式碼時候要

服務Microservices【翻譯】

1、說明 本文轉載自 http://www.cnblogs.com/liuning8023/p/4493156.html 經典好文! 2、微服務 “微服務架構(Microservice Architecture)”一詞在過去幾年裡廣泛的傳播,它用於描述一種設計應用程式的特別方式,作為一套獨

socket實現的簡單的ftp服務

socket 中文 add blog style log 實現簡單 port 數據 用 socket實現簡單的ftp服務ex:服務端 1 import socket,os 2 server=socket.socket() 3 server.bind(("localh

部署WSUS服務

發展 影響 理論 操作系統 服務器配置信息 除了 升級 環境 存儲文件 引言:隨著網絡的發展,我們的生活也越來越離不開網絡,但面臨的安全威脅也越來越多。像去年爆發的針對Windows系統的勒索病毒(Wanna Cry)和年初爆發的Intel芯片漏洞告訴我們網絡威脅

CentOS6-7,rsyslog服務

messages sys rect ftp ssl 方式 登入 分析 .info rsyslog特性:CentOS6和7 1,多線程 2,支持UDP, TCP, SSL, TLS, RELP ? MySQL, PGSQL, 3,Oracle實現日誌存儲 4,強大的過濾器,

SCCM2016 集成WSUS提供補丁服務

雲計算 雲平臺 大家好,之前我們介紹了關於SCCM2016的一些實際功能,比如SCCM集成WDS功能為客戶端PC推送操作,還有就是分發SCCM管理組件等功能。今天來和大家一起探討一個也是十分重要的功能,補丁分發!大家都知道,在傳統的微軟基礎架構裏面,我們在沒有System Center的情況下,更多的

服務Microservices 簡介

rabbit 編程語言 不可 可能 通過 區別 clas 管理 基礎設施 概念 微服務架構風格是一種將單個應用程序作為一套小型服務開發的方法,每種應用程序都在自己的進程中運行, 並與輕量級機制(通常是HTTP資源API)進行通信。 這些服務是圍繞業務功能構建的

windows Server 2016 網絡服務

windows server 2016 mcse mcsa 網絡基礎 IPv4網絡 TCP4層 IP地址:V4版:32個二進制數,每8位一組,表示網絡中每臺計算機的標識 192.168.1.1 192.168.2.1 分為網絡位和主機位,相同網絡位,不同主機位

基於httpd-2.2和httpd-2.4配置虛擬主機web站點,並提供https服務

基於主機名的虛擬主機服務 使用httpd-2.2和httpd-2.4實現> 1.建立httpd服務,要求:> 1) 提供兩個基於名稱的虛擬主機www1, www2;要求每個虛擬主機都有單獨的錯誤日誌和訪問日誌; > 2) 通過www1的/server-status提供狀態信息,且僅允許172

linux 基礎服務

linux samba nfs ftp dns 先說下6系統和7系統的不同6啟動服務為:service 服務名 動作7啟動服務為:systemctl 動作 服務名 6服務文件路徑:/etc/rc.d/init.d/7服務文件路徑:/usr/lib/systemd/system/ htt

基於httpd-2.2配置虛擬主機web站點,並提供https服務

基於主機名的虛擬主機配置 為虛擬主機提供https服務 使用httpd-2.2和httpd-2.4實現> 1.建立httpd服務,要求:> 1) 提供兩個基於名稱的虛擬主機www1, www2;要求每個虛擬主機都有單獨的錯誤日誌和訪問日誌; > 2) 通過www1的/server-

搭建LNMP服務

服務 啟動mysql ffffff pro 輸入 數據庫 local file init (1)配置yum源 並掛載(2)配置YUM源軟件倉庫(3)上傳組件(4)把組件移動到 /usr/local/src 目錄下(5)安裝Cmake編譯工具cd /usr/local/sr

Linux進階:httpd服務

Socket套接字:IP和埠的組合 HTTP http:Hyper text transfer protocol 超文字(包含連線的檔案,點選地址會跳轉到令一個資源)傳輸協議 埠:80/TCP 主要傳輸html編碼的資料 http是應用層協議,基於傳輸層的tcp協議傳輸 html

什麼是服務Microservice

微服務英文名稱Microservice,Microservice架構模式就是將整個Web應用組織為一系列小的Web服務。這些小的Web服務可以獨立地編譯及部署,並通過各自暴露的API介面相互通訊。它們彼此相互協作,作為一個整體為使用者提供功能,卻可以獨立地進行擴。   微服務架構需要的

利用Spring Cloud實現服務- 熔斷機制

1. 熔斷機制介紹 在介紹熔斷機制之前,我們需要了解微服務的雪崩效應。在微服務架構中,微服務是完成一個單一的業務功能,這樣做的好處是可以做到解耦,每個微服務可以獨立演進。但是,一個應用可能會有多個微服務組成,微服務之間的資料互動通過遠端過程呼叫完成。這就帶來一個問題,假設微服務A呼叫微服務

為什麼 kubernetes 天然適合服務 2

此文已由作者劉超授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗   三、微服務化的十個設計要點   微服務有哪些要點呢?第一張圖是 SpringCloud 的整個生態。   第二張圖是微服務的 12 要素以及在網易雲的實踐。   第三張圖是

為什麽 kubernetes 天然適合服務 3

連接 paas client mic keys lse nor con 模塊 此文已由作者劉超授權網易雲社區發布。歡迎訪問網易雲社區,了解更多網易技術產品運營經驗 四、Kubernetes 本身就是微服務架構 基於上面這十個設計要點,我們再回來看 Kubernetes,會發