MySql踩坑计算,微信公众号基本配置

  今天配备了须臾间早上的token,不过不驾驭怎么回事就是安排不成事,在网上找了多的格局也未曾化解了这一个标题,不过最后做在一个论坛上找到了缓解的办法。真是激动的不用不要的,话不多说一向怼代码。

Activiti新手常见的标题是,安插成功流程后,获取彰显的流水线图片(PNG)为乱码,首要反映为普通话不能正确显示。在此间分析一下乱码出现的原故,以及缓解方案。不喜欢问为何的同桌可以直接跳到化解格局段落。

衣带渐宽终不悔,为伊消得人憔悴,众里寻他千百度,蓦然回首,那人却在灯火阑珊处好通顺的句子哈哈

前天向MySQL数据库中的一张表添加含有普通话的数码,不过老是出特别,检查程序并不曾发现错误,无奈啊,后来再次检讨那张表发现表的编码方式为latin1并且原想可以插入汉语的字段的编码形式也是latin1,然后再一次精心察看控制台出口的充裕,进一步规定是表和表中字段编码不当导致的,那就修改表和中间对应的字段呗,网上找了一会儿,你别说还真有,执行完sql脚本后果真可以存入中文了,即使如此依然认为有需要总计一下,古人云:好记性不如烂笔头嘛,呵呵呵。

  这些是微信公众平台上的布置。

表现

Activiti流程图乱码常见有三种境况:

  1. 抱有汉语字符变成方块
