修改性能
This commit is contained in:
@@ -1,50 +0,0 @@
|
||||
Manifest-Version: 1.0
|
||||
Main-Class: com.fx.client.AppStartup
|
||||
Class-Path: tomcat-embed-core-9.0.41.jar Java-WebSocket-1.5.1.jar hystri
|
||||
x-core-1.5.18.jar druid-spring-boot-starter-1.1.14.jar commons-lang-2.6
|
||||
.jar jersey-core-1.19.1.jar pagehelper-5.1.4.jar spring-security-web-5.
|
||||
4.2.jar spring-boot-starter-security-2.4.1.jar okhttp-3.14.6.jar datafx
|
||||
-eventsystem-8.0.2-SNAPSHOT.jar spring-context-support-5.3.2.jar okio-1
|
||||
.17.2.jar ribbon-core-2.3.0.jar druid-1.1.14.jar junit-4.12.jar spring-
|
||||
boot-starter-quartz-2.4.1.jar jackson-datatype-jsr310-2.11.3.jar spring
|
||||
-jcl-5.3.2.jar tilesfx-1.6.8.jar spring-boot-2.4.1.jar datafx-flow-8.0.
|
||||
2-SNAPSHOT.jar HdrHistogram-2.1.9.jar slf4j-api-1.7.21.jar fontawesomef
|
||||
x-8.9.jar netflix-statistics-0.1.1.jar spring-tx-5.3.2.jar feign-core-1
|
||||
0.9.jar commons-codec-1.6.jar spring-context-5.3.2.jar jsr305-3.0.1.jar
|
||||
archaius-core-0.7.6.jar DmJdbcDriver-1.0.0.jar spring-beans-5.3.2.jar
|
||||
ribbon-loadbalancer-2.3.0.jar httpclient-4.2.1.jar spring-boot-starter-
|
||||
logging-2.4.1.jar jjwt-0.7.0.jar jfoenix-8.0.10.jar spring-boot-starter
|
||||
-tomcat-2.4.1.jar pagehelper-spring-boot-autoconfigure-1.2.5.jar httpco
|
||||
re-4.2.1.jar c3p0-0.9.5.4.jar feign-hystrix-10.9.jar guava-16.0.1.jar j
|
||||
avafx-base-11.0.2-mac.jar ikonli-javafx-2.4.0.jar spring-security-core-
|
||||
5.4.2.jar snakeyaml-1.27.jar jackson-datatype-jdk8-2.11.3.jar jakarta.a
|
||||
nnotation-api-1.3.5.jar commons-logging-1.1.1.jar mchange-commons-java-
|
||||
0.2.15.jar javafx-media-11.0.2-mac.jar ribbon-httpclient-2.2.0.jar quar
|
||||
tz-2.3.2.jar javafx-media-11.0.2.jar log4j-api-2.13.3.jar annotations-2
|
||||
.0.0.jar jackson-module-parameter-names-2.11.3.jar jakarta.el-3.0.3.jar
|
||||
spring-boot-autoconfigure-1.5.12.RELEASE.jar jackson-databind-2.10.0.p
|
||||
r3.jar tomcat-embed-websocket-9.0.41.jar logback-core-1.1.7.jar pagehel
|
||||
per-spring-boot-starter-1.2.5.jar commons-configuration-1.8.jar mybatis
|
||||
-3.5.6.jar commons-lang3-3.4.jar javafx-graphics-11.0.2-mac.jar ikonli-
|
||||
fontawesome5-pack-2.4.0.jar feign-okhttp-10.9.jar jul-to-slf4j-1.7.30.j
|
||||
ar spring-websocket-5.3.2.jar spring-messaging-5.3.2.jar spring-aop-5.3
|
||||
.2.jar spring-boot-starter-2.4.1.jar pinyin4j-2.5.0.jar jackson-annotat
|
||||
ions-2.10.0.pr3.jar spring-web-5.3.2.jar spring-jdbc-5.3.1.jar spring-c
|
||||
ore-5.3.2.jar javafx-controls-11.0.2.jar spring-expression-5.2.11.RELEA
|
||||
SE.jar feign-slf4j-10.9.jar mybatis-spring-2.0.6.jar servo-core-0.10.1.
|
||||
jar controlsfx-11.0.3.jar lombok-1.18.16.jar spring-boot-starter-websoc
|
||||
ket-2.4.1.jar jersey-apache-client4-1.19.1.jar HikariCP-java7-2.4.13.ja
|
||||
r javafx-graphics-11.0.2.jar servo-internal-0.10.1.jar log4j-to-slf4j-2
|
||||
.13.3.jar kotlin-compiler-1.0.6.jar datafx-injection-8.0.2-SNAPSHOT.jar
|
||||
spring-security-config-5.4.2.jar jsqlparser-1.0.jar commons-collection
|
||||
s-3.2.1.jar jsr311-api-1.1.1.jar jackson-core-2.10.0.pr3.jar spring-boo
|
||||
t-starter-jdbc-2.4.0.jar logback-classic-1.1.7.jar spring-webmvc-5.3.2.
|
||||
jar spring-boot-starter-json-2.4.1.jar javax.inject-1.jar joda-time-2.1
|
||||
0.1.jar rxjava-1.2.0.jar netflix-commons-util-0.1.1.jar datafx-core-8.0
|
||||
.2-SNAPSHOT.jar spring-boot-starter-web-2.4.1.jar mybatis-spring-boot-s
|
||||
tarter-2.1.4.jar hamcrest-core-1.3.jar mysql-connector-java-8.0.20.jar
|
||||
HikariCP-3.4.5.jar ikonli-core-2.4.0.jar javafx-controls-11.0.2-mac.jar
|
||||
javafx-base-11.0.2.jar feign-jackson-10.9.jar feign-ribbon-10.9.jar sp
|
||||
ring-boot-starter-cache-2.4.1.jar javassist-3.18.1-GA.jar jersey-client
|
||||
-1.19.1.jar mybatis-spring-boot-autoconfigure-2.1.4.jar
|
||||
|
||||
59
falsework-client/src/main/resources/META-INF/MANIFEST.MF
Normal file
59
falsework-client/src/main/resources/META-INF/MANIFEST.MF
Normal file
@@ -0,0 +1,59 @@
|
||||
Manifest-Version: 1.0
|
||||
Main-Class: com.fx.client.AppStartup
|
||||
Class-Path: . libs/kotlin-compiler-1.0.6.jar libs/datafx-flow-8.0.2-SNAP
|
||||
SHOT.jar libs/jersey-apache-client4-1.19.1.jar libs/HikariCP-java7-2.4.
|
||||
13.jar libs/hystrix-core-1.5.18.jar libs/spring-boot-starter-web-2.4.1.
|
||||
jar libs/HikariCP-3.4.5.jar libs/netflix-statistics-0.1.1.jar libs/comm
|
||||
ons-lang3-3.4.jar libs/datafx-core-8.0.2-SNAPSHOT.jar libs/spring-boot-
|
||||
starter-websocket-2.4.1.jar libs/jersey-core-1.19.1.jar libs/tilesfx-1.
|
||||
6.8.jar libs/spring-beans-5.3.2.jar libs/javax.inject-1.jar libs/spring
|
||||
-boot-starter-security-2.4.1.jar libs/spring-expression-5.2.11.RELEASE.
|
||||
jar libs/spring-websocket-5.3.2.jar libs/c3p0-0.9.5.4.jar libs/spring-w
|
||||
ebmvc-5.3.2.jar libs/logback-classic-1.1.7.jar libs/spring-boot-autocon
|
||||
figure-1.5.12.RELEASE.jar libs/jackson-databind-2.10.0.pr3.jar libs/rib
|
||||
bon-httpclient-2.2.0.jar libs/spring-boot-starter-tomcat-2.4.1.jar libs
|
||||
/spring-web-5.3.2.jar libs/feign-jackson-10.9.jar libs/httpclient-4.2.1
|
||||
.jar libs/junit-4.12.jar libs/mybatis-3.5.6.jar libs/spring-tx-5.3.2.ja
|
||||
r libs/spring-messaging-5.3.2.jar libs/javafx-graphics-11.0.2.jar libs/
|
||||
javafx-base-11.0.2-mac.jar libs/spring-context-support-5.3.2.jar libs/d
|
||||
atafx-eventsystem-8.0.2-SNAPSHOT.jar libs/javafx-base-11.0.2.jar libs/p
|
||||
agehelper-spring-boot-autoconfigure-1.2.5.jar libs/slf4j-api-1.7.21.jar
|
||||
libs/javassist-3.18.1-GA.jar libs/commons-logging-1.1.1.jar libs/mysql
|
||||
-connector-java-8.0.20.jar libs/jakarta.el-3.0.3.jar libs/jackson-modul
|
||||
e-parameter-names-2.11.3.jar libs/spring-boot-starter-cache-2.4.1.jar l
|
||||
ibs/spring-security-web-5.4.2.jar libs/jul-to-slf4j-1.7.30.jar libs/spr
|
||||
ing-security-config-5.4.2.jar libs/spring-boot-2.4.1.jar libs/pagehelpe
|
||||
r-5.1.4.jar libs/ikonli-javafx-2.4.0.jar libs/spring-boot-starter-loggi
|
||||
ng-2.4.1.jar libs/spring-jcl-5.3.2.jar libs/servo-core-0.10.1.jar libs/
|
||||
jackson-core-2.10.0.pr3.jar libs/log4j-to-slf4j-2.13.3.jar libs/hamcres
|
||||
t-core-1.3.jar libs/spring-jdbc-5.3.1.jar libs/log4j-api-2.13.3.jar lib
|
||||
s/jakarta.annotation-api-1.3.5.jar libs/mchange-commons-java-0.2.15.jar
|
||||
libs/javafx-controls-11.0.2-mac.jar libs/jackson-datatype-jdk8-2.11.3.
|
||||
jar libs/archaius-core-0.7.6.jar libs/pinyin4j-2.5.0.jar libs/mybatis-s
|
||||
pring-boot-autoconfigure-2.1.4.jar libs/commons-configuration-1.8.jar l
|
||||
ibs/tomcat-embed-core-9.0.41.jar libs/jsr305-3.0.1.jar libs/snakeyaml-1
|
||||
.27.jar libs/commons-codec-1.6.jar libs/druid-1.1.14.jar libs/feign-rib
|
||||
bon-10.9.jar libs/spring-boot-starter-2.4.1.jar libs/spring-core-5.3.2.
|
||||
jar libs/okio-1.17.2.jar libs/ikonli-core-2.4.0.jar libs/jjwt-0.7.0.jar
|
||||
libs/rxjava-1.2.0.jar libs/DmJdbcDriver-1.0.0.jar libs/guava-16.0.1.ja
|
||||
r libs/okhttp-3.14.6.jar libs/druid-spring-boot-starter-1.1.14.jar libs
|
||||
/datafx-injection-8.0.2-SNAPSHOT.jar libs/mybatis-spring-boot-starter-2
|
||||
.1.4.jar libs/spring-boot-starter-jdbc-2.4.0.jar libs/ribbon-core-2.3.0
|
||||
.jar libs/logback-core-1.1.7.jar libs/feign-okhttp-10.9.jar libs/pagehe
|
||||
lper-spring-boot-starter-1.2.5.jar libs/ikonli-fontawesome5-pack-2.4.0.
|
||||
jar libs/feign-slf4j-10.9.jar libs/netflix-commons-util-0.1.1.jar libs/
|
||||
fontawesomefx-8.9.jar libs/Java-WebSocket-1.5.1.jar libs/HdrHistogram-2
|
||||
.1.9.jar libs/javafx-controls-11.0.2.jar libs/jersey-client-1.19.1.jar
|
||||
libs/spring-aop-5.3.2.jar libs/tomcat-embed-websocket-9.0.41.jar libs/c
|
||||
ontrolsfx-11.0.3.jar libs/spring-context-5.3.2.jar libs/javafx-media-11
|
||||
.0.2-mac.jar libs/jsr311-api-1.1.1.jar libs/jfoenix-9.0.10.jar libs/jsq
|
||||
lparser-1.0.jar libs/spring-boot-starter-quartz-2.4.1.jar libs/annotati
|
||||
ons-2.0.0.jar libs/ribbon-loadbalancer-2.3.0.jar libs/mybatis-spring-2.
|
||||
0.6.jar libs/spring-security-core-5.4.2.jar libs/commons-lang-2.6.jar l
|
||||
ibs/commons-collections-3.2.1.jar libs/servo-internal-0.10.1.jar libs/f
|
||||
eign-core-10.9.jar libs/feign-hystrix-10.9.jar libs/httpcore-4.2.1.jar
|
||||
libs/javafx-graphics-11.0.2-mac.jar libs/joda-time-2.10.1.jar libs/lomb
|
||||
ok-1.18.16.jar libs/quartz-2.3.2.jar libs/jackson-annotations-2.10.0.pr
|
||||
3.jar libs/jackson-datatype-jsr310-2.11.3.jar libs/javafx-media-11.0.2.
|
||||
jar libs/spring-boot-starter-json-2.4.1.jar
|
||||
|
||||
@@ -1,129 +0,0 @@
|
||||
import sun.reflect.ConstructorAccessor;
|
||||
import sun.reflect.FieldAccessor;
|
||||
import sun.reflect.ReflectionFactory;
|
||||
|
||||
import java.lang.reflect.AccessibleObject;
|
||||
import java.lang.reflect.Array;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class DynamicEnumUtil {
|
||||
|
||||
private static ReflectionFactory reflectionFactory = ReflectionFactory.getReflectionFactory();
|
||||
|
||||
private static void setFailsafeFieldValue(Field field, Object target, Object value) throws NoSuchFieldException,
|
||||
IllegalAccessException {
|
||||
|
||||
// let's make the field accessible
|
||||
field.setAccessible(true);
|
||||
|
||||
// next we change the modifier in the Field instance to
|
||||
// not be final anymore, thus tricking reflection into
|
||||
// letting us modify the static final field
|
||||
Field modifiersField = Field.class.getDeclaredField("modifiers");
|
||||
modifiersField.setAccessible(true);
|
||||
int modifiers = modifiersField.getInt(field);
|
||||
|
||||
// blank out the final bit in the modifiers int
|
||||
modifiers &= ~Modifier.FINAL;
|
||||
modifiersField.setInt(field, modifiers);
|
||||
|
||||
FieldAccessor fa = reflectionFactory.newFieldAccessor(field, false);
|
||||
fa.set(target, value);
|
||||
}
|
||||
|
||||
private static void blankField(Class<?> enumClass, String fieldName) throws NoSuchFieldException,
|
||||
IllegalAccessException {
|
||||
for (Field field : Class.class.getDeclaredFields()) {
|
||||
if (field.getName().contains(fieldName)) {
|
||||
AccessibleObject.setAccessible(new Field[] { field }, true);
|
||||
setFailsafeFieldValue(field, enumClass, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void cleanEnumCache(Class<?> enumClass) throws NoSuchFieldException, IllegalAccessException {
|
||||
blankField(enumClass, "enumConstantDirectory"); // Sun (Oracle?!?) JDK 1.5/6
|
||||
blankField(enumClass, "enumConstants"); // IBM JDK
|
||||
}
|
||||
|
||||
private static ConstructorAccessor getConstructorAccessor(Class<?> enumClass, Class<?>[] additionalParameterTypes)
|
||||
throws NoSuchMethodException {
|
||||
Class<?>[] parameterTypes = new Class[additionalParameterTypes.length + 2];
|
||||
parameterTypes[0] = String.class;
|
||||
parameterTypes[1] = int.class;
|
||||
System.arraycopy(additionalParameterTypes, 0, parameterTypes, 2, additionalParameterTypes.length);
|
||||
return reflectionFactory.newConstructorAccessor(enumClass.getDeclaredConstructor(parameterTypes));
|
||||
}
|
||||
|
||||
private static Object makeEnum(Class<?> enumClass, String value, int ordinal, Class<?>[] additionalTypes,
|
||||
Object[] additionalValues) throws Exception {
|
||||
Object[] parms = new Object[additionalValues.length + 2];
|
||||
parms[0] = value;
|
||||
parms[1] = Integer.valueOf(ordinal);
|
||||
System.arraycopy(additionalValues, 0, parms, 2, additionalValues.length);
|
||||
// parms[1] = parms[parms.length-1];
|
||||
return enumClass.cast(getConstructorAccessor(enumClass, additionalTypes).newInstance(parms));
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an enum instance to the enum class given as argument
|
||||
*
|
||||
* @param <T> the type of the enum (implicit)
|
||||
* @param enumType the class of the enum to be modified
|
||||
* @param enumName the name of the new enum instance to be added to the class.
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <T extends Enum<?>> T addEnum(Class<T> enumType, String enumName, Class<?>[] additionalTypes, Object[] additionalValues) {
|
||||
|
||||
// 0. Sanity checks
|
||||
if (!Enum.class.isAssignableFrom(enumType)) {
|
||||
throw new RuntimeException("class " + enumType + " is not an instance of Enum");
|
||||
}
|
||||
|
||||
// 1. Lookup "$VALUES" holder in enum class and get previous enum instances
|
||||
Field valuesField = null;
|
||||
Field[] fields = enumType.getDeclaredFields();
|
||||
for (Field field : fields) {
|
||||
if (field.getName().contains("$VALUES")) {
|
||||
valuesField = field;
|
||||
break;
|
||||
}
|
||||
}
|
||||
AccessibleObject.setAccessible(new Field[] { valuesField }, true);
|
||||
|
||||
try {
|
||||
|
||||
// 2. Copy it
|
||||
T[] previousValues = (T[]) valuesField.get(enumType);
|
||||
List<T> values = new ArrayList<T>(Arrays.asList(previousValues));
|
||||
|
||||
// 3. build new enum
|
||||
T newValue = (T) makeEnum(enumType, enumName, values.size(), additionalTypes, additionalValues);
|
||||
|
||||
// 4. add new value
|
||||
values.add(newValue);
|
||||
|
||||
// 5. Set new values field
|
||||
setFailsafeFieldValue(valuesField, null, values.toArray((T[]) Array.newInstance(enumType, 0)));
|
||||
|
||||
// 6. Clean enum cache
|
||||
cleanEnumCache(enumType);
|
||||
return newValue;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException(e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public enum YesNoEnum {
|
||||
YES(1, "yes"),
|
||||
NO(0, "no");
|
||||
|
||||
private Integer value;
|
||||
private String name;
|
||||
private static Map<Integer, YesNoEnum> enumMap = new HashMap<>();
|
||||
|
||||
static {
|
||||
// 可以在这里加载枚举的配置文件 比如从 properties 数据库中加载
|
||||
// 加载完后 使用DynamicEnumUtil.addEnum 动态增加枚举值
|
||||
// 然后正常使用枚举即可
|
||||
EnumSet<YesNoEnum> set = EnumSet.allOf(YesNoEnum.class);
|
||||
for (YesNoEnum each : set) {
|
||||
// 增加一个缓存 减少对枚举的修改
|
||||
enumMap.put(each.value, each);
|
||||
}
|
||||
}
|
||||
|
||||
YesNoEnum(Integer value, String name) {
|
||||
this.value = value;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Integer getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
// 根据关键字段获取枚举值 可以在这里做一些修改 来达到动态添加的效果
|
||||
public YesNoEnum getEnum(Integer value) {
|
||||
// 这里可以做一些修改 比如若从 enumMap 中没有取得 则加载配置动态添加
|
||||
return enumMap.get(value);
|
||||
}
|
||||
|
||||
// 动态添加方法 添加完后加入缓存 减少对枚举的修改
|
||||
public YesNoEnum addEnum(String enumName, Integer value, String name) {
|
||||
YesNoEnum yesNoEnum = DynamicEnumUtil.addEnum(YesNoEnum.class, enumName, new Class[]{Integer.class, String.class}, new Object[]{value, name});
|
||||
enumMap.put(value, yesNoEnum);
|
||||
return yesNoEnum;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user