<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-295  評論-26  文章-1  trackbacks-0
      2016年6月27日



                //允許輸入字母、點、回退鍵、數字
                if (((int)e.KeyChar >= (int)'a' && (int)e.KeyChar <= (int)'z') || (((int)e.KeyChar > 48 && (int)e.KeyChar < 57) || (int)e.KeyChar == 8 || (int)e.KeyChar == 46))
                {
                    e.Handled = false;
                }
                else e.Handled = true;



          //允許輸入字母、回退鍵、數字
                if (((int)e.KeyChar >= (int)'a' && (int)e.KeyChar <= (int)'z') || (((int)e.KeyChar > 48 && (int)e.KeyChar < 57) || (int)e.KeyChar == 8))
                {
                    e.Handled = false;
                }
                else e.Handled = true; 


    // 只能輸入字母數字以及中文字
      if ((e.KeyChar != '\b') && (!Char.IsLetter(e.KeyChar)) && (!char.IsDigit(e.KeyChar)))
                {
                    e.Handled = true;
                }

    //只輸入數字
     if (e.KeyChar != 8 && (!Char.IsDigit(e.KeyChar)))
                {
                    e.Handled = true;
                }

    只能輸入數字以及字母X

      if (e.KeyChar != 88 && e.KeyChar != 8 && (!Char.IsDigit(e.KeyChar)))
                {
                    e.Handled = true;
                }
    posted @ 2020-06-13 10:46 華夢行 閱讀(159) | 評論 (0)編輯 收藏
    Install-Package NLog.Config -Version 3.2.1



    Install-Package NLog -Version 3.2.1
    posted @ 2020-01-06 16:10 華夢行 閱讀(125) | 評論 (0)編輯 收藏
    • mysql5.7以上版本在常會報關于only_full_group_by的錯誤,可以在sql_mode中關閉他,網上查找的解
    • 在[mysqld]中添加代碼
    sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

    重啟mysql

    sudo service mysql restart

    mysql5.7以上版本在常會報關于only_full_group_by的錯誤,可以在sql_mode中關閉他,網上查找的解
    查看參數是否存在

    mysql> SELECT @@sql_mode;
    +------------------------------------------------------------------------------------------------------------------------+
    | @@sql_mode                                                                                                             |
    +------------------------------------------------------------------------------------------------------------------------+
    | STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
    +------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> SELECT @@GLOBAL.sql_mode;
    +------------------------------------------------------------------------------------------------------------------------+
    | @@GLOBAL.sql_mode                                                                                                      |
    +------------------------------------------------------------------------------------------------------------------------+
    | STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
    +------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    posted @ 2019-09-15 22:02 華夢行 閱讀(154) | 評論 (0)編輯 收藏

    MYSQL_HOME     解壓路徑   C:\DevelopTool\MySQL\mysql-5.7.25-winx64    

     

     

     Path     %MYSQL_HOME%\bin



    >mysqld --initialize --user=mysql --console
    mysqld -install 

    先啟動服務:

    net start MySQL【或者是MySQL57】

    修改密碼
    mysqladmin -uroot -p123456 password 123 


    sc delete 服務名例如: sc delete mysql



    https://www.cnblogs.com/july7/p/11489029.html

    遠程訪問
    use mysql;
    GRANT ALL ON *.* TO root@'%' IDENTIFIED BY '密碼' WITH GRANT OPTION;
    flush privileges;
    posted @ 2019-09-14 22:51 華夢行 閱讀(131) | 評論 (0)編輯 收藏
    需要添加一個環境變量POSTMAN_DISABLE_GPU = true。
    posted @ 2019-05-18 11:11 華夢行 閱讀(526) | 評論 (0)編輯 收藏

    在了解REST API URI設計的規則之前,讓我們快速瀏覽一些我們將要討論的術語。

    URIs

    REST API使用統一資源標識符(URI)來尋址資源。在當今互聯網上,充斥著各種各樣的URI設計規則,既有像//api.example.com/louvre/leonardo-da-vinci/mona-lisa這樣能夠清楚的傳達API資源模型的文章,也有很難理解的文章,例如://api.example.com/68dd0-a9d3-11e0-9f1c-0800200c9a66 ;Tim Berners-Lee在他的“Axioms of Web Architecture”一文中將URI的不透明度總結成一句話:

    唯一可以使用標識符的是引用對象。在不取消引用時,就不應該查看URI字符串的內容以獲取其他信息。 
    ——蒂姆·伯納斯 - 李

    客戶端必須遵循Web的鏈接范例,將URI視為不透明標識符。

    REST API設計人員應該在考慮將REST API資源模型傳達給潛在的客戶端開發者的前提下,創造URI。在這篇文章中,我將嘗試為REST API URI 引入一套設計規則

    先跳過規則,URI的通用語法也適用與本文中的URI。RFC 3986定義了通用URI語法,如下所示:

    URI = scheme “://” authority “/” path [ “?” query ][ “#” fragment ]

    規則1:URI結尾不應包含(/)

    這是作為URI路徑中處理中最重要的規則之一,正斜杠(/)不會增加語義值,且可能導致混淆。REST API不允許一個尾部的斜杠,不應該將它們包含在提供給客戶端的鏈接的結尾處。

    許多Web組件和框架將平等對待以下兩個URI: 
    http://api.canvas.com/shapes/ 
    http://api.canvas.com/shapes

    但是,實際上URI中的每個字符都會計入資源的唯一身份的識別中。

    兩個不同的URI映射到兩個不同的資源。如果URI不同,那么資源也是如此,反之亦然。因此,REST API必須生成和傳遞精確的URI,不能容忍任何的客戶端嘗試不精確的資源定位。

    有些API碰到這種情況,可能設計為讓客戶端重定向到相應沒有尾斜杠的URI(也有可能會返回301 - 用來資源重定向)。

    規則2:正斜杠分隔符(/)必須用來指示層級關系

    URI的路徑中的正斜杠(/)字符用于指示資源之間的層次關系。

    例如: 
    (http://api.canvas.com/shapes/polygons/quadrilaterals/squares ;

    規則3:應使用連字符( - )來提高URI的可讀性

    為了使您的URI容易讓人們理解,請使用連字符( - )字符來提高長路徑中名稱的可讀性。在路徑中,應該使用連字符代空格連接兩個單詞 。

    例如: 
    http://api.example.com/blogs/guy-levin/posts/this-is-my-first-post

    規則4:不得在URI中使用下劃線(_)

    一些文本查看器為了區分強調URI,常常會在URI下加上下劃線。這樣下劃線(_)字符可能被文本查看器中默認的下劃線部分地遮蔽或完全隱藏。

    為避免這種混淆,請使用連字符( - )而不是下劃線

    規則5:URI路徑中首選小寫字母

    方便時,URI路徑中首選小寫字母,因為大寫字母有時會導致一些問題。RFC 3986將URI定義為區分大小寫,但scheme 和 host components除外。

    例如: 
    http://api.example.com/my-folder/my-doc

    HTTP://API.EXAMPLE.COM/my-folder/my-doc 
    這個URI很好。URI格式規范(RFC 3986)認為該URI與URI#1相同。

    http://api.example.com/My-Folder/my-doc 
    而這個URI與URI 1和2不同,這可能會導致不必要的混淆。

    規則6:文件擴展名不應包含在URI中

    在Web上,(.)字符通常用于分隔URI的文件名和擴展名。 
    REST API不應在URI中包含人造文件擴展名,來指示郵件實體的格式。相反,他們應該依賴通過Content-Type中的header傳遞media type,來確定如何處理正文的內容。

    http://api.college.com/students/3248234/courses/2005/fall.json 
    http://api.college.com/students/3248234/courses/2005/fall

    如上所示:不應使用文件擴展名來表示格式。

    應鼓勵REST API客戶端使用HTTP提供的格式選擇機制Accept request header。

    為了是鏈接和調試更簡單,REST API應該支持通過查詢參數來支持媒體類型的選擇。

    規則7:端點名稱是單數還是復數?

    keep-it-simple的原則在這里同樣適用。雖然一些”語法學家”會告訴你使用復數來描述資源的單個實例是錯誤的,但實際上為了保持URI格式的一致性建議使用復數形式。

    本著API提供商更容易實施和API使用者更容易操作的原則,可以不必糾結一些奇怪的復數(person/people,goose/geese)。

    但是應該怎么處理層級關系呢?如果一個關系只能存在于另一個資源中,RESTful原則就會提供有用的指導。我們來看一下這個例子。學生有一些課程。這些課程在邏輯上映射到學生終端,如下所示:

    http://api.college.com/students/3248234/courses - 檢索id為3248234的學生學習的所有課程的清單。 
    http://api.college.com/students/3248234/courses/physics -檢索該學生的物理課程

    結論

    當你在設計REST API服務時,您必須注意這些由URI定義的資源。

    正在構建的服務中的每個資源將至少有一個URI標識它。這個URI最好是有意義的,且能充分描述資源。URI應遵循可預測的層次結構,用來提高其可理解性,可用性:可預測的意義在于它們是一致的,它的層次結構在數據關系上是有意義的。

    RESTful API是為使用者編寫的。URI的名稱和結構應該能夠向使用者傳達更清晰的含義。通過遵循上述規則,您將創建一個更清晰的的REST API與更友好的客戶端。這些并不是REST的規則或約束,僅僅是API的增強和補充。

    我也建議你來看看http://blog.restcase.com/5-basic-rest-api-design-guidelines/這篇文章。

    最后,望大家牢記:你在為你的客戶端設計API URI,而不僅僅是為你的數據。

    posted @ 2017-06-26 09:50 華夢行 閱讀(226) | 評論 (0)編輯 收藏

    * this.getClass().getClassLoader().getResourceAsStream("testVariables.bpmn")

           classpath根目錄下加載指定名稱的文件

     * this.getClass().getResourceAsStream("testVariables.bpmn")   

           從當前包下加載指定名稱的文件

     * this.getClass().getResourceAsStream("/testVariables.bpmn") 

           從classpath根目錄下加載指定名稱的文件

    posted @ 2017-06-19 14:45 華夢行 閱讀(117) | 評論 (0)編輯 收藏
    package org.gdharley.activiti.integration.rest;

    import com.fasterxml.jackson.annotation.JsonProperty;
    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.activiti.engine.ActivitiException;
    import org.activiti.engine.delegate.DelegateExecution;
    import org.activiti.engine.delegate.Expression;
    import org.activiti.engine.delegate.JavaDelegate;
    import org.apache.commons.lang3.StringUtils;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.methods.*;
    import org.apache.http.client.utils.URIBuilder;
    import org.apache.http.client.utils.URLEncodedUtils;
    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.conn.ssl.SSLContextBuilder;
    import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClientBuilder;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.protocol.HTTP;
    import org.apache.http.util.EntityUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.http.HttpMethod;

    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    import java.util.List;


    /**
     * Created by gharley on 5/2/17.
     
    */
    public class SimpleRestDelegate implements JavaDelegate {
        private static final Logger logger = LoggerFactory.getLogger(SimpleRestDelegate.class);

        protected Expression endpointUrl;
        protected Expression httpMethod;
        protected Expression isSecure;
        protected Expression payload;

    //    一個Content-Type是application/json的請求,具體看起來是這樣的:
    //    POST /some-path HTTP/1.1
    //    Content-Type: application/json
    //
    //    { "foo" : "bar", "name" : "John" }
    //
    //
    //    { "foo" : "bar", "name" : "John" } 就是這個請求的payload



        protected Expression headers;
        protected Expression responseMapping;

        protected ObjectMapper objectMapper = new ObjectMapper();

        // Create a mixin to force the BasicNameValuePair constructor
        protected static abstract class BasicNameValuePairMixIn {
            private BasicNameValuePairMixIn(@JsonProperty("name") String name, @JsonProperty("value") String value) {
            }
        }

        public void execute(DelegateExecution execution) throws Exception {
            logger.info("Started Generic REST call delegate");

            if (endpointUrl == null || httpMethod == null) {
                throw new IllegalArgumentException("An endpoint URL and http method are required");
            }

            String restUrl = getExpressionAsString(endpointUrl, execution);
            String payloadStr = getExpressionAsString(payload, execution);
            String headersJSON = getExpressionAsString(headers, execution); // [{"name":"headerName", "value":"headerValue"}]
            String method = getExpressionAsString(httpMethod, execution);
            String rMapping = getExpressionAsString(responseMapping, execution);
            String secure = getExpressionAsString(isSecure, execution);
            String scheme = secure == "true" ? "https" : "http";

            // validate URI and create create request
            URI restEndpointURI = composeURI(restUrl, execution);

            logger.info("Using Generic REST URI " + restEndpointURI.toString());

            HttpRequestBase httpRequest = createHttpRequest(restEndpointURI, scheme, method, headersJSON, payloadStr, rMapping);

            // create http client
            CloseableHttpClient httpClient = createHttpClient(httpRequest, scheme, execution);

            // execute request
            HttpResponse response = executeHttpRequest(httpClient, httpRequest);

            // map response to process instance variables
            if (responseMapping != null) {
                mapResponse(response, rMapping, execution);
            }

            logger.info("Ended Generic REST call delegate");

        }

        protected URI composeURI(String restUrl, DelegateExecution execution)
                throws URISyntaxException {

            URIBuilder uriBuilder = null;
            uriBuilder = encodePath(restUrl, uriBuilder);
            return uriBuilder.build();
        }

        protected URIBuilder encodePath(String restUrl, URIBuilder uriBuilder) throws URISyntaxException {

            if (StringUtils.isNotEmpty(restUrl)) {

                // check if there are URL params
                if (restUrl.indexOf('?') > -1) {

                    List<NameValuePair> params = URLEncodedUtils.parse(new URI(restUrl), "UTF-8");

                    if (params != null && !params.isEmpty()) {
                        restUrl = restUrl.substring(0, restUrl.indexOf('?'));
                        uriBuilder = new URIBuilder(restUrl);
                        uriBuilder.addParameters(params);

                    }
                } else {
                    uriBuilder = new URIBuilder(restUrl);
                }
            }

            return uriBuilder;
        }

        protected HttpRequestBase createHttpRequest(URI restEndpointURI, String scheme, String httpMethod, String headers, String payload, String responseMapping) {

            if (StringUtils.isEmpty(httpMethod)) {
                throw new ActivitiException("no HTTP method provided");
            }
            if (restEndpointURI == null) {
                throw new ActivitiException("no REST endpoint URI provided");
            }

            HttpRequestBase httpRequest = null;
            HttpMethod parsedMethod = HttpMethod.valueOf(httpMethod.toUpperCase());
            StringEntity input;
            URIBuilder builder = new URIBuilder(restEndpointURI);

            switch (parsedMethod) {
                case GET:
                    try {
                        httpRequest = new HttpGet(builder.build());
                        httpRequest = addHeadersToRequest(httpRequest, headers);
                    } catch (URISyntaxException use) {
                        throw new ActivitiException("Error while building GET request", use);
                    }
                    break;
                case POST:
                    try {
                        httpRequest = new HttpPost(builder.build());
                        input = new StringEntity(payload);
    //                input.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
                        ((HttpPost) httpRequest).setEntity(input);
                        httpRequest = addHeadersToRequest(httpRequest, headers);
                        break;
                    } catch (Exception e) {
                        throw new ActivitiException("Error while building POST request", e);
                    }
                case PUT:
                    try {
                        httpRequest = new HttpPut(builder.build());
                        input = new StringEntity(payload);
    //                input.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
                        ((HttpPut) httpRequest).setEntity(input);
                        httpRequest = addHeadersToRequest(httpRequest, headers);
                        break;
                    } catch (Exception e) {
                        throw new ActivitiException("Error while building PUT request", e);
                    }
                case DELETE:
                    try {
                        httpRequest = new HttpDelete(builder.build());
                        httpRequest = addHeadersToRequest(httpRequest, headers);
                    } catch (URISyntaxException use) {
                        throw new ActivitiException("Error while building DELETE request", use);
                    }
                    break;
                default:
                    throw new ActivitiException("unknown HTTP method provided");
            }

            return httpRequest;
        }


        protected CloseableHttpClient createHttpClient(HttpRequestBase request, String scheme, DelegateExecution execution) {

            SSLConnectionSocketFactory sslsf = null;

            // Allow self signed certificates and hostname mismatches.
            if (StringUtils.equalsIgnoreCase(scheme, "https")) {
                try {
                    SSLContextBuilder builder = new SSLContextBuilder();
                    builder.loadTrustMaterial(nullnew TrustSelfSignedStrategy());
                    sslsf = new SSLConnectionSocketFactory(builder.build(), SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
                } catch (Exception e) {
                    logger.warn("Could not configure HTTP client to use SSL", e);
                }
            }

            HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

            if (sslsf != null) {
                httpClientBuilder.setSSLSocketFactory(sslsf);
            }

            return httpClientBuilder.build();
        }

        protected HttpResponse executeHttpRequest(CloseableHttpClient httpClient, HttpRequestBase httpRequest) {

            CloseableHttpResponse response = null;
            try {
                response = httpClient.execute(httpRequest);
            } catch (IOException e) {
                throw new ActivitiException("error while executing http request: " + httpRequest.getURI(), e);
            }

            if (response.getStatusLine().getStatusCode() >= 400) {
                throw new ActivitiException("error while executing http request " + httpRequest.getURI() + " with status code: "
                        + response.getStatusLine().getStatusCode());
            }

            return response;
        }

        protected void mapResponse(HttpResponse response, String responseMapping, DelegateExecution execution) {

            if (responseMapping == null || responseMapping.trim().length() == 0) {
                return;
            }

            JsonNode jsonNode = null;
            try {
                String jsonString = EntityUtils.toString(response.getEntity());
                jsonNode = objectMapper.readTree(jsonString);

            } catch (Exception e) {
                throw new ActivitiException("error while parsing response", e);
            }

            if (jsonNode == null) {
                throw new ActivitiException("didn't expect an empty response body");
            }
            execution.setVariable(responseMapping, jsonNode.toString());
        }

        protected HttpRequestBase addHeadersToRequest(HttpRequestBase httpRequest, String headerJSON) {
            Boolean contentTypeDetected = false;
            if (headerJSON != null) {
                // Convert JSON to array
                try {
                    // configuration for Jackson/fasterxml
                    objectMapper.addMixInAnnotations(BasicNameValuePair.class, BasicNameValuePairMixIn.class);
                    NameValuePair[] headers = objectMapper.readValue(headerJSON, BasicNameValuePair[].class);
                    for (NameValuePair header : headers) {
                        httpRequest.addHeader(header.getName(), header.getValue());
                        if (header.getName().equals(HTTP.CONTENT_TYPE)) {
                            contentTypeDetected = true;
                        }
                    }
                } catch (Exception e) {
                    throw new ActivitiException("Unable to parse JSON header array", e);
                }
            }
            // Now add content type if necessary
            if (!contentTypeDetected) {
                httpRequest.addHeader(HTTP.CONTENT_TYPE, "application/json");
            }
            return httpRequest;
        }

        /**
         * 
    @return string value of expression.
         * 
    @throws {@link IllegalArgumentException} when the expression resolves to a value which is not a string
         *                or if the value is null.
         
    */
        protected String getExpressionAsString(Expression expression, DelegateExecution execution) {
            if (expression == null) {
                return null;
            } else {
                Object value = expression.getValue(execution);
                if (value instanceof String) {
                    return (String) value;
                } else {
                    throw new IllegalArgumentException("Expression does not resolve to a string or is null: " + expression.getExpressionText());
                }
            }
        }
    }
    posted @ 2017-05-26 08:01 華夢行 閱讀(231) | 評論 (0)編輯 收藏

    1、概述

    activiti系統一共有23個表,包括流程定義表、一般數據信息表、流程運行實例表、流程歷史記錄表、用戶用戶組表。

    2、Activiti 流程定義表

    流程定義表,流程定義表也可以叫做是靜態資源庫,靜態資源包括圖片、定義規則等。它有部署信息表、流程模型表、流程定義表

    1、ACT_RE_DEPLOYMENT(部署信息表)

    包括:部署流程名稱、類型、部署時間

    2、ACT_RE_MODEL(模型表)

    名稱,key、類型、創建時間、最后修改時間、版本、數據源信息、部署ID、編輯源值ID、編輯源額外值ID(外鍵ACT_GE_BYTEARRAY )

    3、ACT_RE_PROCDEF(流程定義表) 

    包括流程定義、類型、流程名稱、流程key、版本號、部署ID、資源名稱、圖片資源名稱、描述信息、是否從key啟動、暫停狀態。

    3、Activiti 運行實例表

    運行實例表記錄流程流轉過程中產生的數據,一般數據分為兩個部分流程數據、業務數據。流程數據是指activiti流程引擎流轉過程中的數據,包括流程執行實例數據接、任務數據、執行任務人員信息、變量信息。業務數據則是流程過程中保存的表單數據,例如:如請假的請假單數據、報銷單數據、審批意見信息等,此部分數據一般需要自己建數據表進行保存,在之前的jbpm4中沒有保存業務數據。

    1、ACT_RU_EVENT_SUBSCR(事件子腳本)作用未知

    事件名稱(EVENT_NAME_)、事件類型(EVENT_TYPE_)、流程執行ID(EXECUTION_ID_)、流程實例ID(PROC_INST_ID_)、活動ID(ACTIVITY_ID_)、配置信息(CONFIGURATION_)、創建時間(CREATED_)

    2、ACT_RU_EXECUTION(執行中流程執行)核心我的代辦任務查詢表

    流程實例ID(PROC_INST_ID_),業務key(BUSINESS_KEY_)、父執行流程(PARENT_ID_)、流程定義Id(外鍵PROC_DEF_ID_)、實例id(ACT_ID_)、激活狀態(IS_ACTIVE_)、并發狀態(is_concurrent)、is_scope、is_evnet_scope、暫停狀態(suspension_state)、緩存結束狀態(cached_end_state)

    3、ACT_RU_IDENTITYLINK(身份聯系)

    用戶組ID(GROUP_ID_)、用戶組類型(TYPE_)、用戶ID(USER_ID_)、任務Id(外鍵:TASK_ID_)、流程實例ID(外鍵:PROC_INST_ID_)、流程定義Id(外鍵:PROC_DEF_ID_)

    4、ACT_RU_JOB(運行中的任務)

    5、ACT_RU_TASK(執行中實時任務)代辦任務查詢表

    實例id(外鍵EXECUTION_ID_)、流程實例ID(外鍵PROC_INST_ID_)、流程定義ID(PROC_DEF_ID_)、任務名稱(NAME_)、父節任務ID(PARENT_TASK_ID_)

    、任務描述(DESCRIPTION_)、任務定義key(TASK_DEF_KEY_)、所屬人(OWNER_)、代理人員 (ASSIGNEE_)、代理團(DELEGATION_)、優先權(PRIORITY_)、創建時間(CREATE_TIME_)、執行時間(DUE_DATE_)、暫停狀態(SUSPENSION_STATE_)

    6、ACT_RU_VARIABLE(實時變量)

    變量名稱(NAME_)、編碼類型(TYPE_)、執行實例ID(EXECUTION_ID_)、流程實例Id(PROC_INST_ID_)、任務id(TASK_ID_)、字節組ID(BYTEARRAY_ID_)、DOUBLE_、LONG_、TEXT_、TEXT2_

    3、流程歷史記錄

    流程歷史信息表,activiti歷史記錄表包括節點信息表、附件信息表、歷史審批記錄表、理想詳細信息表、歷史身份信息表、流程實例歷史表、任務歷史表、歷史變量表。(節點信息表、附件信息表、歷史審批記錄表、理想詳細信息表、歷史身份信息表)這些表目前還未知是如何用的。(流程實例歷史表、任務歷史表、歷史變量)三個表可以查詢我已完成任務、任務追蹤等。

    1、ACT_HI_ACTINST(活動實例信息)

    流程定義ID(PROC_DEF_ID_)、流程實例ID(PROC_INST_ID_)、流程執行ID(EXECUTION_ID_)、活動ID(ACT_ID_)、活動名稱(TASK_ID_)、活動類型(ACT_TYPE_)、任務ID、(TASK_ID_)、請求流程實例ID(CALL_PROC_INST_ID_)、代理人員(ASSIGNEE_)、開始時間(START_TIME_)、結束時間(END_TIME_)、時長(DURATION_)

    2、ACT_HI_ATTACHMENT(附件信息)

    用戶id(USER_ID_)、名稱(NAME_)、描述(DESCRIPTION_)、類型(TYPE_)、任務Id(TASK_ID_)、流程實例ID(PROC_INST_ID_)、連接(URL_)、內容Id(CONTENT_ID_)

    3、ACT_HI_COMMENT(歷史審批信息)

    類型(TYPE_)、時間(TIME_)、用戶Id(USER_ID_)、任務Id(TASK_ID_)、流程實例Id(PROC_INST_ID_)、活動(ACTION_)、消息(MESSAGE_)、全部消息(FULL_MSG_)

    4、ACT_HI_DETAIL(歷史詳細信息)

    數據類型(TYPE_)、創建時間(TIME_)、名稱(NAME_)、流程實例ID(PROC_INST_ID_)、執行實例Id(EXECUTION_ID_)、任務Id(TASK_ID_)、活動實例Id(ACT_INST_ID_)、變量類型(VAR_TYPE_)、字節數組Id、DOUBLE_、LONG_、值(TEXT_)、值2(TEXT2_)

    5、ACT_HI_IDENTITYLINK(歷史身份信息)

    任務Id(TASK_ID_)、流程實例Id(PROC_INST_ID_)、userId(USER_ID_)、用戶組類型Type(TYPE_)、用戶組ID(GROUP_ID_)

    6、ACT_HI_PROCINST(歷史流程實例信息)核心表

    流程實例ID(PROC_INST_ID_)、業務Key(BUSINESS_KEY_)、流程定義Id(PROC_DEF_ID_)、開始時間(START_TIME_)、結束時間(END_TIME_)、時長(DURATION_)、發起人員Id(START_USER_ID_)、開始節點(START_ACT_ID_)、結束節點(END_ACT_ID_)、超級流程實例Id(SUPER_PROCESS_INSTANCE_ID_)、刪除理由(DELETE_REASON_)

    7、ACT_HI_TASKINST(歷史任務流程實例信息)核心表

    流程實例ID(PROC_INST_ID_)、任務定義Key(BUSINESS_KEY_)、流程定義Id(PROC_DEF_ID_)、執行ID(EXECUTION_ID_)、名稱(NAME_)、父任務iD(PARENT_TASK_ID_)、描述(DESCRIPTION_)、所屬人(OWNER_)、代理人(ASSIGNEE_)、開始時間(START_TIME_)、結束時間(END_TIME_)、時長(DURATION_)、刪除理由(DELETE_REASON__)、優先級(PRIORITY_)、應完成時間(DUE_DATE_)、表單key(FORM_KEY_)

    8、ACT_HI_VARINST(歷史變量信息)

    流程實例ID(PROC_INST_ID_)、執行ID(EXECUTION_ID_)、任務Id、名稱(NAME_)、變量(TASK_ID_)、類型(VAR_TYPE_)、字節數組ID(BYTEARRAY_ID_)、DOUBLE_、LONG_、TEXT_、TEXT2_

    4、一般數據

    1、ACT_GE_BYTEARRAY(字節數據表)

    名稱(NAME_)、部署Id(DEPLOYMENT_ID_)、字節數據(BYTES_)、發生的(GENERATED_)

    2、ACT_GE_PROPERTY(一般屬性表)

    名稱(NAMe_)、值(VALUe_)

    5、用戶用戶組表

    Activit 的用戶用戶組表,包括用戶信息、用戶組信息、用戶與用戶組間的關系、用戶信息與用戶之間的關系。在實際開發中未采用,用的實際系統中用戶。

    1、ACT_ID_GROUP(用戶組表)

    名稱(NAME_)、類型(TYPE_)

    2、ACT_ID_USER(用戶表)

    姓(FIRST_)、名稱(LAST_)、郵件(EMAIL_)、密碼(PWD_)、頭像Id (PICTURE_ID_)

    3、ACT_ID_INFO(用戶信息表)

    用戶Id(USER_ID_)、類型(TYPE_)、formINPut名稱(KEY_)、值(VALUE_)、密碼(PASSWORD_)、父節點(PARENT_ID_)

    4、ACT_ID_MEMBERSHIP(用戶用戶組關聯表)

    用戶Id(user_ID_)、用戶組Id(group_Id)

    Activiti表結構分析完成,花了5個小時,還有很多問題不明白。后續慢慢開發過程中再理一次表之間關系吧,初步想法在系統中需要擴建表,把業務數據和流程數據分開。

    posted @ 2017-05-16 16:31 華夢行 閱讀(2120) | 評論 (0)編輯 收藏
         摘要: Activiti工作流引擎數據庫表結構 數據庫表的命名 Acitiviti數據庫中表的命名都是以ACT_開頭的。第二部分是一個兩個字符用例表的標識。此用例大體與服務API是匹配的。 l  ACT_RE_*:’RE’表示repository。帶此前綴的表包含的是靜態信息,如,流程定義,流程的資源(圖片,規則等)。 l  ACT_RU_*:̵...  閱讀全文
    posted @ 2017-05-15 22:23 華夢行 閱讀(230) | 評論 (0)編輯 收藏
    @Transient 可選 @Transient表示該屬性并非一個到數據庫表的字段的映射,ORM框架將忽略該屬性. 如果一個屬性并非數據庫表的字段映射,就務必將其標示為@Transient,否則,ORM框架默認其注解為@Basic 示例: //根據birth計算出age屬性 @Transient public int getAge() { return getYear(new Date()) - getYear(birth); } 注意是加在get方法上的
    posted @ 2017-05-10 16:59 華夢行 閱讀(1094) | 評論 (0)編輯 收藏
    Snmpwalk –v 2 –c public 192.168.20.114 1.3.6.1.2.1.2.2.1.3
    snmpget -r:127.0.0.1 -o:.1.3.6.1.2.1.25.3.3.1.2
    E:\>snmpget -r:127.0.0.1 -o:.1.3.6.1.2.1.1.1.0
    SnmpGet v1.01 - Copyright (C) 2009 SnmpSoft Company
    [ More useful network tools on http://www.snmpsoft.com ]
    OID=.1.3.6.1.2.1.1.1.0
    Type=OctetString
    Value=Hardware: Intel64 Family 6 Model 60 Stepping 3 AT/AT COMPATIBLE - Software
    : Windows Version 6.1 (Build 7601 Multiprocessor Free)
    snmpwalk -v:2c -c:public -r:127.0.0.1
    posted @ 2017-03-22 15:28 華夢行 閱讀(134) | 評論 (0)編輯 收藏

    Druid是什么?

    Druid是一個JDBC組件,它包括四個部分:

    http://download.csdn.net/download/feelnature/1580901
    http://tomcat.apache.org/tomcat-8.5-doc/monitoring.html#Enabling_JMX_Remote

    http://download.csdn.net/detail/qq_21163257/9695557

     

    • DruidDriver 代理Driver,能夠提供基于Filter-Chain模式的插件體系。
    • DruidDataSource 高效可管理的數據庫連接池。
    • SQLParser
    • 擴展組件
    • Binary: http://code.alibabatech.com/mvn/releases/com/alibaba/druid/0.1.2/druid-0.1.2.jar
    • Source: http://code.alibabatech.com/mvn/releases/com/alibaba/druid/0.1.2/druid-0.1.2-sources.jar

    Druid可以做什么?

    • 可以監控數據庫訪問性能,Druid內置提供了一個功能強大的StatFilter插件,能夠詳細統計SQL的執行性能,這對于線上分析數據庫訪問性能有幫助。
    • 替換DBCP和C3P0。Druid提供了一個高效、功能強大、可擴展性好的數據庫連接池。
    • 數據庫密碼加密。直接把數據庫密碼寫在配置文件中,這是不好的行為,容易導致安全問題。DruidDruiver和DruidDataSource都支持PasswordCallback。
    • SQL執行日志,Druid提供了不同的LogFilter,能夠支持Common-Logging、Log4j和JdkLog,你可以按需要選擇相應的LogFilter,監控你應用的數據庫訪問情況。
    • 擴展JDBC,如果你要對JDBC層有編程的需求,可以通過Druid提供的Filter機制,很方便編寫JDBC層的擴展插件。

    DruidDriver,是一個ProxyJdbcDriver,它提供了Filter-Chain模式的擴展機制,使得在Jdbc擴展編程特別方便。

    Druid提供了一些內置的擴展機制,包括StatLogTrace、HA等擴展。


    DruidDataSource是一個數據庫連接池的實現,它的設計目標是提供一個當前最好的數據庫連接池,在性能、擴展性等方面取得最合適的平衡,取代DBCP、C3P0等連接池。

    • 高性能。測試數據表明,Druid比DBCP、C3P0、BoneCP的性能都好很多。具體請看測試數據
    • 可管理性,DruidDataSource本身提供了很多監控屬性,具體看這里。DruidDataSource支持StatFilter,具體配置看 這里
    • 可擴展性,提供基于Filter-Chain模式的擴展機制。具體自定義擴展的例子看這里
    • 替換DBCP,配置和DBCP兼容,可以方便替換DBCP。
    • 適合大規模應用。結合Alibaba使用數據庫連接池的經驗,避免一些已知問題,例如數據庫不可用恢復之后產生的連接風暴問題等。

    設計

    這是DruidDataSource的設計圖示:
    http://code.alibabatech.com/svn/druid/trunk/doc/druid-pool.txt
    如果發現有亂碼,請選擇utf-8的編碼方式查看。

    Druid提供一個手工編寫的高性能的方便擴展的SQL Parser。將會支持MySQL、Oracle等流行關系數據庫的SQL Parser。

    Parser組件包括如下幾個部分:

    • Lexer 詞法解析
    • Parser,Parser包括ExprParser,各種StatementParser。
    • AST, Abstract Syntax Tree。ParserParse出來的結果就是AST。
    • Visitor。對AST做各種處理,比如FormatOutput,遍歷等等。

    簡介

     

    Druid提供了強大的監控功能,能夠監控連接池行為和SQL執行情況,讓你能夠詳細了解應用的數據庫訪問行為。

    監控對象

    • Druid的統計信息定義代碼實現在com/alibaba/druid/stat下。所有的Stat都全局靜態變量的方式保存,這樣做使得外部獲取監控信息更容易。
    • 獲取Druid監控信息的入口是com.alibaba.druid.stat.JdbcStatManager
    • Druid的監控統計信息都是通過StatFilter來實現的,如果你需要數據源進行監控,那你需要啟用StatFilter
     
    posted @ 2017-03-21 00:11 華夢行 閱讀(277) | 評論 (0)編輯 收藏
    http://repo.spring.io/release/org/springframework/spring/4.3.6.RELEASE/
    http://spring.io/tools/sts http://www.loveweir.com/posts/view/19
    https://github.com/rahulyewale/springmvcjpa
    http://download.csdn.net/download/jiuqiyuliang/8640621
    http://blog.csdn.net/suzunshou/article/details/49949005
    https://repo1.maven.org/maven2/org/mybatis/mybatis/
    http://blog.csdn.net/jiuqiyuliang/article/details/45132493/
    https://github.com/mybatis/generator/releases
    posted @ 2017-03-19 22:39 華夢行 閱讀(149) | 評論 (0)編輯 收藏
    今天從windows上導出一個sql執行文件,再倒入到unbutn中,結果出現亂碼,折騰7-8分鐘, 
    解決方式 
    在導出mysql sql執行文件的時候,指定一下編碼格式: 
    復制代碼 代碼如下:
    mysqldump -uroot -p --default-character-set=utf8 mo(dbname) > E://xxxx.sql 
    導入的時候OK了 
    執行如下 
    復制代碼 代碼如下:
    mysql -u root -p --default-character-set=utf8 
    use dbname 
    source /root/newsdata.sql 
    posted @ 2016-07-21 13:33 華夢行 閱讀(130) | 評論 (0)編輯 收藏

    CentOS
    1、備份
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 
    2、下載新的CentOS-Base.repo 到/etc/yum.repos.d/
    CentOS 5
     wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo  
    CentOS 6
     wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo  
    CentOS 7
     wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo  
    3、之后運行yum makecache生成緩存
    相關鏈接
    ##官方主頁: http://www.centos.org/
    ##郵件列表: http://www.centos.org/modules/tinycontent/index.php?id=16
    ##論壇: http://www.centos.org/modules/newbb/
    ##文檔: http://www.centos.org/docs/
    ##Wiki: http://wiki.centos.org/
    posted @ 2016-06-27 17:42 華夢行 閱讀(141) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 91精品国产免费网站| 色婷婷精品免费视频| 黄网站免费在线观看| 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲精品乱码久久久久久按摩| 黄色三级三级免费看| 免费一级成人毛片| 野花视频在线官网免费1| 国产成人免费a在线视频色戒| 亚洲日本天堂在线| 国产免费爽爽视频免费可以看| 亚洲熟妇av午夜无码不卡| 成年人在线免费看视频| 亚洲av无码一区二区三区天堂| 色播在线永久免费视频| 亚洲av片在线观看| 亚洲无码视频在线| 99久久免费国产精精品| 亚洲第一福利视频| 久久精品网站免费观看| 大桥未久亚洲无av码在线| 亚洲精品tv久久久久久久久久| 久久久精品视频免费观看| 亚洲精品无码mv在线观看网站| 99蜜桃在线观看免费视频网站| 亚洲国产精品日韩在线| 免费高清小黄站在线观看| 国产大陆亚洲精品国产| 国产91精品一区二区麻豆亚洲| 在线成人精品国产区免费| 亚洲精品中文字幕麻豆| 国产高清在线精品免费软件| 丰满少妇作爱视频免费观看| 久久久久亚洲精品成人网小说| 91精品免费在线观看| 国产尤物在线视精品在亚洲| 亚洲va久久久噜噜噜久久| 一个人免费高清在线观看| 日本一区二区三区免费高清在线| 久久精品九九亚洲精品天堂| 无码人妻一区二区三区免费|