![](https://upload-images.jianshu.io/upload_images/4770110-6e2cda534300a7ad.png)
  1. 拥有粤语字符变成浮泛汉字
![](https://upload-images.jianshu.io/upload_images/4770110-a3f85b063efed71b.png)

以致那二种情景的不当原因以及消除格局并不一致,但都与Activiti布置、生成流程图的法子有关。上边先介绍Activiti的流程图生成情势。

转了那么多弯,才精通难点就在二个地点。睡觉在此以前想清楚了难题,照旧经验太少。王国桢的治学三境界:

修改表的编码格局:ALTER TABLE `MySql踩坑计算,微信公众号基本配置。test` DEFAULT CHARACTECR-V SET
utf8;该命令用于将表test的编码格局改为utf8;

  亚洲必赢官网 1

背景介绍

Activiti中,使用的流程定义一般都以适合BPMN2.0规范的xml文本文件,后缀可以是.bpmn20.xml,.xml。其中包括了工艺流程的凡事定义内容,包蕴各节点、节点关联关系,以及用于定义突显的DI成分。

在配备流程定义时,Activiti引擎会判断,是不是还要提供了流程图文件?即使一起提供了流程图文件,Activiti就便捷了,直接采取这一个文件作为流程图。

相似的话我们都不会先构建好流程图文件再安排,约等于说,安顿时只有一个xml文件。那时候Activiti就需求团结生成对应的流程图文件了。

流程图文件会保存在Activiti的数据库ACT_GE_BYTEAXC60RAY表中,作为BLOB保存。各种流程对应3个流程图文件。于是流程图在安霎时就已经明确,除非重新安排或手动处理,否则不管配置怎么修改,突显的都以先前时代的流程图。

Activiti用于生成流程图的工具类是

org.activiti.image.impl.DefaultProcessDiagramGenerator

以此类不止可以生成流程图,还足以生成流程运维状态图。具体可以参考其中各艺术的注释。

昨夜狂风凋碧树,独上高楼,望尽天涯路

衣带渐宽终不悔,为伊消得人憔悴

众里寻他千百度,蓦然回首,那人却在灯火阑珊处

修改字段的编码格局:ALTELacrosse TABLE `test` CHANGE `name` `name`
VA汉兰达CHAPRADO(36) CHARACTE酷路泽 SET utf8 NOT NULL;
该命令用于将表test中name字段的编码情势改为utf8

  那边的url值要直接点到文件上,不然不会成功.  

阴差阳错原因剖析

亚洲必赢官网 2

您大概感兴趣的篇章:

  • 使MySQL可以存储emoji表情字符的安装教程
  • MySQL插入emoji表情败北难题的缓解情势
  • 让Java后台MySQL数据库可以协理emoji表情的办法
  • MySQL无法存储Emoji表情难题的化解方法分析
  • 左右逢原摸底mysql中utf8和utf8mb4的分别
  • MySQL查看与修改当前数据库编码的方式
  • Mysql数据库编码难题(修改数据库,表,字段编码为utf8)
  • MySQL查看和改动字符编码的落到实处方式
  • mysql存储emoji表情报错的拍卖措施【更改编码为utf8mb4】

下一场后台的安装

粤语字符变成方块

在配备流程时,生成流程图的代码位于

org.activiti.engine.impl.bpmn.deployer.BpmnDeployer.deploy():154 (Activiti 5.22中)

byte[] diagramBytes = IoUtil.readInputStream(processEngineConfiguration.
                    getProcessDiagramGenerator().generateDiagram(bpmnParse.getBpmnModel(), "png", processEngineConfiguration.getActivityFontName(),
                        processEngineConfiguration.getLabelFontName(),processEngineConfiguration.getAnnotationFontName(), processEngineConfiguration.getClassLoader()), null);

看得出在此间,须要在processEngineConfiguration里,保存有不易的LabelFontName,以及AnnotationFontName作为参数,Generator才能正确生成(非英文)的流程图片。

[TOC]

 1 <?php
 2 namespace app\weixin\controller;
 3 
 4 use think\Controller;
 5 
 6 define("TOKEN", "******");//这里要输入你的token值
 7 
 8 // $wechatObj = new wechatCallbackapiTest();
 9 
10 // $wechatObj->valid();
11 
12 class Wx2 extends Controller {
13     
14     public function index()  
15     {  
16         $echoStr = $_GET["echostr"];  
17   
18         //valid signature , option  
19         if($this->checkSignature()){  
20             ob_clean(); //丢弃缓存中的内容
21             echo $echoStr;  
22             exit;  
23         }  
24     }  
25   
26     public function responseMsg()  
27     {  
28         //get post data, May be due to the different environments  
29         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];  
30   
31         //extract post data  
32         if (!empty($postStr)){  
33                   
34                 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);  
35                 $fromUsername = $postObj->FromUserName;  
36                 $toUsername = $postObj->ToUserName;  
37                 $keyword = trim($postObj->Content);  
38                 $time = time();  
39                 $textTpl = "<xml>  
40                             <ToUserName><![CDATA[%s]]></ToUserName>  
41                             <FromUserName><![CDATA[%s]]></FromUserName>  
42                             <CreateTime>%s</CreateTime>  
43                             <MsgType><![CDATA[%s]]></MsgType>  
44                             <Content><![CDATA[%s]]></Content>  
45                             <FuncFlag>0</FuncFlag>  
46                             </xml>";               
47                 if(!empty( $keyword ))  
48                 {  
49                     $msgType = "text";  
50                     $contentStr = "Welcome to wechat world!";  
51                     $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);  
52                     echo $resultStr;  
53                 }else{  
54                     echo "Input something...";  
55                 }  
56   
57         }else {  
58             echo "";  
59             exit;  
60         }  
61     }  
62           
63     private function checkSignature()  
64     {  
65         $signature = $_GET["signature"];  
66         $timestamp = $_GET["timestamp"];  
67         $nonce = $_GET["nonce"];      
68                   
69         $token = TOKEN;  
70         $tmpArr = array($token, $timestamp, $nonce);  
71         sort($tmpArr,SORT_STRING); 72         $tmpStr = implode( $tmpArr );  
73         $tmpStr = sha1( $tmpStr );  
74           
75         if( $tmpStr == $signature ){  
76             return true;  
77         }else{  
78             return false;  
79         }  
80     }
81 
82 
83 }
华语字符变成浮泛汉字

亚洲必赢官网,出现那种难题,基本上都以在Activiti提供的demo程序——Explorer中统筹、布置流程的时候出现的。原因是demo程序有bug。

Activiti Explorer中提供的Activiti
Modeler,是多少个Web流程设计器。用于编辑、保存流程模型。那里请留心,不或然用于新建,它生成的也只是流程模型,不是流程定义。生成的流水线模型是Json格式的,也保留在ACT_GE_BYTEARRAY表中。

