Skip to content

Commit 9309a9b

Browse files
committed
feat: modify config
1 parent 8118b36 commit 9309a9b

File tree

11 files changed

+196
-77
lines changed

11 files changed

+196
-77
lines changed

arex-storage-web-api/src/main/java/com/arextest/storage/mock/impl/DefaultMockResultProviderImpl.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.arextest.storage.model.MockResultType;
1919
import com.arextest.storage.serialization.ZstdJacksonSerializer;
2020
import com.arextest.storage.service.QueryConfigService;
21+
import com.arextest.storage.service.config.ApplicationDefaultConfig;
2122
import com.arextest.storage.utils.DatabaseUtils;
2223
import com.google.common.collect.Lists;
2324
import com.google.common.collect.Maps;
@@ -41,6 +42,8 @@
4142
import org.springframework.beans.factory.annotation.Value;
4243
import org.springframework.stereotype.Component;
4344

45+
import static com.arextest.storage.model.Constants.MAX_SQL_LENGTH;
46+
4447

4548
@Component
4649
@Slf4j
@@ -74,7 +77,7 @@ final class DefaultMockResultProviderImpl implements MockResultProvider {
7477
@Resource
7578
private QueryConfigService queryConfigService;
7679
@Resource
77-
private DatabaseUtils databaseUtils;
80+
private ApplicationDefaultConfig applicationDefaultConfig;
7881

7982
/**
8083
* 1. Store recorded data and matching keys in redis 2. The mock type associated with dubbo, which
@@ -96,7 +99,7 @@ public <T extends Mocker> boolean putRecordResult(MockCategoryType category, Str
9699
// Obtain the number of the same interfaces in recorded data
97100
while (valueIterator.hasNext()) {
98101
T value = valueIterator.next();
99-
databaseUtils.regenerateOperationName(value);
102+
DatabaseUtils.regenerateOperationName(value, applicationDefaultConfig.getConfigAsInt(MAX_SQL_LENGTH));
100103
mockList.add(value);
101104
if (shouldRecordCallReplayMax) {
102105
// Dubbo type mock needs to calculate the number of body and methods combined

arex-storage-web-api/src/main/java/com/arextest/storage/mock/internal/matchkey/impl/DatabaseMatchKeyBuilderImpl.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import org.springframework.core.annotation.Order;
1818
import org.springframework.stereotype.Component;
1919

20-
import javax.annotation.Resource;
2120
import java.security.MessageDigest;
2221
import java.util.ArrayList;
2322
import java.util.Arrays;
@@ -44,9 +43,6 @@ public class DatabaseMatchKeyBuilderImpl implements MatchKeyBuilder {
4443
private static final String COMMA_STRING = ",";
4544
private static final int INDEX_NOT_FOUND = -1;
4645
private static final int UPPER_LOWER_CASE_DELTA_VALUE = 32;
47-
48-
@Resource
49-
private DatabaseUtils databaseUtils;
5046
/**
5147
* table name for ms-sql-server and mysql, which valid format as follow: ms-sql-server example:
5248
* 1,dbo.[tableName] 2,[orderDb].dbo.[tableName] 3,tableName mysql example:
@@ -166,7 +162,7 @@ private List<byte[]> dbMockKeyBuild(Mocker databaseMocker) {
166162
Mocker.Target targetRequest = databaseMocker.getTargetRequest();
167163
String sqlParameter = targetRequest.attributeAsString(MockAttributeNames.DB_PARAMETERS);
168164
String sqlText = targetRequest.getBody();
169-
String dbName = databaseUtils.parseDbName(databaseMocker.getOperationName(), targetRequest);
165+
String dbName = DatabaseUtils.parseDbName(databaseMocker.getOperationName(), targetRequest);
170166
byte[] dbNameBytes = CacheKeyUtils.toUtf8Bytes(dbName);
171167
byte[] sqlTextBytes = CacheKeyUtils.toUtf8Bytes(sqlText);
172168
byte[] sqlParameterBytes = CacheKeyUtils.toUtf8Bytes(sqlParameter);
@@ -237,7 +233,7 @@ private boolean tryAddParameterWithoutValue(MessageDigest md5Digest, String sqlP
237233
}
238234

239235
private void findTableNameToMd5WithParser(String sqlText, MessageDigest md5Digest, String operationName) {
240-
List<String> tableNames = databaseUtils.parseTableNames(operationName);
236+
List<String> tableNames = DatabaseUtils.parseTableNames(operationName);
241237
if (CollectionUtils.isEmpty(tableNames)) {
242238
findTableNameToMd5(sqlText, md5Digest);
243239
} else {

arex-storage-web-api/src/main/java/com/arextest/storage/model/Constants.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,7 @@ public interface Constants{
2727
String EXPIRATION_TIME = "expirationTime";
2828
// endregion
2929

30+
// applicationConfig
31+
String MAX_SQL_LENGTH = "maxSqlLength";
32+
3033
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package com.arextest.storage.service.config;
2+
3+
import com.arextest.storage.service.config.provider.ConfigProvider;
4+
import org.apache.commons.collections4.MapUtils;
5+
import org.apache.commons.lang3.StringUtils;
6+
import org.springframework.stereotype.Component;
7+
8+
import javax.annotation.PostConstruct;
9+
import javax.annotation.Resource;
10+
import java.util.Map;
11+
12+
/**
13+
*
14+
* @author niyan
15+
* @date 2024/6/6
16+
* @since 1.0.0
17+
*/
18+
@Component
19+
public class ApplicationDefaultConfig {
20+
21+
@Resource
22+
private ConfigProvider configProvider;
23+
Map<String, String> configs;
24+
25+
@PostConstruct
26+
public void init() {
27+
configs = configProvider.loadConfigs("application.yaml");
28+
configProvider.onChange(configs);
29+
}
30+
31+
32+
public String getConfigAsString(String key) {
33+
if (MapUtils.isEmpty(configs)) {
34+
return null;
35+
}
36+
37+
return configs.getOrDefault(key, StringUtils.EMPTY);
38+
}
39+
40+
41+
public Integer getConfigAsInt(String key) {
42+
if (MapUtils.isEmpty(configs)) {
43+
return null;
44+
}
45+
if (!configs.containsKey(key)) {
46+
return null;
47+
}
48+
if (configs.get(key) == null) {
49+
return null;
50+
}
51+
try {
52+
return Integer.parseInt(configs.get(key));
53+
} catch (NumberFormatException e) {
54+
return null;
55+
}
56+
}
57+
58+
}

arex-storage-web-api/src/main/java/com/arextest/storage/service/config/ConfigManager.java

Lines changed: 0 additions & 36 deletions
This file was deleted.

arex-storage-web-api/src/main/java/com/arextest/storage/service/config/impl/ApplicationPropertiesConfigProvider.java

Lines changed: 74 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,16 @@
22

33
import com.arextest.storage.service.config.provider.ConfigProvider;
44
import lombok.extern.slf4j.Slf4j;
5+
import org.apache.commons.collections4.MapUtils;
6+
import org.apache.commons.lang3.StringUtils;
7+
import org.yaml.snakeyaml.Yaml;
58

9+
import java.io.InputStream;
610
import java.util.Collections;
711
import java.util.HashMap;
12+
import java.util.LinkedHashMap;
813
import java.util.Map;
14+
import java.util.Objects;
915
import java.util.Properties;
1016

1117
/**
@@ -16,11 +22,35 @@
1622
@Slf4j
1723
public class ApplicationPropertiesConfigProvider implements ConfigProvider {
1824

19-
private Map<String, String> configs;
2025

2126
@Override
22-
public void loadConfigs(String configName) {
27+
public Map<String, String> loadConfigs(String configName) {
28+
if (StringUtils.isEmpty(configName)) {
29+
return Collections.emptyMap();
30+
}
31+
if (configName.endsWith(".properties")) {
32+
return parsePropertiesTypeConfig(configName);
33+
} else if (configName.endsWith(".yml") || configName.endsWith(".yaml")) {
34+
return parseYamlTypeConfig(configName);
35+
} else {
36+
return Collections.emptyMap();
37+
}
38+
}
39+
40+
@Override
41+
public void onChange(Map<String, String> configs) {
42+
// nothing to do
43+
}
44+
45+
46+
/**
47+
* load application.properties
48+
* @param configName e.g. /META-INF/app.properties
49+
* @return configs
50+
*/
51+
private Map<String, String> parsePropertiesTypeConfig(String configName) {
2352
Properties properties = new Properties();
53+
Map<String, String> configs;
2454
try {
2555
properties.load(ApplicationPropertiesConfigProvider.class.getResourceAsStream(configName));
2656
// convert properties to map
@@ -29,15 +59,51 @@ public void loadConfigs(String configName) {
2959
LOGGER.error("load application.properties error", e);
3060
configs = Collections.emptyMap();
3161
}
62+
return configs;
3263
}
3364

34-
@Override
35-
public void onChange(Map<String, String> configs) {
36-
// nothing to do
65+
/**
66+
* load application.yml
67+
* @param configName e.g. application.yml
68+
* @return configs
69+
*/
70+
private Map<String, String> parseYamlTypeConfig(String configName) {
71+
try {
72+
Yaml yaml = new Yaml();
73+
Map<String, String> configs = new LinkedHashMap<>();
74+
InputStream inputStream = ApplicationPropertiesConfigProvider.class
75+
.getClassLoader()
76+
.getResourceAsStream(configName);
77+
Map<String, Object> obj = yaml.load(inputStream);
78+
if (MapUtils.isEmpty(obj)) {
79+
return Collections.emptyMap();
80+
}
81+
flattenMap(configs, obj, null);
82+
return configs;
83+
} catch (Exception e) {
84+
LOGGER.error("load application.yml error", e);
85+
return Collections.emptyMap();
86+
}
3787
}
3888

39-
@Override
40-
public Map<String, String> getConfigs() {
41-
return configs;
89+
/**
90+
* flatten map
91+
* @param result result
92+
* @param source source
93+
* @param parentKey parentKey
94+
*/
95+
private void flattenMap(Map<String, String> result, Map<String, Object> source, String parentKey) {
96+
for (Map.Entry<String, Object> entry : source.entrySet()) {
97+
// key = parentKey + "." + entry.getKey()
98+
String key = (parentKey != null ? parentKey + "." : "") + entry.getKey();
99+
if (entry.getValue() instanceof Map) {
100+
flattenMap(result, (Map<String, Object>) entry.getValue(), key);
101+
} else if (Objects.isNull(entry.getValue())) {
102+
result.put(key, null);
103+
} else {
104+
result.put(key, entry.getValue().toString());
105+
}
106+
}
42107
}
108+
43109
}

arex-storage-web-api/src/main/java/com/arextest/storage/service/config/provider/ConfigProvider.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,10 @@ public interface ConfigProvider {
1111
/**
1212
* load all configs
1313
*/
14-
void loadConfigs(String configName);
14+
Map<String, String> loadConfigs(String configName);
1515

1616
/**
1717
* replace all configs
1818
*/
1919
void onChange(Map<String, String> configs);
20-
21-
/**
22-
* get all configs
23-
*/
24-
Map<String, String> getConfigs();
2520
}

arex-storage-web-api/src/main/java/com/arextest/storage/service/handler/mocker/database/DatabaseMockerHandler.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.arextest.model.mock.MockCategoryType;
44
import com.arextest.model.mock.Mocker;
5+
import com.arextest.storage.service.config.ApplicationDefaultConfig;
56
import com.arextest.storage.service.handler.mocker.MockerHandler;
67
import com.arextest.storage.utils.DatabaseUtils;
78
import lombok.Setter;
@@ -10,6 +11,8 @@
1011

1112
import javax.annotation.Resource;
1213

14+
import static com.arextest.storage.model.Constants.MAX_SQL_LENGTH;
15+
1316
/**
1417
* @author niyan
1518
* @date 2024/4/23
@@ -19,7 +22,8 @@
1922
public class DatabaseMockerHandler implements MockerHandler {
2023

2124
@Setter(onMethod_={@Autowired})
22-
private DatabaseUtils databaseUtils;
25+
private ApplicationDefaultConfig applicationDefaultConfig;
26+
2327

2428
@Override
2529
public MockCategoryType getMockCategoryType() {
@@ -28,11 +32,11 @@ public MockCategoryType getMockCategoryType() {
2832

2933
@Override
3034
public void handleOnRecordSaving(Mocker mocker) {
31-
databaseUtils.regenerateOperationName(mocker);
35+
DatabaseUtils.regenerateOperationName(mocker, applicationDefaultConfig.getConfigAsInt(MAX_SQL_LENGTH));
3236
}
3337

3438
@Override
3539
public void handleOnRecordMocking(Mocker mocker) {
36-
databaseUtils.regenerateOperationName(mocker);
40+
DatabaseUtils.regenerateOperationName(mocker, applicationDefaultConfig.getConfigAsInt(MAX_SQL_LENGTH));
3741
}
3842
}

0 commit comments

Comments
 (0)