diff --git a/logtrace/.idea/.gitignore b/logtrace/.idea/.gitignore
new file mode 100644
index 0000000..1299aea
--- /dev/null
+++ b/logtrace/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/../../../../:\java project\MultithreadedExportExcelData-master\.idea/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/logtrace/.idea/.name b/logtrace/.idea/.name
new file mode 100644
index 0000000..56db958
--- /dev/null
+++ b/logtrace/.idea/.name
@@ -0,0 +1 @@
+ExportExcelData
\ No newline at end of file
diff --git a/logtrace/.idea/compiler.xml b/logtrace/.idea/compiler.xml
new file mode 100644
index 0000000..d5b4978
--- /dev/null
+++ b/logtrace/.idea/compiler.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/encodings.xml b/logtrace/.idea/encodings.xml
new file mode 100644
index 0000000..6b11392
--- /dev/null
+++ b/logtrace/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/jarRepositories.xml b/logtrace/.idea/jarRepositories.xml
new file mode 100644
index 0000000..712ab9d
--- /dev/null
+++ b/logtrace/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml b/logtrace/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml
new file mode 100644
index 0000000..44c1ba0
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml b/logtrace/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml
new file mode 100644
index 0000000..ca0f837
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__cn_afterturn_easypoi_annotation_4_1_0.xml b/logtrace/.idea/libraries/Maven__cn_afterturn_easypoi_annotation_4_1_0.xml
new file mode 100644
index 0000000..6602979
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__cn_afterturn_easypoi_annotation_4_1_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__com_alibaba_transmittable_thread_local_2_14_2.xml b/logtrace/.idea/libraries/Maven__com_alibaba_transmittable_thread_local_2_14_2.xml
new file mode 100644
index 0000000..899f63f
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__com_alibaba_transmittable_thread_local_2_14_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml b/logtrace/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml
new file mode 100644
index 0000000..0f099c7
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_10_3.xml b/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_10_3.xml
new file mode 100644
index 0000000..4507778
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_10_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_10_3.xml b/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_10_3.xml
new file mode 100644
index 0000000..29129b0
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_10_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_10_3.xml b/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_10_3.xml
new file mode 100644
index 0000000..e476b1b
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_10_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_10_3.xml b/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_10_3.xml
new file mode 100644
index 0000000..207d739
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_10_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_10_3.xml b/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_10_3.xml
new file mode 100644
index 0000000..494d78e
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_10_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_10_3.xml b/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_10_3.xml
new file mode 100644
index 0000000..0143158
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_10_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml b/logtrace/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml
new file mode 100644
index 0000000..2c23f7b
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml b/logtrace/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
new file mode 100644
index 0000000..5246203
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml b/logtrace/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml
new file mode 100644
index 0000000..d20505d
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml b/logtrace/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml
new file mode 100644
index 0000000..7caed99
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml b/logtrace/.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml
new file mode 100644
index 0000000..6b94c18
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml b/logtrace/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml
new file mode 100644
index 0000000..5f1e886
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__junit_junit_4_13_1.xml b/logtrace/.idea/libraries/Maven__junit_junit_4_13_1.xml
new file mode 100644
index 0000000..467e6dd
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__junit_junit_4_13_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_8.xml b/logtrace/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_8.xml
new file mode 100644
index 0000000..089100e
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_10_8.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_10_8.xml b/logtrace/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_10_8.xml
new file mode 100644
index 0000000..a28be17
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_10_8.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml b/logtrace/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml
new file mode 100644
index 0000000..a894af5
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml b/logtrace/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml
new file mode 100644
index 0000000..40ef52b
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_12_1.xml b/logtrace/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_12_1.xml
new file mode 100644
index 0000000..0773677
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_12_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_12_1.xml b/logtrace/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_12_1.xml
new file mode 100644
index 0000000..7c8d673
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_12_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_33.xml b/logtrace/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_33.xml
new file mode 100644
index 0000000..2a1fc37
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_33.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_33.xml b/logtrace/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_33.xml
new file mode 100644
index 0000000..d0caadb
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_33.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_33.xml b/logtrace/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_33.xml
new file mode 100644
index 0000000..97528f4
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_33.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml b/logtrace/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml
new file mode 100644
index 0000000..b07b289
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_assertj_assertj_core_3_13_2.xml b/logtrace/.idea/libraries/Maven__org_assertj_assertj_core_3_13_2.xml
new file mode 100644
index 0000000..3407ee5
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_assertj_assertj_core_3_13_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_hamcrest_hamcrest_2_1.xml b/logtrace/.idea/libraries/Maven__org_hamcrest_hamcrest_2_1.xml
new file mode 100644
index 0000000..ba1a2b0
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_hamcrest_hamcrest_2_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_hamcrest_hamcrest_core_2_1.xml b/logtrace/.idea/libraries/Maven__org_hamcrest_hamcrest_core_2_1.xml
new file mode 100644
index 0000000..4309ea6
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_hamcrest_hamcrest_core_2_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_18_Final.xml b/logtrace/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_18_Final.xml
new file mode 100644
index 0000000..1307b15
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_18_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_1_Final.xml b/logtrace/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_1_Final.xml
new file mode 100644
index 0000000..ada1907
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_5_2.xml b/logtrace/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_5_2.xml
new file mode 100644
index 0000000..2095a21
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_5_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_5_2.xml b/logtrace/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_5_2.xml
new file mode 100644
index 0000000..bd507aa
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_5_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_5_2.xml b/logtrace/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_5_2.xml
new file mode 100644
index 0000000..01939fb
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_5_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_5_2.xml b/logtrace/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_5_2.xml
new file mode 100644
index 0000000..ebda8bb
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_5_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_5_2.xml b/logtrace/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_5_2.xml
new file mode 100644
index 0000000..4952174
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_5_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_5_2.xml b/logtrace/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_5_2.xml
new file mode 100644
index 0000000..d821809
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_5_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_junit_vintage_junit_vintage_engine_5_5_2.xml b/logtrace/.idea/libraries/Maven__org_junit_vintage_junit_vintage_engine_5_5_2.xml
new file mode 100644
index 0000000..158f1f9
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_junit_vintage_junit_vintage_engine_5_5_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_mockito_mockito_core_3_1_0.xml b/logtrace/.idea/libraries/Maven__org_mockito_mockito_core_3_1_0.xml
new file mode 100644
index 0000000..c3a1f3f
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_mockito_mockito_core_3_1_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_3_1_0.xml b/logtrace/.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_3_1_0.xml
new file mode 100644
index 0000000..de5eb1d
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_3_1_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml b/logtrace/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml
new file mode 100644
index 0000000..10fc9d3
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml b/logtrace/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml
new file mode 100644
index 0000000..e43c22e
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml b/logtrace/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml
new file mode 100644
index 0000000..4f737ae
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_projectlombok_lombok_1_18_24.xml b/logtrace/.idea/libraries/Maven__org_projectlombok_lombok_1_18_24.xml
new file mode 100644
index 0000000..26767dc
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_projectlombok_lombok_1_18_24.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml b/logtrace/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml
new file mode 100644
index 0000000..9b78e42
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_30.xml b/logtrace/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_30.xml
new file mode 100644
index 0000000..0861f6d
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_30.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml b/logtrace/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml
new file mode 100644
index 0000000..a442768
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_2_6_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_2_6_RELEASE.xml
new file mode 100644
index 0000000..ee2bf20
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_2_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_2_6_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_2_6_RELEASE.xml
new file mode 100644
index 0000000..7869059
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_2_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_2_6_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_2_6_RELEASE.xml
new file mode 100644
index 0000000..3ca3167
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_2_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_2_6_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_2_6_RELEASE.xml
new file mode 100644
index 0000000..da39468
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_2_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_2_6_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_2_6_RELEASE.xml
new file mode 100644
index 0000000..3059fe4
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_2_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_2_6_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_2_6_RELEASE.xml
new file mode 100644
index 0000000..452909e
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_2_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_2_6_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_2_6_RELEASE.xml
new file mode 100644
index 0000000..f7b775c
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_2_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_2_6_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_2_6_RELEASE.xml
new file mode 100644
index 0000000..a2388c7
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_2_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_2_6_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_2_6_RELEASE.xml
new file mode 100644
index 0000000..1bacb5c
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_2_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_2_6_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_2_6_RELEASE.xml
new file mode 100644
index 0000000..5d999d4
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_2_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_2_6_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_2_6_RELEASE.xml
new file mode 100644
index 0000000..da5f265
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_2_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_spring_aop_5_2_5_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_spring_aop_5_2_5_RELEASE.xml
new file mode 100644
index 0000000..aa9a77b
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_spring_aop_5_2_5_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_spring_beans_5_2_5_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_spring_beans_5_2_5_RELEASE.xml
new file mode 100644
index 0000000..d8352b1
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_spring_beans_5_2_5_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_spring_context_5_2_5_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_spring_context_5_2_5_RELEASE.xml
new file mode 100644
index 0000000..4e5e2f1
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_spring_context_5_2_5_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_spring_core_5_2_5_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_spring_core_5_2_5_RELEASE.xml
new file mode 100644
index 0000000..b23730c
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_spring_core_5_2_5_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_spring_expression_5_2_5_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_spring_expression_5_2_5_RELEASE.xml
new file mode 100644
index 0000000..14aaba1
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_spring_expression_5_2_5_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_spring_jcl_5_2_5_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_spring_jcl_5_2_5_RELEASE.xml
new file mode 100644
index 0000000..3fa0a6b
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_spring_jcl_5_2_5_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_spring_test_5_2_5_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_spring_test_5_2_5_RELEASE.xml
new file mode 100644
index 0000000..c0bcfe3
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_spring_test_5_2_5_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_spring_web_5_2_5_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_spring_web_5_2_5_RELEASE.xml
new file mode 100644
index 0000000..efc68d1
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_spring_web_5_2_5_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_springframework_spring_webmvc_5_2_5_RELEASE.xml b/logtrace/.idea/libraries/Maven__org_springframework_spring_webmvc_5_2_5_RELEASE.xml
new file mode 100644
index 0000000..17426d0
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_springframework_spring_webmvc_5_2_5_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_6_4.xml b/logtrace/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_6_4.xml
new file mode 100644
index 0000000..942ddc2
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_6_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/libraries/Maven__org_yaml_snakeyaml_1_25.xml b/logtrace/.idea/libraries/Maven__org_yaml_snakeyaml_1_25.xml
new file mode 100644
index 0000000..7591084
--- /dev/null
+++ b/logtrace/.idea/libraries/Maven__org_yaml_snakeyaml_1_25.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/logtrace.iml b/logtrace/.idea/logtrace.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/logtrace/.idea/logtrace.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/misc.xml b/logtrace/.idea/misc.xml
new file mode 100644
index 0000000..ce72bc0
--- /dev/null
+++ b/logtrace/.idea/misc.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/.idea/modules.xml b/logtrace/.idea/modules.xml
new file mode 100644
index 0000000..ba8bfad
--- /dev/null
+++ b/logtrace/.idea/modules.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/logtrace/ExportExcelData.iml b/logtrace/logtrace/ExportExcelData.iml
new file mode 100644
index 0000000..aa5d642
--- /dev/null
+++ b/logtrace/logtrace/ExportExcelData.iml
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/logtrace/README.md b/logtrace/logtrace/README.md
new file mode 100644
index 0000000..ab51106
--- /dev/null
+++ b/logtrace/logtrace/README.md
@@ -0,0 +1,46 @@
+# 多线程实现百万级数据导出到excel
+
+## **考虑前提:**
+
+大数据量导出到文件,首先需要考虑的是内存溢出的场景:数据库读取数据到内存中、将数据写入到excel进行大量的IO操作。然后考虑到一个文件数据过大,用户打开慢,体验不好。针对这些问题的考虑,采用多线程的方式多个线程同时处理查询数据,一个线程生成一个excel,最后在合并数据返回,以达到提高效率的目的。
+
+## **实现思路:**
+1.使用easyExecl结合批量线程池执行,结合线程分批处理数据缩短查询数据库时间和导出数据时间,查询数据速度比较理想
+测试接口:http://localhost:8080/exportEasyExcel?pageNum=0&pageSize=100000&limit=4000
+2.使用easyExecl结合循环线程池执行,结合线程分批处理数据缩短查询数据库时间和导出数据时间,查询数据速度不理想
+测试接口:http://localhost:8080/exportEasyExcelV1?pageNum=0&pageSize=60000&limit=2000
+3.使用SXSSFWorkbook结合批量线程池执行,结合线程分批处理数据缩短查询数据库时间和导出数据时间,效果最优最理想
+http://localhost:8080/exportEasyExcelV4?pageNum=0&pageSize=30000&limit=2000
+
+模拟sql可以结合测试类本地造数据:
+CREATE TABLE `user` (
+ `id` bigint(20) NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) DEFAULT NULL,
+ `phone` varchar(255) DEFAULT NULL,
+ `ceate_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
+ `remark` varchar(255) DEFAULT NULL,
+ `birthday` datetime DEFAULT NULL,
+ `test1` varchar(255) DEFAULT NULL,
+ `test2` varchar(255) DEFAULT NULL,
+ `test3` varchar(255) DEFAULT NULL,
+ `test4` varchar(255) DEFAULT NULL,
+ `test5` varchar(255) DEFAULT NULL,
+ `test6` varchar(255) DEFAULT NULL,
+ `test7` varchar(255) DEFAULT NULL,
+ `test8` varchar(255) DEFAULT NULL,
+ `test9` varchar(255) DEFAULT NULL,
+ `test10` varchar(255) DEFAULT NULL,
+ `test11` varchar(255) DEFAULT NULL,
+ `test12` varchar(255) DEFAULT NULL,
+ `test13` varchar(255) DEFAULT NULL,
+ `test14` varchar(255) DEFAULT NULL,
+ `test15` varchar(255) DEFAULT NULL,
+ `test16` varchar(255) DEFAULT NULL,
+ `test17` varchar(255) DEFAULT NULL,
+ `test18` varchar(255) DEFAULT NULL,
+ `test19` varchar(255) DEFAULT NULL,
+ `test20` varchar(255) DEFAULT NULL,
+ `test21` varchar(255) DEFAULT NULL,
+ PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=600001 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
diff --git a/logtrace/logtrace/pom.xml b/logtrace/logtrace/pom.xml
new file mode 100644
index 0000000..ab2a74c
--- /dev/null
+++ b/logtrace/logtrace/pom.xml
@@ -0,0 +1,72 @@
+
+
+ 4.0.0
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.2.6.RELEASE
+
+
+
+ com.wm.file
+ ExportExcelData
+ 1.0-SNAPSHOT
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-logging
+
+
+
+
+ cn.afterturn
+ easypoi-annotation
+ 4.1.0
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.24
+
+
+
+ com.alibaba
+ transmittable-thread-local
+ 2.14.2
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ junit
+ junit
+ 4.13.1
+ test
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/logtrace/src/main/java/com/wm/file/ExportExcelDataApplication.java b/logtrace/logtrace/src/main/java/com/wm/file/ExportExcelDataApplication.java
new file mode 100644
index 0000000..54c3851
--- /dev/null
+++ b/logtrace/logtrace/src/main/java/com/wm/file/ExportExcelDataApplication.java
@@ -0,0 +1,22 @@
+package com.wm.file;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * @ClassName: ExportExcelDataApplication
+ * @Description: 启动类
+ * @Author: woniu
+ * @Date: 2022/5/3 19:01
+ **/
+@EnableAsync
+@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
+public class ExportExcelDataApplication {
+ public static void main(String[] args) {
+ SpringApplication.run(ExportExcelDataApplication.class, args);
+ }
+}
diff --git a/logtrace/logtrace/src/main/java/com/wm/file/config/MyThreadPoolTaskExecutor.java b/logtrace/logtrace/src/main/java/com/wm/file/config/MyThreadPoolTaskExecutor.java
new file mode 100644
index 0000000..7ab1053
--- /dev/null
+++ b/logtrace/logtrace/src/main/java/com/wm/file/config/MyThreadPoolTaskExecutor.java
@@ -0,0 +1,36 @@
+package com.wm.file.config;
+
+
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Callable;
+import java.util.concurrent.Future;
+import org.slf4j.MDC;
+
+/**
+ * @Author: 蜗牛
+ * @Date: 2023-2-19 11:13
+ * @Description:
+ * Spring Boot 实现日志链路追踪,无需引入组件,让日志定位更方便!
+ */
+public final class MyThreadPoolTaskExecutor extends ThreadPoolTaskExecutor {
+ public MyThreadPoolTaskExecutor() {
+ super();
+ }
+
+ @Override
+ public void execute(Runnable task) {
+ super.execute(ThreadMdcUtil.wrap(task, MDC.getCopyOfContextMap()));
+ }
+
+
+ @Override
+ public Future submit(Callable task) {
+ return super.submit(ThreadMdcUtil.wrap(task, MDC.getCopyOfContextMap()));
+ }
+
+ @Override
+ public Future> submit(Runnable task) {
+ return super.submit(ThreadMdcUtil.wrap(task, MDC.getCopyOfContextMap()));
+ }
+}
\ No newline at end of file
diff --git a/logtrace/logtrace/src/main/java/com/wm/file/config/ThreadMdcUtil.java b/logtrace/logtrace/src/main/java/com/wm/file/config/ThreadMdcUtil.java
new file mode 100644
index 0000000..07ad5c8
--- /dev/null
+++ b/logtrace/logtrace/src/main/java/com/wm/file/config/ThreadMdcUtil.java
@@ -0,0 +1,76 @@
+package com.wm.file.config;
+
+
+import org.slf4j.MDC;
+
+import java.util.Map;
+import java.util.UUID;
+import java.util.concurrent.Callable;
+
+/**
+ * @Author: woniu
+ * @Date: 2023-2-19 11:14
+ * @Description:
+ * Spring Boot 实现日志链路追踪,无需引入组件,让日志定位更方便!
+ */
+public final class ThreadMdcUtil {
+ private static final String TRACE_ID = "TRACE_ID";
+
+ // 获取唯一性标识
+ public static String generateTraceId() {
+ return UUID.randomUUID().toString();
+ }
+
+ public static void setTraceIdIfAbsent() {
+ if (MDC.get(TRACE_ID) == null) {
+ MDC.put(TRACE_ID, generateTraceId());
+ }
+ }
+
+ /**
+ * 用于父线程向线程池中提交任务时,将自身MDC中的数据复制给子线程
+ *
+ * @param callable
+ * @param context
+ * @param
+ * @return
+ */
+ public static Callable wrap(final Callable callable, final Map context) {
+ return () -> {
+ if (context == null) {
+ MDC.clear();
+ } else {
+ MDC.setContextMap(context);
+ }
+ setTraceIdIfAbsent();
+ try {
+ return callable.call();
+ } finally {
+ MDC.clear();
+ }
+ };
+ }
+
+ /**
+ * 用于父线程向线程池中提交任务时,将自身MDC中的数据复制给子线程
+ *
+ * @param runnable
+ * @param context
+ * @return
+ */
+ public static Runnable wrap(final Runnable runnable, final Map context) {
+ return () -> {
+ if (context == null) {
+ MDC.clear();
+ } else {
+ MDC.setContextMap(context);
+ }
+ setTraceIdIfAbsent();
+ try {
+ runnable.run();
+ } finally {
+ MDC.clear();
+ }
+ };
+ }
+}
\ No newline at end of file
diff --git a/logtrace/logtrace/src/main/java/com/wm/file/config/ThreadPoolConfig.java b/logtrace/logtrace/src/main/java/com/wm/file/config/ThreadPoolConfig.java
new file mode 100644
index 0000000..0644824
--- /dev/null
+++ b/logtrace/logtrace/src/main/java/com/wm/file/config/ThreadPoolConfig.java
@@ -0,0 +1,42 @@
+package com.wm.file.config;
+
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableAsync;
+
+import java.util.concurrent.Executor;
+
+/**
+ * @Author: woniu
+ * @Date: 2023-2-19 11:14
+ * @Description:
+ *
+ * Spring Boot 实现日志链路追踪,无需引入组件,让日志定位更方便!
+ *
+ */
+@Configuration
+@EnableAsync
+public class ThreadPoolConfig {
+ /**
+ * 声明一个线程池
+ *
+ * @return 执行器
+ */
+ @Bean("MyExecutor")
+ public Executor asyncExecutor() {
+ MyThreadPoolTaskExecutor executor = new MyThreadPoolTaskExecutor();
+ //核心线程数5:线程池创建时候初始化的线程数
+ executor.setCorePoolSize(5);
+ //最大线程数5:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程
+ executor.setMaxPoolSize(5);
+ //缓冲队列500:用来缓冲执行任务的队列
+ executor.setQueueCapacity(500);
+ //允许线程的空闲时间60秒:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
+ executor.setKeepAliveSeconds(60);
+ //线程池名的前缀:设置好了之后可以方便我们定位处理任务所在的线程池
+ executor.setThreadNamePrefix("asyncJCccc");
+ executor.initialize();
+ return executor;
+ }
+}
diff --git a/logtrace/logtrace/src/main/java/com/wm/file/config/WebConfigurerAdapter.java b/logtrace/logtrace/src/main/java/com/wm/file/config/WebConfigurerAdapter.java
new file mode 100644
index 0000000..f4bf8d4
--- /dev/null
+++ b/logtrace/logtrace/src/main/java/com/wm/file/config/WebConfigurerAdapter.java
@@ -0,0 +1,28 @@
+package com.wm.file.config;
+
+import com.wm.file.intecepter.LogInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @Author: 蜗牛
+ * @Date: 2023-2-19 10:47
+ * @Description:
+ */
+
+@Configuration
+public class WebConfigurerAdapter implements WebMvcConfigurer {
+ @Bean
+ public LogInterceptor logInterceptor() {
+ return new LogInterceptor();
+ }
+
+ @Override
+ public void addInterceptors(InterceptorRegistry registry) {
+ registry.addInterceptor(logInterceptor()).addPathPatterns("/**");
+ //可以具体制定哪些需要拦截,哪些不拦截,其实也可以使用自定义注解更灵活完成
+ // .excludePathPatterns("/testxx.html");
+ }
+}
\ No newline at end of file
diff --git a/logtrace/logtrace/src/main/java/com/wm/file/controller/ApiController.java b/logtrace/logtrace/src/main/java/com/wm/file/controller/ApiController.java
new file mode 100644
index 0000000..a5950bc
--- /dev/null
+++ b/logtrace/logtrace/src/main/java/com/wm/file/controller/ApiController.java
@@ -0,0 +1,39 @@
+package com.wm.file.controller;
+
+
+import com.wm.file.service.OrderService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+@Controller
+@RequestMapping("api/")
+@Slf4j
+public class ApiController {
+
+ @Autowired
+ private OrderService orderService;
+
+ @ResponseBody
+ @GetMapping(value = "/pay/{orderSn}")
+ public String alipay(@PathVariable("orderSn") String orderSn) {
+ log.info("我开始了!");
+ String result = orderService.alipay(orderSn);
+ log.info("我结束了!{}",result);
+ return result;
+ }
+
+ @ResponseBody
+ @GetMapping(value = "/insert")
+ public String insert() throws InterruptedException {
+ log.info("我开始了!");
+ orderService.insert();
+ log.info("结束了!");
+ return "ok";
+ }
+
+}
diff --git a/logtrace/logtrace/src/main/java/com/wm/file/intecepter/LogInterceptor.java b/logtrace/logtrace/src/main/java/com/wm/file/intecepter/LogInterceptor.java
new file mode 100644
index 0000000..bde3dfe
--- /dev/null
+++ b/logtrace/logtrace/src/main/java/com/wm/file/intecepter/LogInterceptor.java
@@ -0,0 +1,40 @@
+package com.wm.file.intecepter;
+
+
+import org.slf4j.MDC;
+import org.springframework.lang.Nullable;
+import org.springframework.util.StringUtils;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.UUID;
+
+/**
+ * @Author: woniu
+ * @Date: 2023-2-19 10:45
+ * @Description:
+ */
+
+public class LogInterceptor implements HandlerInterceptor {
+
+ private static final String TRACE_ID = "TRACE_ID";
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+ String tid = UUID.randomUUID().toString().replace("-", "");
+ //可以考虑让客户端传入链路ID,但需保证一定的复杂度唯一性;如果没使用默认UUID自动生成
+ if (!StringUtils.isEmpty(request.getHeader("TRACE_ID"))) {
+ tid = request.getHeader("TRACE_ID");
+ }
+ MDC.put(TRACE_ID, tid);
+ return true;
+ }
+
+ @Override
+ public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
+ @Nullable Exception ex) {
+ MDC.remove(TRACE_ID);
+ }
+
+}
\ No newline at end of file
diff --git a/logtrace/logtrace/src/main/java/com/wm/file/service/OrderService.java b/logtrace/logtrace/src/main/java/com/wm/file/service/OrderService.java
new file mode 100644
index 0000000..098e085
--- /dev/null
+++ b/logtrace/logtrace/src/main/java/com/wm/file/service/OrderService.java
@@ -0,0 +1,7 @@
+package com.wm.file.service;
+
+public interface OrderService {
+ String alipay(String orderSn);
+
+ public void insert() ;
+}
diff --git a/logtrace/logtrace/src/main/java/com/wm/file/service/OrderServiceImpl.java b/logtrace/logtrace/src/main/java/com/wm/file/service/OrderServiceImpl.java
new file mode 100644
index 0000000..5d3901f
--- /dev/null
+++ b/logtrace/logtrace/src/main/java/com/wm/file/service/OrderServiceImpl.java
@@ -0,0 +1,38 @@
+package com.wm.file.service;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class OrderServiceImpl implements OrderService {
+
+
+ @Override
+ public String alipay(String orderSn) {
+ try {
+ log.info("开始查询");
+ Thread.sleep(1000);
+ int i = 10 / 0;
+ } catch (Exception e) {
+ log.error("有个错误:{}", e.getMessage());
+ }
+ log.info("查询结束");
+ return "haha";
+ }
+
+// @Async("MyExecutor")
+ @Async
+ @Override
+ public void insert() {
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ log.error("插入操作失败");
+ }
+ log.info("正在执行插入操作");
+ }
+
+
+}
diff --git a/logtrace/logtrace/src/main/resources/application.yml b/logtrace/logtrace/src/main/resources/application.yml
new file mode 100644
index 0000000..e96b671
--- /dev/null
+++ b/logtrace/logtrace/src/main/resources/application.yml
@@ -0,0 +1,4 @@
+server:
+ port: 8826
+logging:
+ config: classpath:logback-spring.xml
\ No newline at end of file
diff --git a/logtrace/logtrace/src/main/resources/logback-spring.xml b/logtrace/logtrace/src/main/resources/logback-spring.xml
new file mode 100644
index 0000000..badcde3
--- /dev/null
+++ b/logtrace/logtrace/src/main/resources/logback-spring.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+ [%X{TRACE_ID}] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
+
+
+
+
+
+
+ ${log}/%d{yyyy-MM-dd}.log
+
+ 30
+
+
+ [%X{TRACE_ID}] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
+
+
+
+ 10MB
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/logtrace/logtrace/src/test/java/com/wm/file/TestDemo.java b/logtrace/logtrace/src/test/java/com/wm/file/TestDemo.java
new file mode 100644
index 0000000..8c1458e
--- /dev/null
+++ b/logtrace/logtrace/src/test/java/com/wm/file/TestDemo.java
@@ -0,0 +1,73 @@
+package com.wm.file;
+
+
+import lombok.extern.slf4j.Slf4j;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = ExportExcelDataApplication.class)//springboot注解
+@Slf4j
+public class TestDemo {
+
+// /**
+// * 如何优雅的实现Spring Boot 异步线程间数据传递
+// */
+// @Test
+// public void handlerAsync() {
+// //1. 获取父线程的userId
+// UserUtils.setUserId("232");
+// String userId = UserUtils.getUserId();
+// log.info("父线程的值:{}", userId);
+// CompletableFuture.runAsync(() -> {
+// //2. 设置子线程的值,复用
+// UserUtils.setUserId(userId);
+// log.info("子线程的值:{}", UserUtils.getUserId());
+// });
+// }
+//
+//
+// @Autowired
+// private ThreadPoolTaskExecutor threadPoolTaskExecutor;
+//
+// /**
+// * 线程池设置TaskDecorator
+// */
+// @Test
+// public void handlerAsync2() {
+// UserUtils.setUserId("232");
+// log.info("父线程的用户信息:{}", UserUtils.getUserId());
+// //执行异步任务,需要指定的线程池
+// CompletableFuture.runAsync(() ->
+// log.info("子线程的用户信息:{}", UserUtils.getUserId()),
+// threadPoolTaskExecutor);
+// }
+//
+// /**
+// * TransmittableThreadLocal
+// */
+//
+// @Autowired
+// private ThreadPoolExecutor threadPoolExecutor;
+//
+// @Test
+// public void handlerAsync3() {
+// UserUtilsTran.set("213");
+// log.info("父线程的用户信息:{}", UserUtilsTran.get());
+//
+// CompletableFuture.runAsync(()->
+// log.info("子线程的用户信息:{}", UserUtilsTran.get()),
+// threadPoolExecutor);
+// }
+//
+
+
+}
+
+
+
+
+