接下来在Activiti Explorer中提供了“布置”的操作。对应的代码为(Activiti
5.22中)(实际有多个布局格局,不过画线布署的是以此。另二个是填表单格局地署,问题类似)

org.activiti.editor.ui.EditorProcessDefinitionDetailPanel.deployModelerModel()

protected void deployModelerModel(final ObjectNode modelNode) {
    BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);
    byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(model);

    String processName = modelData.getName() + ".bpmn20.xml";
    Deployment deployment = repositoryService.createDeployment()
            .name(modelData.getName())
            .addString(processName, new String(bpmnBytes))
            .deploy();

    ExplorerApp.get().getViewManager().showDeploymentPage(deployment.getId());
}

忽视是,将Modeler的数目格式(Json
modelNode),转换为Activiti内部交流格式(BpmnModel
model),再转成xmlbyte(byte[]
bpmnBytes),然后在安插的时候再作为String参加计划
.addString(processName, new String(bpmnBytes))

很绕是否?Activiti的开发者也把本人绕晕了,导致那里出现了bug。

public byte[] convertToXML(BpmnModel model) {
  return convertToXML(model, DEFAULT_ENCODING);
}

改换为xmlbyte的法子里,指定了编码形式(为UTF-8)。但是再转回字符串的时候,却绝非点名编码格局!
new String(bpmnBytes)

在未内定编码方式的时候,new
String使用jvm定义的暗许编码方式解析,而大家一般采纳的都以gb2312,因而造成难点。

数据源配置的难点

切切实实可以看
这里

本地连接可以,连接受服务器就是越发,愣是不行。笔者刚最先以为是“APPARENT
DEADLOCK!!!”的标题,各个google方法,试了三次依然拾叁分。都快到头了,晌午教室也在试如故没有缓解。深夜睡觉的时候突然想起来,小编MyEclipse好像屏蔽掉了独具往外的接连,( ̄▽ ̄;),真是搬起石头砸自个儿的脚,给本人设置障碍。早晨一来,将连接松开,好题材化解。贴一下DBCP数据源的配置

#数据库驱动
driverClassName=com.mysql.jdbc.Driver
#数据库连接地址
url=jdbc:mysql://服务器地址:3306/dbWaterColInfo
#用户名
username=root
#密码
password=root

#连接池的最大数据库连接数。设为0表示无限制
maxActive=30
#最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连
#接将被标记为不可用,然后被释放。设为0表示无限制
maxIdle=10
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制
maxWait=1000

#超过removeAbandonedTimeout时间后,是否进 行没用连接(废弃)的回收(默认为false,调整为true) 
removeAbandoned=true
#超过时间限制,回收没有用(废弃)的连接(默认为 300秒,调整为180)
removeAbandonedTimeout=180

//DBCP管理类,也是从网上找的
package com.kuiblog.utils;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class DBCPManager {
    private static final Log log = LogFactory.getLog(DBCPManager.class);
    private static final String configFile = "这里替换成你的实际配置文件";

    private static DataSource dataSource;

    static {
        Properties dbProperties = new Properties();
        try {
            dbProperties.load(DBCPManager.class.getClassLoader()
                    .getResourceAsStream(configFile));
            dataSource = BasicDataSourceFactory.createDataSource(dbProperties);

            Connection conn = getConn();
            DatabaseMetaData mdm = conn.getMetaData();
            log.info("Connected to " + mdm.getDatabaseProductName() + " "
                    + mdm.getDatabaseProductVersion());
            if (conn != null) {
                conn.close();
            }
        } catch (Exception e) {
            log.error("初始化连接池失败:" + e);
        }
    }

    private DBCPManager(){

    }
    /**
     * 获取链接,用完后记得关闭
     * 
     * @see {@link DBManager#closeConn(Connection)}
     * @return
     */
    public static final Connection getConn() {
        Connection conn = null;
        try {
            conn = dataSource.getConnection();
        } catch (SQLException e) {
            log.error("获取数据库连接失败:" + e);
        }
        return conn;
    }

    /**
     * 关闭连接
     * 
     * @param conn
     *            需要关闭的连接
     */
    public static void closeConn(Connection conn) {
        try {
            if (conn != null && !conn.isClosed()) {
                conn.setAutoCommit(true);
                conn.close();
            }
        } catch (SQLException e) {
            log.error("关闭数据库连接失败:" + e);
        }
    }
}

