问题
1、WSO2 API Manager使用的数据库修改成了mysql,初始化数据库的时候数据库格式设置成了latin1。(如果数据库编码设置成utf-8,在执行项目提供的mysql脚本时,会报索引长度超过3072byte的错误)
2、现在有新需求是:要求支持发布中文名称的api,并且不影响统计分析功能。
解决办法
源码下载地址: WSO2
源码下载地址: siddhi
需要修改源码
- 第一处:
修改org.wso2.carbon.apimgt.impl.utils.APIUtil#executeQueryOnStreamProcessor方法
原始代码:
String responseStr = EntityUtils.toString(entity);
修改后:
String responseStr = EntityUtils.toString(entity,"utf-8");
- 第二处:
如果不使用api analytics,此处可忽略。
修改siddhi-store-rdbms-4.0.35.jar 包下
\siddhi-store-rdbms-4.0.35\component\src\main\resources\rdbms-table-config.xml 文件中,标签内容
修改前:
<database name="mysql">
<tableCreateQuery>CREATE TABLE {{TABLE_NAME}} ({{COLUMNS, PRIMARY_KEYS}})</tableCreateQuery>
<tableCheckQuery>SELECT 1 FROM {{TABLE_NAME}} LIMIT 1</tableCheckQuery>
<indexCreateQuery>CREATE INDEX {{TABLE_NAME}}_INDEX ON {{TABLE_NAME}} ({{INDEX_COLUMNS}})</indexCreateQuery>
<recordExistsQuery>SELECT 1 FROM {{TABLE_NAME}} {{CONDITION}} LIMIT 1</recordExistsQuery>
<recordSelectQuery>SELECT * FROM {{TABLE_NAME}} {{CONDITION}}</recordSelectQuery>
<recordInsertQuery>INSERT INTO {{TABLE_NAME}} ({{COLUMNS}}) VALUES ({{Q}})</recordInsertQuery>
<recordUpdateQuery>UPDATE {{TABLE_NAME}} SET {{COLUMNS_AND_VALUES}} {{CONDITION}}</recordUpdateQuery>
<recordDeleteQuery>DELETE FROM {{TABLE_NAME}} {{CONDITION}}</recordDeleteQuery>
<recordContainsCondition>({{COLUMNS}} LIKE {{VALUES}})</recordContainsCondition>
<stringSize>254</stringSize>
<batchEnable>true</batchEnable>
<batchSize>1000</batchSize>
<typeMapping>
<binaryType>BLOB</binaryType>
<booleanType>TINYINT(1)</booleanType>
<doubleType>DOUBLE</doubleType>
<floatType>FLOAT</floatType>
<integerType>INTEGER</integerType>
<longType>BIGINT</longType>
<stringType>VARCHAR</stringType>
</typeMapping>
</database>
修改后:
<database name="mysql">
<tableCreateQuery>CREATE TABLE {{TABLE_NAME}} ({{COLUMNS, PRIMARY_KEYS}})</tableCreateQuery>
<tableCheckQuery>SELECT 1 FROM {{TABLE_NAME}} LIMIT 1</tableCheckQuery>
<indexCreateQuery>CREATE INDEX {{TABLE_NAME}}_INDEX ON {{TABLE_NAME}} ({{INDEX_COLUMNS}})</indexCreateQuery>
<recordExistsQuery>SELECT 1 FROM {{TABLE_NAME}} {{CONDITION}} LIMIT 1</recordExistsQuery>
<recordSelectQuery>SELECT * FROM {{TABLE_NAME}} {{CONDITION}}</recordSelectQuery>
<recordInsertQuery>INSERT INTO {{TABLE_NAME}} ({{COLUMNS}}) VALUES ({{Q}})</recordInsertQuery>
<recordUpdateQuery>UPDATE {{TABLE_NAME}} SET {{COLUMNS_AND_VALUES}} {{CONDITION}}</recordUpdateQuery>
<recordDeleteQuery>DELETE FROM {{TABLE_NAME}} {{CONDITION}}</recordDeleteQuery>
<recordContainsCondition>({{COLUMNS}} LIKE {{VALUES}})</recordContainsCondition>
<stringSize>200</stringSize>
<batchEnable>true</batchEnable>
<batchSize>1000</batchSize>
<typeMapping>
<binaryType>BLOB</binaryType>
<booleanType>TINYINT(1)</booleanType>
<doubleType>DOUBLE</doubleType>
<floatType>FLOAT</floatType>
<integerType>INTEGER</integerType>
<longType>BIGINT</longType>
<stringType>VARCHAR</stringType>
</typeMapping>
</database>
-
修改项目自带的数据库脚本,如下目录:
把下图标记的字段,长度修改为512
-
把mysql数据库编码修改为utf-8,然后删除原有的表,重新执行脚本。
然后重新启动项目,测试下效果。