利用DBCP须要导入四个包加三个log包。commons-dbcpcommons-poolcommons-logging

下一场就足以放心大胆的运用了

  即使那种办法也非凡的,唯有修改编码格局来执行了,修改编码情势在网上有众多,本身不论一招来就出去,

赶尽杀绝措施

重新强调,修改以往,须要重新布置或手动生成流程图片,才能来看作用!

数据库编码难点

在出现数据库编码难题以前自个儿还赶上了2个小意思,那就是本身经过DBUtils操作数据库,执行SELECT * FROM userInfos_t可以查询到具有的始末,然后参数化查询就那一个,比如SELECT * FROM userInfos_t WHERE name='张三',但是SELECT * FROM userInfos_t WHERE id =2却可以,也是百思不得解,好呢。也是数据库编码的难点。固然小编在Navicat for mysql中看看的是’张三’,但数据库编码格局并不是UTF8,所以自身寻找是寻找不出去的。

  1. 先是查看数据库的字符集

show variables like 'collation_%';

亚洲必赢官网 3

那是自笔者修改之后的,原先的都以latin1

  1. 网上涉及了无数消除方法,一定要密切看。

    我的Mysql版本是5.7,做了如下修改成功了

    修改/etc/mysql/my.cnf

    [client]
    default-character-set=utf8
    [mysqld]
    default-storage-engine=INNODB
    character-set-server=utf8
    collation-server=utf8_general_ci
    

    怎么找my.cnf

    locate my.cnf
    //如果找不到的话
    updatedb,//然后在查找
    

    重启Mysql服务

    service mysqld restart
    
也可以查看[这篇文章](http://www.pc6.com/infoview/article_63586.html)

来解决

总结
====

暂时的问题就这样多,用了`DBUtil`,没有用`Hibernate`,等以后学习学习再用。

### 文章首发于kuiblog.com。加油

  前些天就享受到此处,然后觉得自个儿写的不易的请推荐,感谢

汉语字符变成方块

在Activiti的配备中,加上字体配置即可。

对此Spring用户,在Spring配置文件中找到Activiti流程引擎定义的地点

<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
    <property name="dataSource" ref="dataSource"/>
    <property name="transactionManager" ref="transactionManager"/>
    <property name="databaseSchemaUpdate" value="true"/>
    ...

在里头添加多少个参数(根据Activiti的版本不相同,参数数量不必然。用IDE指示,把装有带有font的都安装上就好了)。字体可以听从喜好设置,但需求保险tomcat运转时得以找到(例如暗中同意安装的linux服务器很大概就从不)。

<property name="activityFontName" value="宋体"/>
<property name="labelFontName" value="宋体"/>
<property name="annotationFontName" value="宋体"/>

重启tomcat使配置生效,重新安顿流程以重新生成流程图。方块字就ok啦。

 

汉语字符变成浮泛汉字

鉴于难题出在编码情势上,因而有三种修改章程

1. 改动jvm默许参数。

在tomcat的vm运转参数上,加上-Dfile.encoding=UTF-8。可是副效用是促成整个项目都运转在utf-8下,对于写的不谨小慎微的档次,大概造成其余地点暗许使用gb2312编码的代码出错。

2. 修改Explorer安顿部分的代码

org.activiti.editor.ui.EditorProcessDefinitionDetailPanel.deployModelerModel():348
修改为.addString(processName, new String(bpmnBytes, "UTF-8"))即可。

  • 可以一直修改activiti的源码,编译后使用。

  • 也足以在团结的连串下,手动创造org.activiti.editor.ui.EditorProcessDefinitionDetailPanel类,把Activiti的源码贴进去,再修核查确。这样大家重写的类就会由classloader优先加载,覆盖Activiti本身的贯彻,达到修改的目标。

3. 说到底Explorer只是Activiti提供的demo样例。自个儿写的时候,可以参考Explorer的代码,可别直接拿来用哦。
彰显字符为空白

其一严苛来说并不是“乱码”,化解措施也很简短:画流程图的时候,少写多少个字,可能把范围拖动搞大一点就可以了~

网站地图xml地图