-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
1011 lines (819 loc) · 517 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>放逐,天涯路</title>
<subtitle>永恒的心,经年的梦,前行的路,执念一生</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://aresLove.github.io/"/>
<updated>2017-06-25T14:49:15.310Z</updated>
<id>http://aresLove.github.io/</id>
<author>
<name>ares</name>
<email>[email protected]</email>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>jar 冲突检查和处理方法</title>
<link href="http://aresLove.github.io/java/maven%E5%8C%85%E5%86%B2%E7%AA%81%E5%A4%84%E7%90%86%E6%96%B9%E6%B3%95/"/>
<id>http://aresLove.github.io/java/maven包冲突处理方法/</id>
<published>2017-06-25T14:49:15.310Z</published>
<updated>2017-06-25T14:49:15.310Z</updated>
<content type="html"><h1 id="问题描述"><a href="#问题描述" class="headerlink" title="问题描述"></a>问题描述</h1><h2 id="报错异常"><a href="#报错异常" class="headerlink" title="报错异常"></a>报错异常</h2><figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">2017</span>-<span class="number">06</span>-<span class="number">16</span> <span class="number">17</span>:<span class="number">23</span>:<span class="number">45</span>,<span class="number">842</span> [RMI TCP Connection(<span class="number">3</span>)-<span class="number">127.0</span><span class="number">.0</span><span class="number">.1</span>] [<span class="number">6973</span>a272f486418da8a37181a57ed0f9] INFO com.mangofactory.swagger.scanners.ApiListingReferenceScanner (ApiListingReferenceScanner.java:<span class="number">96</span>) - Created resource listing Path: /default/test-token-controller Description: test-token-controller Position: <span class="number">0</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">06</span>-<span class="number">16</span> <span class="number">17</span>:<span class="number">23</span>:<span class="number">45</span>,<span class="number">844</span> [RMI TCP Connection(<span class="number">3</span>)-<span class="number">127.0</span><span class="number">.0</span><span class="number">.1</span>] [<span class="number">6973</span>a272f486418da8a37181a57ed0f9] ERROR org.springframework.web.context.ContextLoader (ContextLoader.java:<span class="number">336</span>) - Context initialization failed</span><br><span class="line">java.lang.NoSuchMethodError: com.google.common.collect.Multimaps.asMap(Lcom/google/common/collect/ListMultimap;)Ljava/util/Map;</span><br><span class="line"> <span class="keyword">at</span> com.mangofactory.swagger.scanners.ApiListingReferenceScanner.getResourceGroupRequestMappings(ApiListingReferenceScanner.java:<span class="number">105</span>)</span><br><span class="line"> <span class="keyword">at</span> com.mangofactory.swagger.core.SwaggerApiResourceListing.initialize(SwaggerApiResourceListing.java:<span class="number">63</span>)</span><br><span class="line"> <span class="keyword">at</span> com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin.initialize(SwaggerSpringMvcPlugin.java:<span class="number">427</span>)</span><br><span class="line"> <span class="keyword">at</span> com.mangofactory.swagger.plugin.SwaggerPluginAdapter.onApplicationEvent(SwaggerPluginAdapter.java:<span class="number">51</span>)</span><br><span class="line"> <span class="keyword">at</span> com.mangofactory.swagger.plugin.SwaggerPluginAdapter.onApplicationEvent(SwaggerPluginAdapter.java:<span class="number">21</span>)</span><br><span class="line"> <span class="keyword">at</span> org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:<span class="number">96</span>)</span><br><span class="line"> <span class="keyword">at</span> org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:<span class="number">334</span>)</span><br><span class="line"> <span class="keyword">at</span> org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:<span class="number">954</span>)</span><br><span class="line"> <span class="keyword">at</span> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:<span class="number">482</span>)</span><br><span class="line"> <span class="keyword">at</span> org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:<span class="number">410</span>)</span><br><span class="line"> <span class="keyword">at</span> org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:<span class="number">306</span>)</span><br><span class="line"> <span class="keyword">at</span> org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:<span class="number">112</span>)</span><br><span class="line"> <span class="keyword">at</span> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:<span class="number">4811</span>)</span><br><span class="line"> <span class="keyword">at</span> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:<span class="number">5251</span>)</span><br><span class="line"> <span class="keyword">at</span> org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:<span class="number">147</span>)</span><br><span class="line"> <span class="keyword">at</span> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:<span class="number">725</span>)</span><br><span class="line"> <span class="keyword">at</span> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:<span class="number">701</span>)</span><br><span class="line"> <span class="keyword">at</span> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:<span class="number">717</span>)</span><br><span class="line"> <span class="keyword">at</span> org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:<span class="number">1696</span>)</span><br><span class="line"> <span class="keyword">at</span> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)</span><br><span class="line"> <span class="keyword">at</span> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:<span class="number">62</span>)</span><br><span class="line"> <span class="keyword">at</span> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:<span class="number">43</span>)</span><br><span class="line"> <span class="keyword">at</span> java.lang.reflect.Method.invoke(Method.java:<span class="number">497</span>)</span><br><span class="line"> <span class="keyword">at</span> org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:<span class="number">300</span>)</span><br><span class="line"> <span class="keyword">at</span> com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:<span class="number">819</span>)</span><br><span class="line"> <span class="keyword">at</span> com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:<span class="number">801</span>)</span><br><span class="line"> <span class="keyword">at</span> org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:<span class="number">484</span>)</span><br><span class="line"> <span class="keyword">at</span> org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:<span class="number">433</span>)</span><br><span class="line"> <span class="keyword">at</span> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)</span><br><span class="line"> <span class="keyword">at</span> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:<span class="number">62</span>)</span><br><span class="line"> <span class="keyword">at</span> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:<span class="number">43</span>)</span><br><span class="line"> <span class="keyword">at</span> java.lang.reflect.Method.invoke(Method.java:<span class="number">497</span>)</span><br><span class="line"> <span class="keyword">at</span> org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:<span class="number">300</span>)</span><br><span class="line"> <span class="keyword">at</span> com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:<span class="number">819</span>)</span><br><span class="line"> <span class="keyword">at</span> com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:<span class="number">801</span>)</span><br><span class="line"> <span class="keyword">at</span> javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:<span class="number">1468</span>)</span><br><span class="line"> <span class="keyword">at</span> javax.management.remote.rmi.RMIConnectionImpl.access$<span class="number">300</span>(RMIConnectionImpl.java:<span class="number">76</span>)</span><br><span class="line"> <span class="keyword">at</span> javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.<span class="command">run</span>(RMIConnectionImpl.java:<span class="number">1309</span>)</span><br><span class="line"> <span class="keyword">at</span> javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:<span class="number">1401</span>)</span><br><span class="line"> <span class="keyword">at</span> javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:<span class="number">829</span>)</span><br><span class="line"> <span class="keyword">at</span> sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)</span><br><span class="line"> <span class="keyword">at</span> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:<span class="number">62</span>)</span><br><span class="line"> <span class="keyword">at</span> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:<span class="number">43</span>)</span><br><span class="line"> <span class="keyword">at</span> java.lang.reflect.Method.invoke(Method.java:<span class="number">497</span>)</span><br><span class="line"> <span class="keyword">at</span> sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:<span class="number">323</span>)</span><br><span class="line"> <span class="keyword">at</span> sun.rmi.transport.Transport$<span class="number">1.</span><span class="command">run</span>(Transport.java:<span class="number">200</span>)</span><br><span class="line"> <span class="keyword">at</span> sun.rmi.transport.Transport$<span class="number">1.</span><span class="command">run</span>(Transport.java:<span class="number">197</span>)</span><br><span class="line"> <span class="keyword">at</span> java.security.AccessController.doPrivileged(Native Method)</span><br><span class="line"> <span class="keyword">at</span> sun.rmi.transport.Transport.serviceCall(Transport.java:<span class="number">196</span>)</span><br><span class="line"> <span class="keyword">at</span> sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:<span class="number">568</span>)</span><br><span class="line"> <span class="keyword">at</span> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:<span class="number">826</span>)</span><br><span class="line"> <span class="keyword">at</span> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$<span class="command">run</span>$<span class="number">256</span>(TCPTransport.java:<span class="number">683</span>)</span><br><span class="line"> <span class="keyword">at</span> java.security.AccessController.doPrivileged(Native Method)</span><br><span class="line"> <span class="keyword">at</span> sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.<span class="command">run</span>(TCPTransport.java:<span class="number">682</span>)</span><br><span class="line"> <span class="keyword">at</span> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:<span class="number">1142</span>)</span><br><span class="line"> <span class="keyword">at</span> java.util.concurrent.ThreadPoolExecutor$Worker.<span class="command">run</span>(ThreadPoolExecutor.java:<span class="number">617</span>)</span><br><span class="line"> <span class="keyword">at</span> java.lang.Thread.<span class="command">run</span>(Thread.java:<span class="number">745</span>)</span><br><span class="line"><span class="number">16</span>-Jun-<span class="number">2017</span> <span class="number">17</span>:<span class="number">23</span>:<span class="number">45.868</span> SEVERE [RMI TCP Connection(<span class="number">3</span>)-<span class="number">127.0</span><span class="number">.0</span><span class="number">.1</span>] org.apache.catalina.core.StandardContext.startInternal One <span class="keyword">or</span> more listeners failed <span class="keyword">to</span> start. Full details will be found <span class="keyword">in</span> <span class="keyword">the</span> appropriate container <span class="command">log</span> <span class="type">file</span></span><br><span class="line"><span class="number">16</span>-Jun-<span class="number">2017</span> <span class="number">17</span>:<span class="number">23</span>:<span class="number">45.868</span> SEVERE [RMI TCP Connection(<span class="number">3</span>)-<span class="number">127.0</span><span class="number">.0</span><span class="number">.1</span>] org.apache.catalina.core.StandardContext.startInternal Context [/huanyu-web] startup failed due <span class="keyword">to</span> previous errors</span><br><span class="line">log4j:WARN No appenders could be found <span class="keyword">for</span> logger (org.springframework.web.context.support.XmlWebApplicationContext).</span><br><span class="line">log4j:WARN Please initialize <span class="keyword">the</span> log4j system properly.</span><br></pre></td></tr></table></figure>
<h3 id="问题分析:"><a href="#问题分析:" class="headerlink" title="问题分析:"></a>问题分析:</h3><ol>
<li><p>看到报错提示</p>
<figure class="highlight groovy"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">java.lang.<span class="string">NoSuchMethodError:</span> com.google.common.collect.Multimaps.asMap(Lcom<span class="regexp">/google/</span>common<span class="regexp">/collect/</span>ListMultimap;)Ljava<span class="regexp">/util/</span>Map;</span><br><span class="line"> at com.mangofactory.swagger.scanners.ApiListingReferenceScanner.getResourceGroupRequestMappings(ApiListingReferenceScanner.<span class="string">java:</span><span class="number">105</span>)</span><br><span class="line"> at com.mangofactory.swagger.core.SwaggerApiResourceListing.initialize(SwaggerApiResourceListing.<span class="string">java:</span><span class="number">63</span>)</span><br></pre></td></tr></table></figure>
</li>
<li><p>定位出错位置,确定锁依赖的 jar</p>
<figure class="highlight gherkin"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">import com.google.common.collect.Multimaps;</span><br><span class="line"></span><br><span class="line"> public Map<span class="variable">&lt;ResourceGroup, List&lt;RequestMappingContext&gt;</span>&gt; getResourceGroupRequestMappings() &#123;</span><br><span class="line"> return Multimaps.asMap(resourceGroupRequestMappings);</span><br><span class="line"> &#125;</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> /<span class="keyword">*</span><span class="keyword">*</span></span><br><span class="line"> <span class="keyword">*</span> Returns &#123;<span class="comment">@link ListMultimap#asMap multimap.asMap()&#125;, with its type</span></span><br><span class="line"> <span class="keyword">*</span> corrected from &#123;<span class="comment">@code Map&lt;K, Collection&lt;V&gt;&gt;&#125; to &#123;@code Map&lt;K, List&lt;V&gt;&gt;&#125;.</span></span><br><span class="line"> <span class="keyword">*</span></span><br><span class="line"> <span class="keyword">*</span> <span class="comment">@since 15.0</span></span><br><span class="line"> <span class="keyword">*</span>/</span><br><span class="line"> <span class="comment">@Beta</span></span><br><span class="line"> <span class="comment">@SuppressWarnings("unchecked")</span></span><br><span class="line"> // safe by specification of ListMultimap.asMap()</span><br><span class="line"> public static <span class="variable">&lt;K, V&gt;</span> Map<span class="variable">&lt;K, List&lt;V&gt;</span>&gt; asMap(ListMultimap<span class="variable">&lt;K, V&gt;</span> multimap) &#123;</span><br><span class="line"> return (Map<span class="variable">&lt;K, List&lt;V&gt;</span>&gt;) (Map<span class="variable">&lt;K, ?&gt;</span>) multimap.asMap();</span><br><span class="line"> &#125;</span><br></pre></td></tr></table></figure>
</li>
<li><p>检查编译后的 war 中 libs 是否存在对应依赖的jar</p>
</li>
<li><p>冲突检查</p>
<figure class="highlight groovy"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">E:</span>\huanyuWorkSpace\huanyu\trunk &#123;git&#125;</span><br><span class="line">&#123;lamb&#125; mvn <span class="string">dependency:</span>tree -Dverbose -Dincludes=com.google.<span class="string">guava:</span>guava</span><br><span class="line">[INFO] Scanning <span class="keyword">for</span> projects...</span><br><span class="line">[WARNING]</span><br><span class="line">[WARNING] Some problems were encountered <span class="keyword">while</span> building the effective model <span class="keyword">for</span> com.huanyu.<span class="string">huanyu:</span>huanyu-<span class="string">web:</span><span class="string">war:</span><span class="number">0.1</span>-SNAPSHOT</span><br><span class="line">[WARNING] <span class="string">'reporting.plugins.plugin.version'</span> <span class="keyword">for</span> org.apache.maven.<span class="string">plugins:</span>maven-project-info-reports-plugin is missing. @ line <span class="number">625</span>, column <span class="number">15</span></span><br><span class="line">[WARNING]</span><br><span class="line">[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.</span><br><span class="line">[WARNING]</span><br><span class="line">[WARNING] For <span class="keyword">this</span> reason, future Maven versions might no longer support building such malformed projects.</span><br><span class="line">[WARNING]</span><br><span class="line">[INFO]</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[INFO] Building Qianfan Shop Showwindow <span class="number">0.1</span>-SNAPSHOT</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[INFO]</span><br><span class="line">[INFO] --- maven-dependency-<span class="string">plugin:</span><span class="number">2.10</span>:tree (<span class="keyword">default</span>-cli) @ huanyu-web ---</span><br><span class="line">[WARNING] Using Maven <span class="number">2</span> dependency tree to get verbose output, which may be inconsistent with actual Maven <span class="number">3</span> resolution</span><br><span class="line">[INFO] com.huanyu.<span class="string">huanyu:</span>huanyu-<span class="string">web:</span><span class="string">war:</span><span class="number">0.1</span>-SNAPSHOT</span><br><span class="line">[INFO] +- com.github.<span class="string">binarywang:</span>weixin-java-<span class="string">common:</span><span class="string">jar:</span><span class="number">2.6</span><span class="number">.0</span>:compile</span><br><span class="line">[INFO] | \- (com.google.<span class="string">guava:</span><span class="string">guava:</span><span class="string">jar:</span><span class="number">19.0</span>:compile - omitted <span class="keyword">for</span> duplicate)</span><br><span class="line">[INFO] +- com.github.<span class="string">binarywang:</span>weixin-java-<span class="string">mp:</span><span class="string">jar:</span><span class="number">2.6</span><span class="number">.0</span>:compile</span><br><span class="line">[INFO] | \- (com.google.<span class="string">guava:</span><span class="string">guava:</span><span class="string">jar:</span><span class="number">19.0</span>:compile - omitted <span class="keyword">for</span> duplicate)</span><br><span class="line">[INFO] +- com.huanyu.<span class="string">dcommons:</span>dcommons-<span class="string">token:</span><span class="string">jar:</span><span class="number">0.8</span>:compile</span><br><span class="line">[INFO] | \- (com.google.<span class="string">guava:</span><span class="string">guava:</span><span class="string">jar:</span><span class="number">19.0</span>:compile - omitted <span class="keyword">for</span> duplicate)</span><br><span class="line">[INFO] +- com.<span class="string">mangofactory:</span>swagger-<span class="string">models:</span><span class="string">jar:</span><span class="number">1.0</span><span class="number">.2</span>:compile</span><br><span class="line">[INFO] | \- (com.google.<span class="string">guava:</span><span class="string">guava:</span><span class="string">jar:</span><span class="number">15.0</span>:compile - omitted <span class="keyword">for</span> conflict with <span class="number">19.0</span>)</span><br><span class="line">[INFO] +- com.<span class="string">mangofactory:</span>swagger-<span class="string">springmvc:</span><span class="string">jar:</span><span class="number">1.0</span><span class="number">.2</span>:compile</span><br><span class="line">[INFO] | \- (com.google.<span class="string">guava:</span><span class="string">guava:</span><span class="string">jar:</span><span class="number">15.0</span>:compile - omitted <span class="keyword">for</span> conflict with <span class="number">19.0</span>)</span><br><span class="line">[INFO] \- com.google.<span class="string">guava:</span><span class="string">guava:</span><span class="string">jar:</span><span class="number">19.0</span>:compile</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[INFO] BUILD SUCCESS</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[INFO] Total <span class="string">time:</span> <span class="number">5.946</span>s</span><br><span class="line">[INFO] Finished <span class="string">at:</span> Fri Jun <span class="number">16</span> <span class="number">18</span>:<span class="number">10</span>:<span class="number">57</span> CST <span class="number">2017</span></span><br><span class="line">[INFO] Final <span class="string">Memory:</span> <span class="number">22</span>M/<span class="number">353</span>M</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br></pre></td></tr></table></figure>
</li>
<li><p>使用 totalCommand 检查 jar 包,是一个行之有效的方法</p>
<figure class="highlight tex"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">在 war 中的 libs 搜索 Multimaps.class 可以看到如下 jar 中都存在对应的 com<span class="command">\google</span><span class="command">\common</span><span class="command">\collect</span><span class="command">\Multimaps</span>.class</span><br><span class="line"></span><br><span class="line">E:<span class="command">\huanyuWorkSpace</span><span class="command">\huanyu</span><span class="command">\trunk</span><span class="command">\target</span><span class="command">\shouwin</span>-web-0.1-SNAPSHOT<span class="command">\WEB</span>-INF<span class="command">\lib</span><span class="command">\weld</span>-osgi-bundle-1.0.1-SP3.jar/com<span class="command">\google</span><span class="command">\common</span><span class="command">\collect</span><span class="command">\Multimaps</span>.class</span><br><span class="line">E:<span class="command">\huanyuWorkSpace</span><span class="command">\huanyu</span><span class="command">\trunk</span><span class="command">\target</span><span class="command">\shouwin</span>-web-0.1-SNAPSHOT<span class="command">\WEB</span>-INF<span class="command">\lib</span><span class="command">\guava</span>-19.0.jar/com<span class="command">\google</span><span class="command">\common</span><span class="command">\collect</span><span class="command">\Multimaps</span>.class</span><br><span class="line">E:<span class="command">\huanyuWorkSpace</span><span class="command">\huanyu</span><span class="command">\trunk</span><span class="command">\target</span><span class="command">\shouwin</span>-web-0.1-SNAPSHOT<span class="command">\WEB</span>-INF<span class="command">\lib</span><span class="command">\google</span>-collections-1.0.jar/com<span class="command">\google</span><span class="command">\common</span><span class="command">\collect</span><span class="command">\Multimaps</span>.class</span><br></pre></td></tr></table></figure>
</li>
<li><p>将 pom 中的对应的 jar 的依赖关系分列出来,清晰可见对应的依赖关系</p>
<figure class="highlight groovy"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">E:</span>\huanyuWorkSpace\huanyu\trunk &#123;git&#125;</span><br><span class="line">&#123;lamb&#125; mvn <span class="string">dependency:</span>tree -Dverbose -Dincludes=:google-collections</span><br><span class="line">[INFO] Scanning <span class="keyword">for</span> projects...</span><br><span class="line">[WARNING]</span><br><span class="line">[WARNING] Some problems were encountered <span class="keyword">while</span> building the effective model <span class="keyword">for</span> com.huanyu.<span class="string">huanyu:</span>huanyu-<span class="string">web:</span><span class="string">war:</span><span class="number">0.1</span>-SNAPSHOT</span><br><span class="line">[WARNING] <span class="string">'reporting.plugins.plugin.version'</span> <span class="keyword">for</span> org.apache.maven.<span class="string">plugins:</span>maven-project-info-reports-plugin is missing. @ line <span class="number">625</span>, column <span class="number">15</span></span><br><span class="line">[WARNING]</span><br><span class="line">[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.</span><br><span class="line">[WARNING]</span><br><span class="line">[WARNING] For <span class="keyword">this</span> reason, future Maven versions might no longer support building such malformed projects.</span><br><span class="line">[WARNING]</span><br><span class="line">[INFO]</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[INFO] Building Qianfan Shop Showwindow <span class="number">0.1</span>-SNAPSHOT</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[INFO]</span><br><span class="line">[INFO] --- maven-dependency-<span class="string">plugin:</span><span class="number">2.10</span>:tree (<span class="keyword">default</span>-cli) @ huanyu-web ---</span><br><span class="line">[WARNING] Using Maven <span class="number">2</span> dependency tree to get verbose output, which may be inconsistent with actual Maven <span class="number">3</span> resolution</span><br><span class="line">[INFO] com.huanyu.<span class="string">huanyu:</span>huanyu-<span class="string">web:</span><span class="string">war:</span><span class="number">0.1</span>-SNAPSHOT</span><br><span class="line">[INFO] \- com.huanyu.<span class="string">lab:</span><span class="string">extapi:</span><span class="string">jar:</span><span class="number">1.1</span><span class="number">.4</span>:compile</span><br><span class="line">[INFO] \- org.jboss.<span class="string">weld:</span>weld-osgi-<span class="string">bundle:</span><span class="string">jar:</span><span class="number">1.0</span><span class="number">.1</span>-<span class="string">SP3:</span>compile</span><br><span class="line">[INFO] +- org.jboss.<span class="string">weld:</span>weld-<span class="string">core:</span><span class="string">jar:</span><span class="number">1.0</span><span class="number">.1</span>-<span class="string">SP3:</span>compile</span><br><span class="line">[INFO] | \- (com.google.<span class="string">collections:</span>google-<span class="string">collections:</span><span class="string">jar:</span><span class="number">1.0</span>:compile - omitted <span class="keyword">for</span> duplicate)</span><br><span class="line">[INFO] \- com.google.<span class="string">collections:</span>google-<span class="string">collections:</span><span class="string">jar:</span><span class="number">1.0</span>:compile</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[INFO] BUILD SUCCESS</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br><span class="line">[INFO] Total <span class="string">time:</span> <span class="number">3.976</span>s</span><br><span class="line">[INFO] Finished <span class="string">at:</span> Fri Jun <span class="number">16</span> <span class="number">17</span>:<span class="number">24</span>:<span class="number">30</span> CST <span class="number">2017</span></span><br><span class="line">[INFO] Final <span class="string">Memory:</span> <span class="number">22</span>M/<span class="number">353</span>M</span><br><span class="line">[INFO] ------------------------------------------------------------------------</span><br></pre></td></tr></table></figure>
</li>
<li><p>排除对应依赖即可</p>
<figure class="highlight pf"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line">从 <span class="number">6</span> 中可以看到</span><br><span class="line"></span><br><span class="line">[INFO] com.huanyu.huanyu:huanyu-web:war:<span class="number">0.1</span>-SNAPSHOT</span><br><span class="line">[INFO] \- com.huanyu.lab:extapi:jar:<span class="number">1.1</span>.<span class="number">4</span>:compile</span><br><span class="line">[INFO] \- org.jboss.weld:weld-osgi-bundle:jar:<span class="number">1.0</span>.<span class="number">1</span>-SP3:compile</span><br><span class="line">[INFO] +- org.jboss.weld:weld-core:jar:<span class="number">1.0</span>.<span class="number">1</span>-SP3:compile</span><br><span class="line">[INFO] | \- (com.google.collections:google-collections:jar:<span class="number">1.0</span>:compile - omitted <span class="keyword">for</span> duplicate)</span><br><span class="line">[INFO] \- com.google.collections:google-collections:jar:<span class="number">1.0</span>:compile</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">因此 排除 weld-osgi-bundle 即可。</span><br><span class="line"></span><br><span class="line"><span class="variable">&lt;dependency&gt;</span></span><br><span class="line"> <span class="variable">&lt;groupId&gt;</span>com.huanyu.lab<span class="variable">&lt;/groupId&gt;</span></span><br><span class="line"> <span class="variable">&lt;artifactId&gt;</span>extapi<span class="variable">&lt;/artifactId&gt;</span></span><br><span class="line"> <span class="variable">&lt;version&gt;</span>$&#123;extapi.version&#125;<span class="variable">&lt;/version&gt;</span></span><br><span class="line"> <span class="variable">&lt;exclusions&gt;</span></span><br><span class="line"> <span class="variable">&lt;exclusion&gt;</span></span><br><span class="line"> <span class="variable">&lt;groupId&gt;</span>org.hibernate<span class="variable">&lt;/groupId&gt;</span></span><br><span class="line"> <span class="variable">&lt;artifactId&gt;</span>hibernate<span class="variable">&lt;/artifactId&gt;</span></span><br><span class="line"> <span class="variable">&lt;/exclusion&gt;</span></span><br><span class="line"> <span class="variable">&lt;exclusion&gt;</span></span><br><span class="line"> <span class="variable">&lt;groupId&gt;</span>org.hibernate<span class="variable">&lt;/groupId&gt;</span></span><br><span class="line"> <span class="variable">&lt;artifactId&gt;</span>hibernate-annotations<span class="variable">&lt;/artifactId&gt;</span></span><br><span class="line"> <span class="variable">&lt;/exclusion&gt;</span></span><br><span class="line"> <span class="variable">&lt;exclusion&gt;</span></span><br><span class="line"> <span class="variable">&lt;groupId&gt;</span>org.hibernate<span class="variable">&lt;/groupId&gt;</span></span><br><span class="line"> <span class="variable">&lt;artifactId&gt;</span>hibernate-core<span class="variable">&lt;/artifactId&gt;</span></span><br><span class="line"> <span class="variable">&lt;/exclusion&gt;</span></span><br><span class="line"> <span class="variable">&lt;exclusion&gt;</span></span><br><span class="line"> <span class="variable">&lt;groupId&gt;</span>org.jboss.weld<span class="variable">&lt;/groupId&gt;</span></span><br><span class="line"> <span class="variable">&lt;artifactId&gt;</span>weld-osgi-bundle<span class="variable">&lt;/artifactId&gt;</span></span><br><span class="line"> <span class="variable">&lt;/exclusion&gt;</span></span><br><span class="line"> <span class="variable">&lt;/exclusions&gt;</span></span><br><span class="line"><span class="variable">&lt;/dependency&gt;</span></span><br></pre></td></tr></table></figure>
</li>
</ol>
<h1 id="maven-pom-依赖检查:"><a href="#maven-pom-依赖检查:" class="headerlink" title="maven pom 依赖检查:"></a>maven pom 依赖检查:</h1><h2 id="mvn-命令"><a href="#mvn-命令" class="headerlink" title="mvn 命令"></a>mvn 命令</h2><ol>
<li>mvn dependency:analyze</li>
<li>mvn dependency:tree </li>
</ol>
<ul>
<li>mvn dependency:tree </li>
<li>mvn dependency:tree -Dverbose 简单地用dependency:tree往往并不能查看到所有的传递依赖。不过如果你真的想要看所有的,必须得加一个-Dverbose参数,这时就必定是最全的了</li>
<li>mvn dependency:tree -Dincludes 加上Dincludes或者Dexcludes,dependency:tree就会帮你过滤出来; 例如: Dincludes=org.springframework:spring-tx ;过滤串使用groupId:artifactId:version的方式进行过滤,可以不写全</li>
</ul>
<h3 id="使用示例:"><a href="#使用示例:" class="headerlink" title="使用示例:"></a>使用示例:</h3><p> mvn dependency:tree -Dverbose -Dincludes=com.google.guava:guava</p>
<figure class="highlight less"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr_selector">[INFO]</span> <span class="tag">---</span> <span class="tag">maven-dependency-plugin</span><span class="pseudo">:2</span><span class="class">.10</span><span class="pseudo">:tree</span> (default-cli) @ <span class="tag">shouwin-web</span> <span class="tag">---</span></span><br><span class="line"><span class="attr_selector">[WARNING]</span> <span class="tag">Using</span> <span class="tag">Maven</span> <span class="tag">2</span> <span class="tag">dependency</span> <span class="tag">tree</span> <span class="tag">to</span> <span class="tag">get</span> <span class="tag">verbose</span> <span class="tag">output</span>, <span class="tag">which</span> <span class="tag">may</span> <span class="tag">be</span> <span class="tag">inconsistent</span> <span class="tag">with</span> <span class="tag">actual</span> <span class="tag">Maven</span> <span class="tag">3</span> <span class="tag">resolution</span></span><br><span class="line"><span class="attr_selector">[INFO]</span> <span class="tag">com</span><span class="class">.huanyu</span><span class="class">.huanyu</span><span class="pseudo">:shouwin-web</span><span class="pseudo">:war</span><span class="pseudo">:0</span><span class="class">.1-SNAPSHOT</span></span><br><span class="line"><span class="attr_selector">[INFO]</span> +<span class="tag">-</span> <span class="tag">com</span><span class="class">.huanyu</span><span class="class">.dcommons</span><span class="pseudo">:dcommons-token</span><span class="pseudo">:jar</span><span class="pseudo">:0</span><span class="class">.8</span><span class="pseudo">:compile</span></span><br><span class="line"><span class="attr_selector">[INFO]</span> | \<span class="tag">-</span> (com.google.<span class="attribute">guava</span>:<span class="attribute">guava</span>:<span class="attribute">jar</span>:<span class="number">19.0</span>:compile - omitted for duplicate)</span><br><span class="line"><span class="attr_selector">[INFO]</span> +<span class="tag">-</span> <span class="tag">com</span><span class="class">.mangofactory</span><span class="pseudo">:swagger-models</span><span class="pseudo">:jar</span><span class="pseudo">:1</span><span class="class">.0</span><span class="class">.2</span><span class="pseudo">:compile</span></span><br><span class="line"><span class="attr_selector">[INFO]</span> | \<span class="tag">-</span> (com.google.<span class="attribute">guava</span>:<span class="attribute">guava</span>:<span class="attribute">jar</span>:<span class="number">15.0</span>:compile - omitted for conflict with <span class="number">19.0</span>)</span><br><span class="line"><span class="attr_selector">[INFO]</span> +<span class="tag">-</span> <span class="tag">com</span><span class="class">.mangofactory</span><span class="pseudo">:swagger-springmvc</span><span class="pseudo">:jar</span><span class="pseudo">:1</span><span class="class">.0</span><span class="class">.2</span><span class="pseudo">:compile</span></span><br><span class="line"><span class="attr_selector">[INFO]</span> | \<span class="tag">-</span> (com.google.<span class="attribute">guava</span>:<span class="attribute">guava</span>:<span class="attribute">jar</span>:<span class="number">15.0</span>:compile - omitted for conflict with <span class="number">19.0</span>)</span><br><span class="line"><span class="attr_selector">[INFO]</span> \<span class="tag">-</span> <span class="tag">com</span><span class="class">.google</span><span class="class">.guava</span><span class="pseudo">:guava</span><span class="pseudo">:jar</span><span class="pseudo">:19</span><span class="class">.0</span><span class="pseudo">:compile</span></span><br></pre></td></tr></table></figure>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><ul>
<li><a href="http://stamen.iteye.com/blog/2030552" target="_blank" rel="external">Maven类包冲突终极解决小技若干</a></li>
</ul>
</content>
<summary type="html">
java,java基础, jar冲突
</summary>
<category term="java" scheme="http://aresLove.github.io/categories/java/"/>
<category term="jar冲突" scheme="http://aresLove.github.io/tags/jar%E5%86%B2%E7%AA%81/"/>
<category term="java,java基础" scheme="http://aresLove.github.io/tags/java%EF%BC%8Cjava%E5%9F%BA%E7%A1%80/"/>
</entry>
<entry>
<title>常用命令总结</title>
<link href="http://aresLove.github.io/%E6%97%A5%E5%B8%B8%E6%80%BB%E7%BB%93/%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/"/>
<id>http://aresLove.github.io/日常总结/常用命令/</id>
<published>2017-05-17T06:34:18.649Z</published>
<updated>2017-05-17T06:34:18.649Z</updated>
<content type="html"><h2 id="网络异常"><a href="#网络异常" class="headerlink" title="网络异常"></a>网络异常</h2><ol>
<li><p>常用方法排查</p>
<ul>
<li>判定网络是否可达 <code>ping www.baidu.com</code></li>
<li>跟踪路由:判断网络节点是否畅通 <code>tracert -d www.baidu.com</code></li>
<li>用telnet命令来测试端口号是否正常打开还是关闭状态 <code>telnet www.baidu.com 2182</code></li>
</ul>
</li>
<li><p>dns 解析(本地 hosts 配置:C:\Windows\System32\drivers\etc)</p>
<ul>
<li>刷新DNS缓存 <code>ipconfig /flushdns</code></li>
</ul>
</li>
</ol>
<hr>
<h2 id="进程处理"><a href="#进程处理" class="headerlink" title="进程处理"></a>进程处理</h2><ol>
<li>端口占用 <ul>
<li>查看所有的端口占用情况 <code>netstat -ano</code></li>
<li>查看指定端口占用情况 <code>netstat -anno | findstr &quot;端口号&quot;</code></li>
<li>查看PID对应的进程 <code>tasklist|findstr &quot;进程号&quot;</code></li>
<li>终止一个进程 <code>taskkill /pid 进程号</code></li>
<li>强行终止进程 <code>taskkill /f /pid 进程号</code></li>
</ul>
</li>
</ol>
<hr>
<h2 id="常用windows命令"><a href="#常用windows命令" class="headerlink" title="常用windows命令"></a>常用windows命令</h2><ol>
<li>cd <code>cd /d target_url</code></li>
<li>cls <code>cls</code></li>
</ol>
<hr>
<h2 id="常用linux命令"><a href="#常用linux命令" class="headerlink" title="常用linux命令"></a>常用linux命令</h2><ol>
<li><p>ls/ll </p>
<figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">ls</span></span><br><span class="line"><span class="keyword">ls</span> -rlth</span><br><span class="line"><span class="keyword">ll</span></span><br></pre></td></tr></table></figure>
</li>
<li><p>cat</p>
<figure class="highlight vim"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">cat</span> <span class="keyword">file</span> | <span class="keyword">grep</span> -C lines <span class="string">"key"</span> | less</span><br><span class="line">其中,<span class="keyword">grep</span> -C lines 标识关键字上下多少行;</span><br><span class="line"></span><br><span class="line">示例:</span><br><span class="line"><span class="keyword">cat</span> /home/web/web-server.<span class="built_in">log</span> | <span class="keyword">grep</span> -C <span class="number">50</span> <span class="string">"[email protected]"</span> | less</span><br><span class="line">表示:在 /home/web/web-server.<span class="built_in">log</span> 中查找关键字为abc@<span class="number">163</span>.<span class="keyword">com</span>的日志,并显示该关键字上下<span class="number">50</span>行内容</span><br><span class="line"></span><br><span class="line">实例:<span class="keyword">cat</span> /hdapp/<span class="number">7001</span>/crm/logs/crm-server.<span class="built_in">log</span> | <span class="keyword">grep</span> -C <span class="number">50</span> <span class="string">"扣减积分失败"</span> | less</span><br></pre></td></tr></table></figure>
</li>
<li><p>pwd</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">pwd</span> 查看当前目录</span><br></pre></td></tr></table></figure>
</li>
<li><p>mkdir</p>
<figure class="highlight dos"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">mkdir</span> directory_name 创建文件夹</span><br></pre></td></tr></table></figure>
</li>
<li><p>rm -rf (慎用:删除不可恢复)</p>
<figure class="highlight stata"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">rm</span> -rf directory_name 递归删除目录下的所有文件,删除操作不可恢复,使用需谨慎</span><br><span class="line">一般禁用 <span class="keyword">rm</span> 操作, 通过 mv 命令将“需要删除的”文件移动到指定目录,由定时任务定期清空</span><br></pre></td></tr></table></figure>
</li>
<li><p>tab 自动补全</p>
</li>
<li>ctrl+c 终止执行(退出正在执行的操作)</li>
<li><p>mv </p>
<figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">mv <span class="keyword">from</span> <span class="keyword">to</span> 将文件(夹)剪切到某处</span><br></pre></td></tr></table></figure>
</li>
<li><p>cp</p>
<figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">cp <span class="keyword">from</span> <span class="keyword">to</span> 将文件拷贝到某处</span><br></pre></td></tr></table></figure>
</li>
<li><p>scp <a href="http://www.cnblogs.com/wanqieddy/archive/2012/08/02/2619928.html" target="_blank" rel="external">Linux下scp的用法</a>、<a href="http://www.cnblogs.com/tocy/p/linux_scp_remote-file-transfer.html" target="_blank" rel="external">linux远程拷贝命令-scp</a></p>
<figure class="highlight elixir"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">scp local_file remote_username<span class="variable">@remote_ip</span><span class="symbol">:remote_folder</span> 从 本地 复制到 远程</span><br><span class="line">scp remote_username<span class="variable">@remote_ip</span><span class="symbol">:remote_folder</span> local_file 从 远程 复制到 本地</span><br></pre></td></tr></table></figure>
</li>
<li><p>tail </p>
<figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tail -f <span class="command">log</span>.<span class="command">log</span> 实时输出查看<span class="command">log</span>日志</span><br></pre></td></tr></table></figure>
</li>
<li><p>tar/(zip/unzip、rar/unrar) <a href="http://www.cnblogs.com/qq78292959/archive/2011/07/06/2099427.html" target="_blank" rel="external">Linux下的tar压缩解压缩命令详解</a>、<a href="http://www.cnblogs.com/wangkongming/p/4305962.html" target="_blank" rel="external">Linux中zip压缩和unzip解压缩命令详解</a></p>
<figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">压缩</span><br><span class="line">tar -cvf target<span class="class">.tar</span> source_files</span><br><span class="line">zip target<span class="class">.zip</span> source_files</span><br><span class="line">解压</span><br><span class="line">tar -xvf source<span class="class">.tar</span> target</span><br><span class="line">unzip source<span class="class">.zip</span> target</span><br><span class="line"></span><br><span class="line">总结</span><br><span class="line"></span><br><span class="line"><span class="number">1</span>、*<span class="class">.tar</span> 用 tar -xvf 解压</span><br><span class="line"></span><br><span class="line"><span class="number">2</span>、*<span class="class">.gz</span> 用 gzip -d或者gunzip 解压</span><br><span class="line"></span><br><span class="line"><span class="number">3</span>、*<span class="class">.tar</span><span class="class">.gz</span>和*<span class="class">.tgz</span> 用 tar -xzf 解压</span><br><span class="line"></span><br><span class="line"><span class="number">4</span>、*<span class="class">.bz2</span> 用 bzip2 -d或者用bunzip2 解压</span><br><span class="line"></span><br><span class="line"><span class="number">5</span>、*<span class="class">.tar</span><span class="class">.bz2</span>用tar -xjf 解压</span><br><span class="line"></span><br><span class="line"><span class="number">6</span>、*<span class="class">.Z</span> 用 uncompress 解压</span><br><span class="line"></span><br><span class="line"><span class="number">7</span>、*<span class="class">.tar</span><span class="class">.Z</span> 用tar -xZf 解压</span><br><span class="line"></span><br><span class="line"><span class="number">8</span>、*<span class="class">.rar</span> 用 unrar e解压</span><br><span class="line"></span><br><span class="line"><span class="number">9</span>、*<span class="class">.zip</span> 用 unzip 解压</span><br></pre></td></tr></table></figure>
</li>
</ol>
<hr>
<h2 id="常用vim命令-linux下vim命令详解、linux下vi命令大全"><a href="#常用vim命令-linux下vim命令详解、linux下vi命令大全" class="headerlink" title="常用vim命令 linux下vim命令详解、linux下vi命令大全"></a>常用vim命令 <a href="http://www.cnblogs.com/zhanglong0426/archive/2010/10/07/1845268.html" target="_blank" rel="external">linux下vim命令详解</a>、<a href="http://www.cnblogs.com/88999660/articles/1581524.html" target="_blank" rel="external">linux下vi命令大全</a></h2><ol>
<li>i 进入编辑模式</li>
<li>esc 退出编辑模式</li>
<li>:wq/:x 保存修改并退出</li>
<li>:q! 放弃修改并退出</li>
<li>dd (非编辑模式下)删除当前行</li>
</ol>
<hr>
<h2 id="nginx"><a href="#nginx" class="headerlink" title="nginx"></a>nginx</h2><ol>
<li>测试修改 nginx 配置后是否存在问题 <code>nginx -t</code></li>
<li>修改 nginx 配置后使配置被装载 <code>nginx -s reload</code></li>
</ol>
<hr>
<h2 id="mysql"><a href="#mysql" class="headerlink" title="mysql"></a>mysql</h2><ol>
<li>存储过程</li>
</ol>
<ul>
<li><p>查询数据库中的存储过程</p>
<figure class="highlight oxygene"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">方法一:</span><br><span class="line"><span class="keyword">select</span> `name` <span class="keyword">from</span> MySQL.proc <span class="keyword">where</span> db = <span class="string">'your_db_name'</span> <span class="keyword">and</span> `<span class="keyword">type</span>` = <span class="string">'PROCEDURE'</span></span><br><span class="line">方法二:</span><br><span class="line">show <span class="function"><span class="keyword">procedure</span> <span class="title">status</span>;</span></span><br></pre></td></tr></table></figure>
</li>
<li><p>查看存储过程或函数的创建代码</p>
<figure class="highlight oxygene"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">show <span class="keyword">create</span> <span class="function"><span class="keyword">procedure</span> <span class="title">proc_name</span>;</span></span><br><span class="line">show <span class="keyword">create</span> <span class="function"><span class="keyword">function</span> <span class="title">func_name</span>;</span></span><br></pre></td></tr></table></figure>
</li>
</ul>
<hr>
<h2 id="常用快捷键"><a href="#常用快捷键" class="headerlink" title="常用快捷键"></a>常用快捷键</h2><ol>
<li>关闭窗口 <code>ctrl+w、ctrl+F4</code></li>
<li>关机<code>alt+F4</code></li>
<li>快速切换<code>alt+tab/ctrl+tab</code></li>
<li>快速锁机<code>win+l</code></li>
</ol>
<hr>
<h2 id="hexo"><a href="#hexo" class="headerlink" title="hexo"></a>hexo</h2><figure class="highlight nginx"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="title">hexo</span> clean</span><br><span class="line">hexo g -<span class="built_in">debug</span></span><br><span class="line">hexo s --<span class="built_in">debug</span> &amp;&amp; tail -f <span class="built_in">debug</span>.log</span><br><span class="line">hexo d</span><br></pre></td></tr></table></figure>
<hr>
<h2 id="curl"><a href="#curl" class="headerlink" title="curl"></a>curl</h2><ol>
<li><p>post<br><code>curl -u user:password -H &quot;Content-Type: application/json;charset=UTF-8&quot; -X POST -d &#39;{JSON}&#39; URL</code></p>
</li>
<li><p>get<br><code>curl -u user:password URL</code></p>
</li>
</ol>
<hr>
<h2 id="docker"><a href="#docker" class="headerlink" title="docker"></a>docker</h2><ol>
<li><p>运行容器</p>
<figure class="highlight haml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">docker run</span><br><span class="line">-<span class="ruby">i -t 创建交互式容器</span><br><span class="line"></span>-<span class="ruby">d 创建守护式容器</span><br><span class="line"></span>-<span class="ruby">-name 为容器指定一个名称</span></span><br></pre></td></tr></table></figure>
</li>
<li><p>查看运行的容器 </p>
<figure class="highlight haml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">docker ps</span><br><span class="line">-<span class="ruby">a 查看所有容器运行状态</span><br><span class="line"></span>docker inspect 查看容器的详细信息</span><br></pre></td></tr></table></figure>
</li>
<li><p>停止一个守护式容器 <code>docker stop</code></p>
</li>
<li>删除容器<code>docker rm</code></li>
<li><p>进入容器</p>
<figure class="highlight applescript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker exec -<span class="keyword">it</span> container_name /bin/bash</span><br><span class="line"><span class="keyword">exit</span> 退出容器</span><br></pre></td></tr></table></figure>
</li>
<li><p>结束容器 <code>exit container_name</code></p>
</li>
<li><p>查看镜像</p>
<figure class="highlight 1c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker images </span><br><span class="line">docker images <span class="string">| grep some_key</span></span><br></pre></td></tr></table></figure>
</li>
<li><p>拷贝文件(宿主机和容器交互)</p>
<figure class="highlight armasm"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1</span>. 从容器内拷贝出来</span><br><span class="line"><span class="label">docker</span> <span class="preprocessor">cp</span> container:/path hostMerchine_path</span><br><span class="line"><span class="number">2</span>. 从宿主机拷贝进容器中</span><br><span class="line"><span class="label">docker</span> <span class="preprocessor">cp</span> hostMerchine_path container:/path</span><br></pre></td></tr></table></figure>
</li>
</ol>
<h2 id="redis"><a href="#redis" class="headerlink" title="redis"></a>redis</h2><ol>
<li><p>使用 redis 客户端建立连接</p>
<figure class="highlight elm"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="title">redis</span>-cli -p <span class="foreign"><span class="keyword">port</span> -h host_ip</span></span><br></pre></td></tr></table></figure>
</li>
<li><p>keys 关键字模糊查询</p>
<figure class="highlight gherkin"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">keys <span class="keyword">*</span>key_word<span class="keyword">*</span></span><br></pre></td></tr></table></figure>
</li>
</ol>
<h2 id="git"><a href="#git" class="headerlink" title="git"></a>git</h2><figure class="highlight crmsh"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="number">1</span>. git <span class="keyword">clone</span> <span class="title">-b</span> <span class="keyword">master</span> <span class="title">responsitory_url</span></span><br><span class="line"> git <span class="keyword">clone</span> <span class="title">-b</span> <span class="keyword">master</span> <span class="title">https</span>://github.com/aresLove/java-core-learning-example ../java-core-learning-example</span><br><span class="line"><span class="number">2</span>. git status</span><br><span class="line"></span><br><span class="line"><span class="number">3</span>. git add --all</span><br><span class="line"></span><br><span class="line"><span class="number">4</span>. git commit -a -m <span class="string">"commet"</span></span><br><span class="line"></span><br><span class="line"><span class="number">5</span>. git push/git push origin <span class="literal">master</span></span><br></pre></td></tr></table></figure>
</content>
<summary type="html">
日常常用命令总结
</summary>
<category term="日常总结" scheme="http://aresLove.github.io/categories/%E6%97%A5%E5%B8%B8%E6%80%BB%E7%BB%93/"/>
<category term="常用命令" scheme="http://aresLove.github.io/tags/%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/"/>
<category term="日常总结" scheme="http://aresLove.github.io/tags/%E6%97%A5%E5%B8%B8%E6%80%BB%E7%BB%93/"/>
</entry>
<entry>
<title>多线程并发</title>
<link href="http://aresLove.github.io/%E5%A4%9A%E7%BA%BF%E7%A8%8B/%E5%A4%9A%E7%BA%BF%E7%A8%8B%E5%B9%B6%E5%8F%91/"/>
<id>http://aresLove.github.io/多线程/多线程并发/</id>
<published>2017-03-20T15:56:16.027Z</published>
<updated>2017-03-20T15:56:16.027Z</updated>
<content type="html"><h2 id="通过-jmeter-线程组发起并发对接口(插入数据)进行压力测试"><a href="#通过-jmeter-线程组发起并发对接口(插入数据)进行压力测试" class="headerlink" title="通过 jmeter 线程组发起并发对接口(插入数据)进行压力测试"></a>通过 jmeter 线程组发起并发对接口(插入数据)进行压力测试</h2><ol>
<li>考虑处理方案:<ol>
<li>通过 synchronized 同步互斥锁来控制</li>
<li>通过 数据库业务唯一键约束,由数据库来控制并发产生的问题</li>
<li>其他方式,暂时没有思路</li>
</ol>
</li>
<li>决策<ol>
<li>通过 synchronized 来控制并发,这将大大降低处理性能,使得多线程处理变成队列式依次进行</li>
<li>经由数据库唯一键约束来控制并发,会出现 <code>org.hibernate.exception.ConstraintViolationException</code> 程序异常,然而,这种性能损耗相对于 synchronized 来讲,还是比较小的,<br>在保证处理性能的前提下,选择这种方式无疑要比 synchronized 好很多,而且本身就应该添加的业务唯一键约束,在没有比这更好的处理方案的情况下,选择这种方案更适合。</li>
</ol>
</li>
<li>行动<ol>
<li>升级数据库(清理脏数据,添加唯一键约束)</li>
<li>升级程序(容错处理,日志记录)</li>
</ol>
</li>
</ol>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">import</span> org.springframework.jdbc.core.<span class="function">JdbcTemplate</span><br><span class="line"></span><br><span class="line"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">fixDatas</span><span class="params">(JdbcTemplate template, Map&lt;String, String&gt; map)</span> </span>&#123;</span><br><span class="line"> <span class="keyword">if</span> (map == <span class="keyword">null</span> || map.size() &lt;= <span class="number">0</span>)</span><br><span class="line"> <span class="keyword">return</span>;</span><br><span class="line"></span><br><span class="line"> Iterator&lt;Entry&lt;String, String&gt;&gt; iterator = map.entrySet().iterator();</span><br><span class="line"> Entry&lt;String, String&gt; entry = <span class="keyword">null</span>;</span><br><span class="line"> <span class="keyword">while</span> (iterator.hasNext()) &#123;</span><br><span class="line"> entry = iterator.next();</span><br><span class="line"> debug(MessageFormat.format(<span class="string">"&#123;0&#125;:&#123;1&#125;"</span>, entry.getKey(), entry.getValue()));</span><br><span class="line"> <span class="keyword">if</span> (StringUtils.isNotBlank(entry.getKey()) &amp;&amp; StringUtils.isNotBlank(entry.getValue()))</span><br><span class="line"> fixProcess(template, entry.getKey(), entry.getValue());</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">fixProcess</span><span class="params">(JdbcTemplate template, String tableName, String sql)</span> </span>&#123;</span><br><span class="line">LOG.info(MessageFormat.format(<span class="string">"====== 开始修复 &#123;0&#125; 数据 ======"</span>, tableName));</span><br><span class="line"><span class="comment">// 检索待修复数据集</span></span><br><span class="line">List&lt;Object[]&gt; result = loadDataSet(template, sql);</span><br><span class="line"></span><br><span class="line"><span class="comment">// 清理数据</span></span><br><span class="line">cleanData(template, result, tableName);</span><br><span class="line">LOG.info(MessageFormat.format(<span class="string">"====== 已完成修复 &#123;0&#125; 数据 ======"</span>, tableName));</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">private</span> List&lt;Object[]&gt; loadDataSet(JdbcTemplate template, String sql) &#123;</span><br><span class="line"><span class="comment">// 检索待修复数据集</span></span><br><span class="line">List&lt;Object[]&gt; result = template.query(sql, <span class="keyword">new</span> ResultSetExtractor&lt;List&lt;Object[]&gt;&gt;() &#123;</span><br><span class="line"> <span class="annotation">@Override</span></span><br><span class="line"> <span class="keyword">public</span> List&lt;Object[]&gt; extractData(ResultSet rs) <span class="keyword">throws</span> SQLException, DataAccessException &#123;</span><br><span class="line"> List&lt;Object[]&gt; res = <span class="keyword">new</span> ArrayList&lt;Object[]&gt;();</span><br><span class="line"> <span class="keyword">while</span> (rs.next()) &#123;</span><br><span class="line"> List&lt;Object&gt; singleLine = <span class="keyword">new</span> ArrayList&lt;Object&gt;();</span><br><span class="line"> singleLine.add(rs.getString(<span class="string">"hst_num"</span>));</span><br><span class="line"> singleLine.add(rs.getInt(<span class="string">"count_res"</span>));</span><br><span class="line"> res.add(singleLine.toArray(<span class="keyword">new</span> Object[singleLine.size()]));</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> res;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;);</span><br><span class="line"></span><br><span class="line">LOG.info(<span class="string">"待修复处理数据:&#123;&#125;"</span>, JsonSimpleSerializer.serialize(result));</span><br><span class="line"><span class="keyword">return</span> result;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">cleanData</span><span class="params">(JdbcTemplate template, List&lt;Object[]&gt; result, String tableName)</span> </span>&#123;</span><br><span class="line"><span class="comment">// 清理数据</span></span><br><span class="line"><span class="keyword">if</span> (result != <span class="keyword">null</span> &amp;&amp; result.isEmpty() == <span class="keyword">false</span>) &#123;</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> line = <span class="number">0</span>; line &lt; result.size(); line++) &#123;</span><br><span class="line"> List&lt;String&gt; rows = template.queryForList(MessageFormat</span><br><span class="line"> .format(<span class="string">"select uuid from &#123;0&#125; where hst_num = ? ORDER BY &#123;1&#125; asc"</span>, tableName,</span><br><span class="line"> PAY_TRAN_TABLE_NAME.equals(tableName) ? <span class="string">"created"</span> : <span class="string">"createTime"</span>),</span><br><span class="line"> <span class="keyword">new</span> Object[]&#123;result.get(line)[<span class="number">0</span>]&#125;, String.class);</span><br><span class="line"> debug(MessageFormat</span><br><span class="line"> .format(<span class="string">"流水记录表 &#123;0&#125; 中重复流水号的 uuid:&#123;1&#125;"</span>, tableName, JsonSimpleSerializer.serialize(rows)));</span><br><span class="line"> <span class="keyword">for</span> (<span class="keyword">int</span> row = <span class="number">1</span>; row &lt; rows.size(); row++) &#123;</span><br><span class="line"> debug(MessageFormat.format(<span class="string">"清理流水记录表 &#123;0&#125; 记录为 uuid:&#123;1&#125; 的数据"</span>, tableName, rows.get(row)));</span><br><span class="line"> template.update(MessageFormat.format(<span class="string">"DELETE from &#123;0&#125; where uuid = ? "</span>, tableName),</span><br><span class="line"> rows.get(row));</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">private</span> <span class="keyword">void</span> <span class="title">debug</span><span class="params">(String message)</span> </span>&#123;</span><br><span class="line"><span class="keyword">if</span> (LOG.isDebugEnabled())</span><br><span class="line"> LOG.debug(message);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<ul>
<li>升级日志 <figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br></pre></td><td class="code"><pre><span class="line">2017-01-12 18:36:11,854 [DEBUG] com.hd123.rumba.rdbver.upgrader.UpgraderManager - <span class="operator"><span class="keyword">Call</span> upgrader: com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.SchemaUpgrader</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">855</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - tran:<span class="keyword">select</span> hst_num,<span class="keyword">count</span>(<span class="keyword">uuid</span>) <span class="keyword">as</span> count_res <span class="keyword">from</span> tran <span class="keyword">GROUP</span> <span class="keyword">BY</span> hst_num,tran_status <span class="keyword">HAVING</span> <span class="keyword">count</span>(<span class="keyword">uuid</span>) &gt; <span class="number">1</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">855</span> [INFO] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - ====== 开始修复 tran 数据 ======</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">855</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing <span class="keyword">SQL</span> <span class="keyword">query</span> [<span class="keyword">select</span> hst_num,<span class="keyword">count</span>(<span class="keyword">uuid</span>) <span class="keyword">as</span> count_res <span class="keyword">from</span> tran <span class="keyword">GROUP</span> <span class="keyword">BY</span> hst_num,tran_status <span class="keyword">HAVING</span> <span class="keyword">count</span>(<span class="keyword">uuid</span>) &gt; <span class="number">1</span>]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">855</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">871</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">876</span> [INFO] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 待修复处理数据:&#123;<span class="string">"type"</span>:<span class="string">"list"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"array"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"20170316y001"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"integer"</span>,<span class="string">"value"</span>:<span class="number">5</span>&#125;]&#125;,&#123;<span class="string">"type"</span>:<span class="string">"array"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"20170316ylj003"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"integer"</span>,<span class="string">"value"</span>:<span class="number">3</span>&#125;]&#125;,&#123;<span class="string">"type"</span>:<span class="string">"array"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"20170317lq001"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"integer"</span>,<span class="string">"value"</span>:<span class="number">2</span>&#125;]&#125;,&#123;<span class="string">"type"</span>:<span class="string">"array"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"ylj20170316000"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"integer"</span>,<span class="string">"value"</span>:<span class="number">2</span>&#125;]&#125;]&#125;</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">903</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">query</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">905</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">select</span> <span class="keyword">uuid</span> <span class="keyword">from</span> tran <span class="keyword">where</span> hst_num = ? <span class="keyword">ORDER</span> <span class="keyword">BY</span> created <span class="keyword">asc</span>]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">905</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">925</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">925</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 流水记录表 tran 中重复流水号的 <span class="keyword">uuid</span>:&#123;<span class="string">"type"</span>:<span class="string">"list"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad683dc060057"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad683dc120058"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad683dc160059"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad683dc19005a"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad683dc1c005b"</span>&#125;]&#125;</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">925</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 tran 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ad60f91015ad683dc120058 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">925</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">925</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> tran <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">925</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">933</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">934</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">934</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 tran 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ad60f91015ad683dc160059 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">934</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">934</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> tran <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">934</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">940</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">942</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">942</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 tran 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ad60f91015ad683dc19005a 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">942</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">942</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> tran <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">942</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">945</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">946</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">946</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 tran 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ad60f91015ad683dc1c005b 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">946</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">946</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> tran <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">946</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">949</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">950</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">950</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">query</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">950</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">select</span> <span class="keyword">uuid</span> <span class="keyword">from</span> tran <span class="keyword">where</span> hst_num = ? <span class="keyword">ORDER</span> <span class="keyword">BY</span> created <span class="keyword">asc</span>]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">950</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">952</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">952</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 流水记录表 tran 中重复流水号的 <span class="keyword">uuid</span>:&#123;<span class="string">"type"</span>:<span class="string">"list"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad664429d003e"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad66442a1003f"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad66442a40040"</span>&#125;]&#125;</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">952</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 tran 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ad60f91015ad66442a1003f 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">952</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">952</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> tran <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">952</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">955</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">957</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">957</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 tran 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ad60f91015ad66442a40040 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">957</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">957</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> tran <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">957</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">959</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">961</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">961</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">query</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">961</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">select</span> <span class="keyword">uuid</span> <span class="keyword">from</span> tran <span class="keyword">where</span> hst_num = ? <span class="keyword">ORDER</span> <span class="keyword">BY</span> created <span class="keyword">asc</span>]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">961</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">962</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">962</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 流水记录表 tran 中重复流水号的 <span class="keyword">uuid</span>:&#123;<span class="string">"type"</span>:<span class="string">"list"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ada4434015ada59c42b0019"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ada4434015ada59c42c001a"</span>&#125;]&#125;</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">962</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 tran 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ada4434015ada59c42c001a 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">962</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">962</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> tran <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">962</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">964</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">964</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">964</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">query</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">964</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">select</span> <span class="keyword">uuid</span> <span class="keyword">from</span> tran <span class="keyword">where</span> hst_num = ? <span class="keyword">ORDER</span> <span class="keyword">BY</span> created <span class="keyword">asc</span>]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">964</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">966</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">966</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 流水记录表 tran 中重复流水号的 <span class="keyword">uuid</span>:&#123;<span class="string">"type"</span>:<span class="string">"list"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad650a5cd0025"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad650a5ef0026"</span>&#125;]&#125;</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">966</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 tran 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ad60f91015ad650a5ef0026 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">966</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">966</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> tran <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">966</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">969</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">970</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">970</span> [INFO] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - ====== 已完成修复 tran 数据 ======</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">970</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - hst:<span class="keyword">select</span> hst_num,<span class="keyword">count</span>(<span class="keyword">uuid</span>) <span class="keyword">as</span> count_res <span class="keyword">from</span> hst <span class="keyword">GROUP</span> <span class="keyword">BY</span> hst_num,<span class="keyword">status</span> <span class="keyword">HAVING</span> <span class="keyword">count</span>(<span class="keyword">uuid</span>) &gt; <span class="number">1</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">970</span> [INFO] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - ====== 开始修复 hst 数据 ======</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">970</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing <span class="keyword">SQL</span> <span class="keyword">query</span> [<span class="keyword">select</span> hst_num,<span class="keyword">count</span>(<span class="keyword">uuid</span>) <span class="keyword">as</span> count_res <span class="keyword">from</span> hst <span class="keyword">GROUP</span> <span class="keyword">BY</span> hst_num,<span class="keyword">status</span> <span class="keyword">HAVING</span> <span class="keyword">count</span>(<span class="keyword">uuid</span>) &gt; <span class="number">1</span>]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">970</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">977</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">978</span> [INFO] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 待修复处理数据:&#123;<span class="string">"type"</span>:<span class="string">"list"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"array"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"20170316y001"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"integer"</span>,<span class="string">"value"</span>:<span class="number">5</span>&#125;]&#125;,&#123;<span class="string">"type"</span>:<span class="string">"array"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"20170316ylj003"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"integer"</span>,<span class="string">"value"</span>:<span class="number">3</span>&#125;]&#125;,&#123;<span class="string">"type"</span>:<span class="string">"array"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"20170317lq001"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"integer"</span>,<span class="string">"value"</span>:<span class="number">2</span>&#125;]&#125;,&#123;<span class="string">"type"</span>:<span class="string">"array"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"ylj20170316000"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"integer"</span>,<span class="string">"value"</span>:<span class="number">2</span>&#125;]&#125;]&#125;</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">978</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">query</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">978</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">select</span> <span class="keyword">uuid</span> <span class="keyword">from</span> hst <span class="keyword">where</span> hst_num = ? <span class="keyword">ORDER</span> <span class="keyword">BY</span> createTime <span class="keyword">asc</span>]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">978</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">981</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">982</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 流水记录表 hst 中重复流水号的 <span class="keyword">uuid</span>:&#123;<span class="string">"type"</span>:<span class="string">"list"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad683dc24005c"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad683dc27005e"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad683dc2b0060"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad683dc330062"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad683dc340064"</span>&#125;]&#125;</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">982</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 hst 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ad60f91015ad683dc27005e 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">982</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">982</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> hst <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">982</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">985</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">987</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">987</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 hst 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ad60f91015ad683dc2b0060 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">987</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">987</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> hst <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">987</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">995</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">996</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">997</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 hst 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ad60f91015ad683dc330062 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">997</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">997</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> hst <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">11</span>,<span class="number">997</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">001</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">002</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">002</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 hst 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ad60f91015ad683dc340064 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">002</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">002</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> hst <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">002</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">005</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">008</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">009</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">query</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">009</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">select</span> <span class="keyword">uuid</span> <span class="keyword">from</span> hst <span class="keyword">where</span> hst_num = ? <span class="keyword">ORDER</span> <span class="keyword">BY</span> createTime <span class="keyword">asc</span>]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">009</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">012</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">012</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 流水记录表 hst 中重复流水号的 <span class="keyword">uuid</span>:&#123;<span class="string">"type"</span>:<span class="string">"list"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad66442a80041"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad66442b10043"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad66442b20045"</span>&#125;]&#125;</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">012</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 hst 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ad60f91015ad66442b10043 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">012</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">012</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> hst <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">012</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">016</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">017</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">017</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 hst 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ad60f91015ad66442b20045 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">017</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">017</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> hst <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">017</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">021</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">023</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">023</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">query</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">023</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">select</span> <span class="keyword">uuid</span> <span class="keyword">from</span> hst <span class="keyword">where</span> hst_num = ? <span class="keyword">ORDER</span> <span class="keyword">BY</span> createTime <span class="keyword">asc</span>]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">023</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">026</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">026</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 流水记录表 hst 中重复流水号的 <span class="keyword">uuid</span>:&#123;<span class="string">"type"</span>:<span class="string">"list"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ada4434015ada59c434001b"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ada4434015ada59c437001d"</span>&#125;]&#125;</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">026</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 hst 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ada4434015ada59c437001d 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">026</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">026</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> hst <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">026</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">029</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">030</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">030</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">query</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">030</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">select</span> <span class="keyword">uuid</span> <span class="keyword">from</span> hst <span class="keyword">where</span> hst_num = ? <span class="keyword">ORDER</span> <span class="keyword">BY</span> createTime <span class="keyword">asc</span>]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">030</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">032</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">033</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 流水记录表 hst 中重复流水号的 <span class="keyword">uuid</span>:&#123;<span class="string">"type"</span>:<span class="string">"list"</span>,<span class="string">"value"</span>:[&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad650a60e0027"</span>&#125;,&#123;<span class="string">"type"</span>:<span class="string">"string"</span>,<span class="string">"value"</span>:<span class="string">"402880905ad60f91015ad650a60f0029"</span>&#125;]&#125;</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">033</span> [DEBUG] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - 清理流水记录表 hst 记录为 <span class="keyword">uuid</span>:<span class="number">402880905</span>ad60f91015ad650a60f0029 的数据</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">033</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">update</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">033</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - Executing prepared <span class="keyword">SQL</span> <span class="keyword">statement</span> [<span class="keyword">DELETE</span> <span class="keyword">from</span> hst <span class="keyword">where</span> <span class="keyword">uuid</span> = ? ]</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">033</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - Fetching JDBC <span class="keyword">Connection</span> <span class="keyword">from</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">038</span> [DEBUG] org.springframework.jdbc.core.JdbcTemplate - <span class="keyword">SQL</span> <span class="keyword">update</span> affected <span class="number">1</span> <span class="keyword">rows</span></span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">040</span> [DEBUG] org.springframework.jdbc.datasource.DataSourceUtils - <span class="keyword">Returning</span> JDBC <span class="keyword">Connection</span> <span class="keyword">to</span> DataSource</span><br><span class="line"><span class="number">2017</span>-<span class="number">01</span>-<span class="number">12</span> <span class="number">18</span>:<span class="number">36</span>:<span class="number">12</span>,<span class="number">040</span> [INFO] com.huanyu.crm.rdb.<span class="keyword">upgrade</span>.v1.v4.UpgradePayNotify - ====== 已完成修复 hst 数据 ======</span></span><br></pre></td></tr></table></figure>
</li>
</ul>
<h2 id="多线程并发处理事件"><a href="#多线程并发处理事件" class="headerlink" title="多线程并发处理事件"></a>多线程并发处理事件</h2><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">线程<span class="number">2</span> 处理日志:</span><br><span class="line"></span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">55</span>,<span class="number">896</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">8</span>eca780c658740b1a499baa1d7074e61 - run</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">55</span>,<span class="number">897</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">0639f</span>5184db44f8a9659428a217f930e - handle: test, crm, <span class="number">402880985</span>ad4ba3c015ad50011720002, com.huanyu.mgate.core.weixin.ActiveCardEvent</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">55</span>,<span class="number">897</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">0639f</span>5184db44f8a9659428a217f930e - handle: test, alipass, <span class="number">402880985</span>ad4ba3c015ad50011720002, com.huanyu.mgate.core.weixin.ActiveCardEvent</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">55</span>,<span class="number">897</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">0639f</span>5184db44f8a9659428a217f930e - handle: test, weixin, <span class="number">402880985</span>ad4ba3c015ad50011720002, com.huanyu.mgate.core.weixin.ActiveCardEvent</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">55</span>,<span class="number">908</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">0639f</span>5184db44f8a9659428a217f930e - Request:</span><br><span class="line">==========================</span><br><span class="line">POST https:<span class="comment">//api.weixin.qq.com/card/membercard/userinfo/get?access_token=DSJ-g_DErgipWWCqY-cOoicJn-UuwgFbDdZ-3AOCw4uRG6VyjlvXRKVs9lDnQo6hLjRoIlNW06i-UhJKAnmFq7T_apxgI-bpqRfv1V38PlPNe17ETBfXDjSSxQT-RSGcVYEcAKDMPV</span></span><br><span class="line">&#123;<span class="string">"code"</span>:<span class="string">"weixin_code"</span>,<span class="string">"card_id"</span>:<span class="string">"weixin_card_id"</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">56</span>,<span class="number">013</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">0639f</span>5184db44f8a9659428a217f930e - Response: </span><br><span class="line">==========================</span><br><span class="line"><span class="number">200</span></span><br><span class="line">&#123;<span class="string">"errcode"</span>:<span class="number">0</span>,<span class="string">"errmsg"</span>:<span class="string">"ok"</span>,<span class="string">"openid"</span>:<span class="string">"weixin_open_id"</span>,<span class="string">"nickname"</span>:<span class="string">"nick_name"</span>,<span class="string">"membership_number"</span>:<span class="string">"weixin_code"</span>,<span class="string">"bonus"</span>:<span class="number">0</span>,<span class="string">"sex"</span>:<span class="string">"MALE"</span>,<span class="string">"user_info"</span>:&#123;<span class="string">"common_field_list"</span>:[&#123;<span class="string">"name"</span>:<span class="string">"USER_FORM_INFO_FLAG_MOBILE"</span>,<span class="string">"value"</span>:<span class="string">"12345678901"</span>,<span class="string">"value_list"</span>:[]&#125;],<span class="string">"custom_field_list"</span>:[]&#125;,<span class="string">"user_card_status"</span>:<span class="string">"NORMAL"</span>,<span class="string">"has_active"</span>:<span class="keyword">true</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">56</span>,<span class="number">130</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.weixin.sdk.http.HttpClient <span class="number">0639f</span>5184db44f8a9659428a217f930e - Request:</span><br><span class="line">==========================</span><br><span class="line">GET http:<span class="comment">//dly-bl.jcrm.test.hd123.cn:9080/jcrm-server-card/rest/mbr/getByMobileNum/12345678901</span></span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">56</span>,<span class="number">366</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.weixin.sdk.http.HttpClient <span class="number">0639f</span>5184db44f8a9659428a217f930e - Response: </span><br><span class="line">==========================</span><br><span class="line"><span class="number">200</span></span><br><span class="line">&#123;</span><br><span class="line"> <span class="string">"errorCode"</span> : <span class="number">0</span>,</span><br><span class="line"> <span class="string">"message"</span> : <span class="string">"ok"</span></span><br><span class="line">&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">56</span>,<span class="number">380</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.ddps.config.impl.DefaultConfigStore <span class="number">0639f</span>5184db44f8a9659428a217f930e - 开始监听配置更新,tenantId: test, name: offlinecrm.defaultOperateStore</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">56</span>,<span class="number">407</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.ddps.config.impl.DefaultConfigStore <span class="number">0639f</span>5184db44f8a9659428a217f930e - 开始监听配置更新,tenantId: -, name: offlinecrm.paths</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">56</span>,<span class="number">495</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.mgate.core.weixin.WeixinEventHandler <span class="number">0639f</span>5184db44f8a9659428a217f930e - 推送给crm:test, json_data</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">57</span>,<span class="number">983</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.mgate.core.weixin.WeixinEventHandler <span class="number">0639f</span>5184db44f8a9659428a217f930e - 绑定会员,租户: test, 会员ID: <span class="number">89638865</span>b0474a9cb5db3aea1b9bd839, 会员号: test_number_1</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">000</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">0639f</span>5184db44f8a9659428a217f930e - Request:</span><br><span class="line">==========================</span><br><span class="line">POST https:<span class="comment">//api.weixin.qq.com/card/code/get?access_token=DSJ-g_DErgipWWCqY-cOoicJn-UuwgFbDdZ-3AOCw4uRG6VyjlvXRKVs9lDnQo6hLjRoIlNW06i-UhJKAnmFq7T_apxgI-bpqRfv1V38PlPNe17ETBfXDjSSxQT-RSGcVYEcAKDMPV</span></span><br><span class="line">&#123;<span class="string">"check_consume"</span>:<span class="keyword">false</span>,<span class="string">"code"</span>:<span class="string">"weixin_code"</span>,<span class="string">"card_id"</span>:<span class="string">"weixin_card_id"</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">116</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">0639f</span>5184db44f8a9659428a217f930e - Response: </span><br><span class="line">==========================</span><br><span class="line"><span class="number">200</span></span><br><span class="line">&#123;<span class="string">"errcode"</span>:<span class="number">0</span>,<span class="string">"errmsg"</span>:<span class="string">"ok"</span>,<span class="string">"card"</span>:&#123;<span class="string">"card_id"</span>:<span class="string">"weixin_card_id"</span>,<span class="string">"begin_time"</span>:<span class="number">0</span>,<span class="string">"end_time"</span>:<span class="number">4294967295</span>,<span class="string">"bonus"</span>:<span class="number">0</span>,<span class="string">"code"</span>:<span class="string">"weixin_code"</span>,<span class="string">"membership_number"</span>:<span class="string">"weixin_code"</span>&#125;,<span class="string">"openid"</span>:<span class="string">"weixin_open_id"</span>,<span class="string">"can_consume"</span>:<span class="keyword">true</span>,<span class="string">"user_card_status"</span>:<span class="string">"NORMAL"</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">116</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.mgate.core.weixin.WeixinEventHandler <span class="number">0639f</span>5184db44f8a9659428a217f930e - 激活微信会员卡,租户: test, 卡号: weixin_code</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">117</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">0639f</span>5184db44f8a9659428a217f930e - Request:</span><br><span class="line">==========================</span><br><span class="line">POST https:<span class="comment">//api.weixin.qq.com/card/membercard/activate?access_token=DSJ-g_DErgipWWCqY-cOoicJn-UuwgFbDdZ-3AOCw4uRG6VyjlvXRKVs9lDnQo6hLjRoIlNW06i-UhJKAnmFq7T_apxgI-bpqRfv1V38PlPNe17ETBfXDjSSxQT-RSGcVYEcAKDMPV</span></span><br><span class="line">&#123;<span class="string">"membership_number"</span>:<span class="string">"test_number_1"</span>,<span class="string">"code"</span>:<span class="string">"weixin_code"</span>,<span class="string">"card_id"</span>:<span class="string">"weixin_card_id"</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">228</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">0639f</span>5184db44f8a9659428a217f930e - Response: </span><br><span class="line">==========================</span><br><span class="line"><span class="number">200</span></span><br><span class="line">&#123;<span class="string">"errcode"</span>:<span class="number">0</span>,<span class="string">"errmsg"</span>:<span class="string">"ok"</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">229</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.mgate.core.PublishServiceImpl <span class="number">0639f</span>5184db44f8a9659428a217f930e - mgate-crmService-queryAccount:租户Id:test,查询类型:crm_mbr_id,查询码:test_number_1</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">427</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] WARN com.huanyu.mgate.core.weixin.WeixinEventHandler <span class="number">0639f</span>5184db44f8a9659428a217f930e - 初始化会员weixin_code微信积分账户,积分数:<span class="number">0.00</span></span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">428</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">0639f</span>5184db44f8a9659428a217f930e - Request:</span><br><span class="line">==========================</span><br><span class="line">POST https:<span class="comment">//api.weixin.qq.com/card/membercard/updateuser?access_token=DSJ-g_DErgipWWCqY-cOoicJn-UuwgFbDdZ-3AOCw4uRG6VyjlvXRKVs9lDnQo6hLjRoIlNW06i-UhJKAnmFq7T_apxgI-bpqRfv1V38PlPNe17ETBfXDjSSxQT-RSGcVYEcAKDMPV</span></span><br><span class="line">&#123;<span class="string">"record_bonus"</span>:<span class="string">"积分更新"</span>,<span class="string">"notify_optional"</span>:&#123;<span class="string">"is_notify_bonus"</span>:<span class="keyword">true</span>&#125;,<span class="string">"bonus"</span>:<span class="number">0</span>,<span class="string">"code"</span>:<span class="string">"weixin_code"</span>,<span class="string">"card_id"</span>:<span class="string">"weixin_card_id"</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">619</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">0639f</span>5184db44f8a9659428a217f930e - Response: </span><br><span class="line">==========================</span><br><span class="line"><span class="number">200</span></span><br><span class="line">&#123;<span class="string">"errcode"</span>:-<span class="number">1</span>,<span class="string">"errmsg"</span>:<span class="string">"system error hint: [7OsAaA0238e503]"</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">621</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.mgate.core.weixin.WeixinEventHandler <span class="number">0639f</span>5184db44f8a9659428a217f930e - 初始化会员test_number_1微信积分账户失败</span><br><span class="line">java.lang.Exception: 微信系统繁忙,请稍候再试(-<span class="number">1</span>, system error hint: [<span class="number">7</span>OsAaA0238e503])</span><br><span class="line"> at com.huanyu.weixin.sdk.WeixinClient.checkResult(WeixinClient.java:<span class="number">49</span>)</span><br><span class="line"> at com.huanyu.weixin.sdk.cardcode.CardCodeClient.updateScore(CardCodeClient.java:<span class="number">181</span>)</span><br><span class="line"> at com.huanyu.mgate.core.weixin.WeixinEventHandler.activateBycrmNo(WeixinEventHandler.java:<span class="number">312</span>)</span><br><span class="line"> at com.huanyu.mgate.core.weixin.WeixinEventHandler.handleActive(WeixinEventHandler.java:<span class="number">261</span>)</span><br><span class="line"> at com.huanyu.mgate.core.weixin.WeixinEventHandler.activateCard(WeixinEventHandler.java:<span class="number">195</span>)</span><br><span class="line"> at com.huanyu.mgate.core.weixin.WeixinEventHandler.handle(WeixinEventHandler.java:<span class="number">109</span>)</span><br><span class="line"> at com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher$HandleTask.run(MultiTenantEventDispatcher.java:<span class="number">264</span>)</span><br><span class="line"> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:<span class="number">1145</span>)</span><br><span class="line"> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:<span class="number">615</span>)</span><br><span class="line"> at java.lang.Thread.run(Thread.java:<span class="number">745</span>)</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">651</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">0639f</span>5184db44f8a9659428a217f930e - test, weixin 处理 com.huanyu.mgate.core.weixin.ActiveCardEvent 耗时 <span class="number">2754</span> ms</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">651</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">0639f</span>5184db44f8a9659428a217f930e - handle: test, MerchantAcceptOrder, <span class="number">402880985</span>ad4ba3c015ad50011720002, com.huanyu.mgate.core.weixin.ActiveCardEvent</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">651</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">0639f</span>5184db44f8a9659428a217f930e - handle: test, alimerchantupdate, <span class="number">402880985</span>ad4ba3c015ad50011720002, com.huanyu.mgate.core.weixin.ActiveCardEvent</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">651</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">0639f</span>5184db44f8a9659428a217f930e - handle: test, feifanMemberAsyncRegister, <span class="number">402880985</span>ad4ba3c015ad50011720002, com.huanyu.mgate.core.weixin.ActiveCardEvent</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">651</span> [pool-<span class="number">9</span>-thread-<span class="number">2</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">0639f</span>5184db44f8a9659428a217f930e - 删除事件:<span class="number">402880985</span>ad4ba3c015ad50011720002</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">线程<span class="number">3</span> 处理日志:</span><br><span class="line"></span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">57</span>,<span class="number">202</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">037e8</span>b865132482d9be1eaf104042236 - run</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">57</span>,<span class="number">203</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - handle: test, crm, <span class="number">402880985</span>ad4ba3c015ad50011720002, com.huanyu.mgate.core.weixin.ActiveCardEvent</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">57</span>,<span class="number">203</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - handle: test, alipass, <span class="number">402880985</span>ad4ba3c015ad50011720002, com.huanyu.mgate.core.weixin.ActiveCardEvent</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">57</span>,<span class="number">203</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - handle: test, weixin, <span class="number">402880985</span>ad4ba3c015ad50011720002, com.huanyu.mgate.core.weixin.ActiveCardEvent</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">57</span>,<span class="number">218</span> [DDPS-Scheduler-Thread-<span class="number">10</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher fe82751489dd4d6eb4c39c92cad9a012 - 租户 test 共找到 <span class="number">1</span> 个事件,耗时:<span class="number">16</span> ms</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">57</span>,<span class="number">219</span> [DDPS-Scheduler-Thread-<span class="number">10</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher fe82751489dd4d6eb4c39c92cad9a012 - 忽略: <span class="number">402880985</span>ad4ba3c015ad50011720002</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">57</span>,<span class="number">219</span> [DDPS-Scheduler-Thread-<span class="number">10</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher fe82751489dd4d6eb4c39c92cad9a012 - 跳过当前页,时间片+<span class="number">1</span></span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">57</span>,<span class="number">219</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - Request:</span><br><span class="line">==========================</span><br><span class="line">POST https:<span class="comment">//api.weixin.qq.com/card/membercard/userinfo/get?access_token=DSJ-g_DErgipWWCqY-cOoicJn-UuwgFbDdZ-3AOCw4uRG6VyjlvXRKVs9lDnQo6hLjRoIlNW06i-UhJKAnmFq7T_apxgI-bpqRfv1V38PlPNe17ETBfXDjSSxQT-RSGcVYEcAKDMPV</span></span><br><span class="line">&#123;<span class="string">"code"</span>:<span class="string">"weixin_code"</span>,<span class="string">"card_id"</span>:<span class="string">"weixin_card_id"</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">57</span>,<span class="number">221</span> [DDPS-Scheduler-Thread-<span class="number">10</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher fe82751489dd4d6eb4c39c92cad9a012 - 租户 test 共找到 <span class="number">0</span> 个事件,耗时:<span class="number">2</span> ms</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">57</span>,<span class="number">344</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - Response: </span><br><span class="line">==========================</span><br><span class="line"><span class="number">200</span></span><br><span class="line">&#123;<span class="string">"errcode"</span>:<span class="number">0</span>,<span class="string">"errmsg"</span>:<span class="string">"ok"</span>,<span class="string">"openid"</span>:<span class="string">"weixin_open_id"</span>,<span class="string">"nickname"</span>:<span class="string">"nick_name"</span>,<span class="string">"membership_number"</span>:<span class="string">"weixin_code"</span>,<span class="string">"bonus"</span>:<span class="number">0</span>,<span class="string">"sex"</span>:<span class="string">"MALE"</span>,<span class="string">"user_info"</span>:&#123;<span class="string">"common_field_list"</span>:[&#123;<span class="string">"name"</span>:<span class="string">"USER_FORM_INFO_FLAG_MOBILE"</span>,<span class="string">"value"</span>:<span class="string">"12345678901"</span>,<span class="string">"value_list"</span>:[]&#125;],<span class="string">"custom_field_list"</span>:[]&#125;,<span class="string">"user_card_status"</span>:<span class="string">"NORMAL"</span>,<span class="string">"has_active"</span>:<span class="keyword">true</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">57</span>,<span class="number">421</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.weixin.sdk.http.HttpClient <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - Request:</span><br><span class="line">==========================</span><br><span class="line">GET http:<span class="comment">//dly-bl.jcrm.test.hd123.cn:9080/jcrm-server-card/rest/mbr/getByMobileNum/12345678901</span></span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">57</span>,<span class="number">464</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.weixin.sdk.http.HttpClient <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - Response: </span><br><span class="line">==========================</span><br><span class="line"><span class="number">200</span></span><br><span class="line">&#123;</span><br><span class="line"> <span class="string">"errorCode"</span> : <span class="number">0</span>,</span><br><span class="line"> <span class="string">"message"</span> : <span class="string">"ok"</span></span><br><span class="line">&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">57</span>,<span class="number">477</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.mgate.core.weixin.WeixinEventHandler <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - 推送给crm:test, json_data</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">384</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.mgate.core.weixin.WeixinEventHandler <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - 绑定会员,租户: test, 会员ID: <span class="number">89638865</span>b0474a9cb5db3aea1b9bd839, 线下会员号: test_number_2</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">403</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - Request:</span><br><span class="line">==========================</span><br><span class="line">POST https:<span class="comment">//api.weixin.qq.com/card/code/get?access_token=DSJ-g_DErgipWWCqY-cOoicJn-UuwgFbDdZ-3AOCw4uRG6VyjlvXRKVs9lDnQo6hLjRoIlNW06i-UhJKAnmFq7T_apxgI-bpqRfv1V38PlPNe17ETBfXDjSSxQT-RSGcVYEcAKDMPV</span></span><br><span class="line">&#123;<span class="string">"check_consume"</span>:<span class="keyword">false</span>,<span class="string">"code"</span>:<span class="string">"weixin_code"</span>,<span class="string">"card_id"</span>:<span class="string">"weixin_card_id"</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">482</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - Response: </span><br><span class="line">==========================</span><br><span class="line"><span class="number">200</span></span><br><span class="line">&#123;<span class="string">"errcode"</span>:<span class="number">0</span>,<span class="string">"errmsg"</span>:<span class="string">"ok"</span>,<span class="string">"card"</span>:&#123;<span class="string">"card_id"</span>:<span class="string">"weixin_card_id"</span>,<span class="string">"begin_time"</span>:<span class="number">0</span>,<span class="string">"end_time"</span>:<span class="number">4294967295</span>,<span class="string">"bonus"</span>:<span class="number">0</span>,<span class="string">"code"</span>:<span class="string">"weixin_code"</span>,<span class="string">"membership_number"</span>:<span class="string">"test_number_1"</span>&#125;,<span class="string">"openid"</span>:<span class="string">"weixin_open_id"</span>,<span class="string">"can_consume"</span>:<span class="keyword">true</span>,<span class="string">"user_card_status"</span>:<span class="string">"NORMAL"</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">483</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.mgate.core.weixin.WeixinEventHandler <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - 激活微信会员卡,租户: test, 卡号: weixin_code</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">483</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - Request:</span><br><span class="line">==========================</span><br><span class="line">POST https:<span class="comment">//api.weixin.qq.com/card/membercard/activate?access_token=DSJ-g_DErgipWWCqY-cOoicJn-UuwgFbDdZ-3AOCw4uRG6VyjlvXRKVs9lDnQo6hLjRoIlNW06i-UhJKAnmFq7T_apxgI-bpqRfv1V38PlPNe17ETBfXDjSSxQT-RSGcVYEcAKDMPV</span></span><br><span class="line">&#123;<span class="string">"membership_number"</span>:<span class="string">"test_number_2"</span>,<span class="string">"code"</span>:<span class="string">"weixin_code"</span>,<span class="string">"card_id"</span>:<span class="string">"weixin_card_id"</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">617</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - Response: </span><br><span class="line">==========================</span><br><span class="line"><span class="number">200</span></span><br><span class="line">&#123;<span class="string">"errcode"</span>:<span class="number">0</span>,<span class="string">"errmsg"</span>:<span class="string">"ok"</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">618</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.mgate.core.PublishServiceImpl <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - mgate-crmService-queryAccount:租户Id:test,查询类型:crm_mbr_id,查询码:test_number_2</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">733</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] WARN com.huanyu.mgate.core.weixin.WeixinEventHandler <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - 初始化会员weixin_code微信积分账户,积分数:<span class="number">0.00</span></span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">734</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - Request:</span><br><span class="line">==========================</span><br><span class="line">POST https:<span class="comment">//api.weixin.qq.com/card/membercard/updateuser?access_token=DSJ-g_DErgipWWCqY-cOoicJn-UuwgFbDdZ-3AOCw4uRG6VyjlvXRKVs9lDnQo6hLjRoIlNW06i-UhJKAnmFq7T_apxgI-bpqRfv1V38PlPNe17ETBfXDjSSxQT-RSGcVYEcAKDMPV</span></span><br><span class="line">&#123;<span class="string">"record_bonus"</span>:<span class="string">"积分更新"</span>,<span class="string">"notify_optional"</span>:&#123;<span class="string">"is_notify_bonus"</span>:<span class="keyword">true</span>&#125;,<span class="string">"bonus"</span>:<span class="number">0</span>,<span class="string">"code"</span>:<span class="string">"weixin_code"</span>,<span class="string">"card_id"</span>:<span class="string">"weixin_card_id"</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">850</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.weixin.sdk.http.HttpsClient <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - Response: </span><br><span class="line">==========================</span><br><span class="line"><span class="number">200</span></span><br><span class="line">&#123;<span class="string">"errcode"</span>:<span class="number">0</span>,<span class="string">"errmsg"</span>:<span class="string">"ok"</span>,<span class="string">"result_bonus"</span>:<span class="number">0</span>,<span class="string">"result_balance"</span>:<span class="number">0</span>,<span class="string">"openid"</span>:<span class="string">"weixin_open_id"</span>&#125;</span><br><span class="line">==========================</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">879</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - test, weixin 处理 com.huanyu.mgate.core.weixin.ActiveCardEvent 耗时 <span class="number">1676</span> ms</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">879</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - handle: test, MerchantAcceptOrder, <span class="number">402880985</span>ad4ba3c015ad50011720002, com.huanyu.mgate.core.weixin.ActiveCardEvent</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">879</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - handle: test, alimerchantupdate, <span class="number">402880985</span>ad4ba3c015ad50011720002, com.huanyu.mgate.core.weixin.ActiveCardEvent</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">879</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - handle: test, feifanMemberAsyncRegister, <span class="number">402880985</span>ad4ba3c015ad50011720002, com.huanyu.mgate.core.weixin.ActiveCardEvent</span><br><span class="line"><span class="number">2016</span>-<span class="number">12</span>-<span class="number">23</span> <span class="number">10</span>:<span class="number">43</span>:<span class="number">58</span>,<span class="number">880</span> [pool-<span class="number">9</span>-thread-<span class="number">3</span>] INFO com.huanyu.multitenant.cqrs.event.MultiTenantEventDispatcher <span class="number">6969</span>ef8818c34b34aeb86ea755f21e52 - 删除事件:<span class="number">402880985</span>ad4ba3c015ad50011720002</span><br></pre></td></tr></table></figure>
<ol>
<li>分析日志<br>由上述日志分析可见,数据库事件:402880985ad4ba3c015ad50011720002 经由多租户事件分发器:MultiTenantEventDispatcher 分发给多个事件监听处理器时,<br>并发产生了两个线程(线程:pool-9-thread-3 和 线程:pool-9-thread-2)同时处理一个事件,业务关键在于 <code>推送给crm:test, json_data</code> 这一处,这里将<br>导致将本系统同一份会员数据(同一个会员数据并发同步推送给crm系统)并发同步给crm系统,导致crm系统产生了两个会员(test_number_1 和 test_number_2)。</li>
<li>为了解决这种并发场景下的问题产生,需要给同步crm系统这块添加同步互斥锁,因为这是事件处理,性能可以适当降低要求,因此,使用 synchronized 来控制并发。</li>
</ol>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><p><a href="http://blog.csdn.net/escaflone/article/details/10418651" target="_blank" rel="external">Java 多线程 并发编程</a></p>
<p><a href="http://www.cnblogs.com/yshb/archive/2012/06/15/2550367.html" target="_blank" rel="external">JAVA多线程与并发学习总结</a></p>
<p><a href="http://blog.csdn.net/zly9923218/article/details/51330995" target="_blank" rel="external">SQL 索引最左前缀原理</a></p>
<p><a href="http://www.kancloud.cn/kancloud/theory-of-mysql-index/41857" target="_blank" rel="external">MySQL索引背后的数据结构及算法原理-最左前缀原理与相关优化</a></p>
<p><a href="https://yq.aliyun.com/articles/38328" target="_blank" rel="external">数据库索引的实现原理及查询优化</a></p>
<p><a href="http://www.cnblogs.com/petitprince/archive/2010/11/23/1885994.html" target="_blank" rel="external">50种方法优化SQL Server</a></p>
</content>
<summary type="html">
多线程并发处理总结
</summary>
<category term="多线程" scheme="http://aresLove.github.io/categories/%E5%A4%9A%E7%BA%BF%E7%A8%8B/"/>
<category term="java" scheme="http://aresLove.github.io/tags/java/"/>
<category term="多线程" scheme="http://aresLove.github.io/tags/%E5%A4%9A%E7%BA%BF%E7%A8%8B/"/>
<category term="并发" scheme="http://aresLove.github.io/tags/%E5%B9%B6%E5%8F%91/"/>
</entry>
<entry>
<title>前端资料整理</title>
<link href="http://aresLove.github.io/%E5%89%8D%E7%AB%AF/%E5%89%8D%E7%AB%AF%E6%8A%80%E5%B7%A7%E5%BD%92%E7%BA%B3%E6%80%BB%E7%BB%93/"/>
<id>http://aresLove.github.io/前端/前端技巧归纳总结/</id>
<published>2017-03-16T14:43:15.168Z</published>
<updated>2017-03-16T14:43:15.168Z</updated>
<content type="html"><h2 id="常用资源"><a href="#常用资源" class="headerlink" title="常用资源"></a>常用资源</h2><ol>
<li><a href="https://www.awesomes.cn/" target="_blank" rel="external">前端资源库</a></li>
<li><a href="http://www.iconfont.cn" target="_blank" rel="external">阿里巴巴矢量图标库</a></li>
<li><a href="http://www.bootcdn.cn/" target="_blank" rel="external">BootCDN 稳定、快速、免费的前端开源项目 CDN 服务</a></li>
<li><a href="http://js1k.com/" target="_blank" rel="external">JS1k: The JavaScript code golfing competition</a></li>
<li><a href="http://bonsaiden.github.io/JavaScript-Garden/zh/" target="_blank" rel="external">javascript秘密花园</a></li>
<li><a href="https://css-tricks.com/" target="_blank" rel="external">css-tricks</a></li>
<li><a href="https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS" target="_blank" rel="external">CSS 开发者指南</a></li>
<li><a href="https://www.w3.org/TR/css-flexbox-1/" target="_blank" rel="external">css-flexbox</a></li>
<li><a href="https://uptodate.frontendrescue.org/zh/" target="_blank" rel="external">如何跟上前端开发的最新前沿</a></li>
<li><a href="https://github.com/qiu-deqing/FE-learnin" target="_blank" rel="external">FE-learning</a></li>
<li><a href="https://blog.thankbabe.com/collection/" target="_blank" rel="external">资源收集</a></li>
<li><a href="http://efe.baidu.com/" target="_blank" rel="external">前端代码质量一站式解决方案</a></li>
<li><a href="https://github.com/markyun/My-blog/tree/master/Front-end-Developer-Questions/Questions-and-Answers" target="_blank" rel="external">Front-end-Developer-Questions</a></li>
</ol>
<h2 id="子元素浮动时无法撑开父元素"><a href="#子元素浮动时无法撑开父元素" class="headerlink" title="子元素浮动时无法撑开父元素"></a>子元素浮动时无法撑开父元素</h2><ul>
<li>使用 css 样式解决<figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="class">.parent</span><span class="rules">&#123;</span><br><span class="line"> <span class="rule"><span class="attribute">overflow</span>:<span class="value"> hidden</span></span>;</span><br><span class="line">&#125;</span></span><br><span class="line"></span><br><span class="line"><span class="class">.child</span><span class="rules">&#123;</span><br><span class="line"> <span class="rule"><span class="attribute">float</span>:<span class="value"> left</span></span>;</span><br><span class="line">&#125;</span></span><br></pre></td></tr></table></figure>
</li>
</ul>
<h2 id="div-遇顶吸顶效果"><a href="#div-遇顶吸顶效果" class="headerlink" title="div 遇顶吸顶效果"></a>div 遇顶吸顶效果</h2><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="title">script</span> <span class="attribute">src</span>=<span class="value">"//cdn.bootcss.com/jquery/3.1.0/jquery.min.js"</span>&gt;</span><span class="undefined"></span><span class="tag">&lt;/<span class="title">script</span>&gt;</span></span><br></pre></td></tr></table></figure>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line">$.fn.smartFloat = <span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</span><br><span class="line"> <span class="keyword">var</span> position = <span class="function"><span class="keyword">function</span> (<span class="params">element</span>) </span>&#123;</span><br><span class="line"> <span class="keyword">var</span> top = element.position().top, pos = element.css(<span class="string">"position"</span>);</span><br><span class="line"> $(<span class="built_in">window</span>).scroll(<span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</span><br><span class="line"> <span class="keyword">var</span> scrolls = $(<span class="keyword">this</span>).scrollTop();</span><br><span class="line"> <span class="keyword">if</span> (scrolls &gt; top) &#123;</span><br><span class="line"> <span class="keyword">if</span> (<span class="built_in">window</span>.XMLHttpRequest) &#123;</span><br><span class="line"> element.css(&#123;</span><br><span class="line"> position: <span class="string">"fixed"</span>,</span><br><span class="line"> top: <span class="number">0</span></span><br><span class="line"> &#125;);</span><br><span class="line"> &#125; <span class="keyword">else</span> &#123;</span><br><span class="line"> element.css(&#123;</span><br><span class="line"> top: scrolls</span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;</span><br><span class="line"> &#125; <span class="keyword">else</span> &#123;</span><br><span class="line"> element.css(&#123;</span><br><span class="line"> position: pos,</span><br><span class="line"> top: top</span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;;</span><br><span class="line"> <span class="keyword">return</span> $(<span class="keyword">this</span>).each(<span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</span><br><span class="line"> position($(<span class="keyword">this</span>));</span><br><span class="line"> &#125;);</span><br><span class="line"> &#125;;</span><br><span class="line"></span><br><span class="line">$(<span class="string">"#score_detail"</span>).smartFloat();</span><br></pre></td></tr></table></figure>
<h2 id="侧边拉出菜单效果,实现明细详情展示"><a href="#侧边拉出菜单效果,实现明细详情展示" class="headerlink" title="侧边拉出菜单效果,实现明细详情展示"></a>侧边拉出菜单效果,实现明细详情展示</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">openDetail</span>(<span class="params">name, time, collectType, multiple, multiRules, exType, useType, useRemark</span>) </span>&#123;</span><br><span class="line"> (<span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</span><br><span class="line"> <span class="keyword">var</span> parent = <span class="built_in">document</span>.getElementById(<span class="string">"content"</span>);</span><br><span class="line"> <span class="keyword">while</span> (parent.firstChild) &#123;</span><br><span class="line"> parent.removeChild(parent.firstChild);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">var</span> detail_name = <span class="built_in">document</span>.createElement(<span class="string">'h3'</span>);</span><br><span class="line"> detail_name.setAttribute(<span class="string">"class"</span>, <span class="string">"detail_name"</span>);</span><br><span class="line"> detail_name.innerHTML = name;</span><br><span class="line"> parent.insertBefore(detail_name, parent.lastChild);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">var</span> detail_time = <span class="built_in">document</span>.createElement(<span class="string">'div'</span>);</span><br><span class="line"> detail_time.innerHTML = <span class="string">"&lt;h5&gt;时间&lt;/h5&gt;&lt;p&gt;"</span> + time + <span class="string">"&lt;/p&gt;"</span>;</span><br><span class="line"> parent.insertBefore(detail_time, parent.lastChild.nextSibling);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">if</span> (multiple) &#123;</span><br><span class="line"> <span class="keyword">var</span> exchange = <span class="built_in">document</span>.createElement(<span class="string">'div'</span>);</span><br><span class="line"> exchange.innerHTML = <span class="string">"&lt;h5&gt;兑换&lt;/h5&gt;&lt;p&gt;"</span> + multiRules + <span class="string">"&lt;/p&gt;"</span>;</span><br><span class="line"> parent.insertBefore(exchange, parent.lastChild.nextSibling);</span><br><span class="line"></span><br><span class="line"> &#125; <span class="keyword">else</span> &#123;</span><br><span class="line"> <span class="keyword">var</span> exchange = <span class="built_in">document</span>.createElement(<span class="string">'div'</span>);</span><br><span class="line"> exchange.innerHTML = <span class="string">"&lt;h5&gt;兑换&lt;/h5&gt;&lt;p&gt;"</span> + exType + <span class="string">"&lt;/p&gt;"</span>;</span><br><span class="line"> parent.insertBefore(exchange, parent.lastChild.nextSibling);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">var</span> use = <span class="built_in">document</span>.createElement(<span class="string">'div'</span>);</span><br><span class="line"> use.innerHTML = <span class="string">"&lt;h5&gt;使用方式&lt;/h5&gt;&lt;p&gt;"</span> + useType + <span class="string">"&lt;/p&gt;"</span>;</span><br><span class="line"> parent.insertBefore(use, parent.lastChild.nextSibling);</span><br><span class="line"></span><br><span class="line"> <span class="keyword">var</span> remark = <span class="built_in">document</span>.createElement(<span class="string">'div'</span>);</span><br><span class="line"> remark.innerHTML = <span class="string">"&lt;h5&gt;说明&lt;/h5&gt;&lt;p&gt;"</span> + useRemark + <span class="string">"&lt;/p&gt;"</span>;</span><br><span class="line"> parent.insertBefore(remark, parent.lastChild.nextSibling);</span><br><span class="line"></span><br><span class="line"> &#125;</span><br><span class="line"> &#125;)();</span><br><span class="line"></span><br><span class="line"> <span class="keyword">var</span> API = $(<span class="string">"#detail"</span>).data(<span class="string">"mmenu"</span>);</span><br><span class="line"> API.open();</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">$(<span class="built_in">document</span>).ready(<span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</span><br><span class="line"> $(<span class="string">"#detail"</span>).mmenu(&#123;</span><br><span class="line"> <span class="string">"slidingSubmenus"</span>: <span class="literal">false</span>,</span><br><span class="line"> <span class="string">"extensions"</span>: [</span><br><span class="line"> <span class="string">"pagedim-black"</span>,</span><br><span class="line"> <span class="string">"effect-menu-zoom"</span>,</span><br><span class="line"> <span class="string">"effect-panels-zoom"</span>,</span><br><span class="line"> <span class="string">"effect-listitems-slide"</span>,</span><br><span class="line"> <span class="string">"multiline"</span>,</span><br><span class="line"> <span class="string">"theme-white"</span>,</span><br><span class="line"> <span class="string">"widescreen"</span></span><br><span class="line"> ],</span><br><span class="line"> <span class="string">"offCanvas"</span>: &#123;</span><br><span class="line"> <span class="string">"position"</span>: <span class="string">"right"</span>,</span><br><span class="line"> <span class="string">"zposition"</span>: <span class="string">"back"</span></span><br><span class="line"> &#125;,</span><br><span class="line"> <span class="string">"scrollBugFix"</span>: &#123;</span><br><span class="line"> <span class="string">"fix"</span>: <span class="literal">true</span></span><br><span class="line"> &#125;</span><br><span class="line"> &#125;);</span><br><span class="line">&#125;);</span><br></pre></td></tr></table></figure>
<h2 id="前端(手机端)适配方案"><a href="#前端(手机端)适配方案" class="headerlink" title="前端(手机端)适配方案"></a>前端(手机端)适配方案</h2><ul>
<li>采用 javascrpipt 直接适配,代码如下:</li>
</ul>
<figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">(<span class="function"><span class="keyword">function</span> (<span class="params">doc, win</span>) </span>&#123;</span><br><span class="line"> <span class="keyword">var</span> docEl = doc.documentElement,</span><br><span class="line"> resizeEvt = <span class="string">'orientationchange'</span> <span class="keyword">in</span> <span class="built_in">window</span> ? <span class="string">'orientationchange'</span> : <span class="string">'resize'</span>,</span><br><span class="line"> recalc = <span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</span><br><span class="line"> <span class="keyword">var</span> clientWidth = docEl.clientWidth;</span><br><span class="line"> <span class="keyword">if</span> (!clientWidth) <span class="keyword">return</span>;</span><br><span class="line"> docEl.style.fontSize = <span class="number">100</span> * (clientWidth / <span class="number">750</span>) / <span class="number">3.4</span> + <span class="string">'px'</span>;</span><br><span class="line"> &#125;;</span><br><span class="line"> <span class="keyword">if</span> (!doc.addEventListener) <span class="keyword">return</span>;</span><br><span class="line"> win.addEventListener(resizeEvt, recalc, <span class="literal">false</span>);</span><br><span class="line"> doc.addEventListener(<span class="string">'DOMContentLoaded'</span>, recalc, <span class="literal">false</span>);</span><br><span class="line">&#125;)(<span class="built_in">document</span>, <span class="built_in">window</span>);</span><br></pre></td></tr></table></figure>
<h2 id="纯-css-实现边框效果"><a href="#纯-css-实现边框效果" class="headerlink" title="纯 css 实现边框效果"></a>纯 css 实现边框效果</h2><h2 id="前端跨域-前端跨域请求原理及实践"><a href="#前端跨域-前端跨域请求原理及实践" class="headerlink" title="前端跨域 前端跨域请求原理及实践"></a>前端跨域 <a href="http://tingandpeng.com/2016/09/05/前端跨域请求原理及实践/" target="_blank" rel="external">前端跨域请求原理及实践</a></h2><h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><p><a href="https://isux.tencent.com/web-app-rem.html" target="_blank" rel="external">web app变革之rem</a></p>
<p><a href="https://segmentfault.com/a/1190000003690140" target="_blank" rel="external">关于移动端 rem 布局的一些总结</a></p>
<p><a href="http://www.cnblogs.com/well-nice/p/5509589.html" target="_blank" rel="external">(淘宝无限适配)手机端rem布局详解(转载非原创)</a></p>
<p><a href="https://zhuanlan.zhihu.com/p/23837333" target="_blank" rel="external">移动适配的几种方式</a></p>
<p><a href="http://azq.space/blog/bigcan-lesson-1/" target="_blank" rel="external">移动端适配方法合集</a></p>
<p><a href="http://blog.sina.com.cn/s/blog_6620bae00102vw53.html" target="_blank" rel="external">div随页面滚动遇顶固定的两种方法(智能浮动层)</a></p>
<p><a href="http://www.flexboxpatterns.com/home" target="_blank" rel="external">flexboxpatterns </a></p>
</content>
<summary type="html">
前端技巧归纳总结
</summary>
<category term="前端" scheme="http://aresLove.github.io/categories/%E5%89%8D%E7%AB%AF/"/>
<category term="前端" scheme="http://aresLove.github.io/tags/%E5%89%8D%E7%AB%AF/"/>
<category term="前端技巧" scheme="http://aresLove.github.io/tags/%E5%89%8D%E7%AB%AF%E6%8A%80%E5%B7%A7/"/>
<category term="前端适配" scheme="http://aresLove.github.io/tags/%E5%89%8D%E7%AB%AF%E9%80%82%E9%85%8D/"/>
</entry>
<entry>
<title>分布式框架 Dubbox 学习</title>
<link href="http://aresLove.github.io/java/%E5%88%86%E5%B8%83%E5%BC%8F%E6%A1%86%E6%9E%B6-Dubbox%E5%AD%A6%E4%B9%A0/"/>
<id>http://aresLove.github.io/java/分布式框架-Dubbox学习/</id>
<published>2017-02-19T09:34:19.575Z</published>
<updated>2017-02-19T09:34:19.575Z</updated>
<content type="html"></content>
<summary type="html">
java
</summary>
<category term="java" scheme="http://aresLove.github.io/categories/java/"/>
<category term="SOA" scheme="http://aresLove.github.io/tags/SOA/"/>
<category term="java" scheme="http://aresLove.github.io/tags/java/"/>
<category term="后端" scheme="http://aresLove.github.io/tags/%E5%90%8E%E7%AB%AF/"/>
<category term="框架学习" scheme="http://aresLove.github.io/tags/%E6%A1%86%E6%9E%B6%E5%AD%A6%E4%B9%A0/"/>
</entry>
<entry>
<title>java 基础</title>
<link href="http://aresLove.github.io/java/java%E5%9F%BA%E7%A1%80/"/>
<id>http://aresLove.github.io/java/java基础/</id>
<published>2017-02-19T09:34:19.574Z</published>
<updated>2017-02-19T09:34:19.574Z</updated>
<content type="html"><h1 id="java基础学习笔记"><a href="#java基础学习笔记" class="headerlink" title="java基础学习笔记"></a>java基础学习笔记</h1><h2 id="基础知识"><a href="#基础知识" class="headerlink" title="基础知识"></a>基础知识</h2><p>1.java的可移植性原理:依赖不同平台的jvm,所有的源代码(<em>.java)经过 javac 编译成字节码文件(</em>.class)就可以在不同平台的 JVM 上解释执行。<br>2.public class 和 class 的区别:一个java文件只能有一个 public 声明的 class ,并且该类名和文件名称相同,可以同时存在多个 class 类,经过编译生成多个 <em>.class 文件,执行的时候一定要执行已经生成的 </em>.class 文件。<br>3.java 数据类型的划分:8 个基本数据类型{boolean,char,byte,short,int,long,float,double}、3 个引用数据类型{class,interface,array}<br>4.方法:一段可以重复调用的代码段。方法的重载:根据方法的签名来判断方法重载。方法签名:参数个数和参数类型、参数顺序。<br>5.数组:数组是引用数据类型,所以一定要划分出内存:栈和堆两块内存。数组的声明定义、初始化和简单操作,jdk 提供的相关操作方法:java.util.Array.sort(数组名称)、System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)数组拷贝。<br>6.length、length()、size():length是数组的一个属性,length()是字符串的一个方法,size()是泛型集合的一个方法。<br>7.JDK、JRE、JVM三者间的关系:<a href="http://playkid.blog.163.com/blog/static/56287260201372113842153/" target="_blank" rel="external">金字塔结构 JDK=JRE+JVM+Java程序</a></p>
<h2 id="面向对象基础"><a href="#面向对象基础" class="headerlink" title="面向对象基础"></a>面向对象基础</h2><p>1.类和对象的概念:类是共性的抽象描述,对象是类的具体表现。<br>2.面向对象的三大特性:封装、继承、多态。<br>3.构造方法:构造方法的主要作用就是为对象的属性初始化,默认会为类创建一个无参构造方法,一旦手动创建非无参构造方法,则不会再创建默认的无参构造方法,这时需要手动创建无参构造方法。<br>4.匿名对象:没有对应的栈内存空间,仅使用一次就等待被垃圾回收。<br>5.String类:<br> 1).变量的初始化的两种方式{直接赋值、调用构造方法 new String(“字符串”)}.</p>
<pre><code>直接赋值会开辟一个栈内存空间,如果在字符串常量池中不存在该字符串引用地址,
则将会开辟一个堆内存空间创建该字符串对象并返回该字符串引用地址存放到字符串常量池(在本地方法栈中)中并使得引用变量指向他,而且以后若有相同的内容将不再创建
字符串对象及字符串常量池引用而是直接将引用变量指向常量池中的该字符串的引用,但使用构造方法,则会开辟三个或两个内存空间,一个栈内存空间和两个或一个堆内存空间,使用构造
方法的形式创建的对象将直接放置到堆中,每调用一次就会创建一个新的对象,而构造方法的参数也是一个string对象,该字符串也是需要在堆内存中创建存储的,若已存在则可不需要创建。
&lt;strong style=&quot;color:red;&quot;&gt;因此,直接赋值方式可能会只创建一个栈内存空间(所创建的字符串对象的引用在常量池中已经存在),也可能创建三个内存空间(一个栈内存空间、一个字符串常量池栈空间(方法栈空间)
和一个堆内存空间),但构造方法的方式肯定是创建两个或三个内存空间(一个栈内存空间和一个或两个堆内存空间)。&lt;/strong&gt;
String s = new String(&quot;abc&quot;); 创建了几个对象的问题:
当 “abc” 在 字符串常量池中已经存在的时候,创建了 一个 对象, 是在构造方法返回的时候创建的;
当 “abc” 在 字符串常量池中不存在的时候, 创建了 两个 对象, 一个是在构造方法返回的时候创建的,另一个是 创建 字符串 &quot;abc&quot; 的,因为 new String() 这个构造方法的参数 也是一个字符串。
String s = &quot;abc&quot;; 和 String s = &quot;ab&quot; + &quot;cd&quot;;
都只创建了一个对象,因为这种方式在编译期 s 的值 就已经确定了,常量的值 在 编译期 就已经确定了, 而 只有使用引号包含的文本方式创建的String对象之间使用 “+” 连接产生的新对象才会被加入字符串常量池中。
对于 String s = &quot;abc&quot;; 就是创建的 “abc” 这一个 对象,
对于 String s = &quot;ab&quot; + &quot;cd&quot;; 其实质 就相当于 String s = &quot;abcd&quot;; 同理,String s = &quot;a&quot; + “b” + &quot;c&quot; + &quot;d&quot;; 也只创建了一个对象。
</code></pre><p> 参考资料:<br> <a href="http://ask.csdn.net/questions/197451" target="_blank" rel="external">java中String类两种初始化的区别</a>、<a href="http://blog.csdn.net/Henry_YQH/article/details/8619098" target="_blank" rel="external">Java中两种字符串初始化方法的区别</a>、<br> <a href="http://www.cnblogs.com/Cratical/archive/2012/08/21/2649985.html" target="_blank" rel="external">Java虚拟机 运行时数据区</a>、<a href="http://www.cnblogs.com/iyangyuan/p/4631696.html" target="_blank" rel="external">触摸java常量池</a></p>
<p> 2).Java中的String为什么是不可变的. </p>
<pre><code>在Java中String类其实就是对字符数组的封装,而String类的变量都是 private final ,外部不能修改,这样就是,String变量一旦初始化就不能修改;而String类提供了一些修改替换等方法其实质是返回了新的String对象并赋值。
但是可以通过反射的机制来改变String对象的值,因为String类的 value 属性 是char 类型数组的引用,可以通过反射获取 String的 value 字段并改变他的访问权限,然后获取value的值在进行改变,这样是可以达到目标的。
</code></pre><p> 参考资料:<br> <a href="http://blog.csdn.net/zhangjg_blog/article/details/18319521" target="_blank" rel="external">Java中的String为什么是不可变的? – String源码分析</a>、<a href="http://www.importnew.com/16817.html" target="_blank" rel="external">Java中的String为什么是不可变的? — String源码分析</a></p>
<p> 3).== 和 equals() 的区别:</p>
<pre><code>== 是值比较, equals 是引用比较。 == 对于基本数据类型来说就是比较他们的值,而对于引用数据类型来说是比较他们存放的引用地址;equals是用于引用类型的值比较。
值得注意的是:
&lt;strong style=&quot;color:red;&quot;&gt;在Java中,Object对象的equals方法默认使用了= =操作符,所以如果你自创的类没有覆盖equals方法,那你的类使用equals和使用==会得到同样的结果。&lt;/strong&gt;
</code></pre><p> 参考资料:<br> <a href="http://www.cnblogs.com/zhxhdean/archive/2011/03/25/1995431.html" target="_blank" rel="external">Java中equals和==的区别</a>、<a href="http://www.importnew.com/6804.html" target="_blank" rel="external">equals与”==”的区别</a></p>
<p> 4).string类的相关方法使用:</p>
<pre><code>|- 与字符相关:toCharArray()、charAt(int ind)、new String(char c[])、new String(char c[],int offset,int length)
|- 与字节相关:getBytes()、new String(byte b[])、new String(byte b[],int offset,int length)
|- 拆份:public String[] split(String regex)
|- 替换:public String replaceAll(String org,String newc)、public String replaceFirst(String org,String newc)
|- 截取:public String substring(int offset,int length) 、public String substring(int offset)
|- 其他操作:length()、toUpperCase()、toLowerCase()、trim()、equalsIgnoreCase()、
</code></pre><p>6.java中关于 值传递 和 引用传递的争论:“《Core Java》的作者,以及JAVA的创造者James Gosling都认为当一个对象或引用类型变量被当作参数传递时,也是值传递”<br>参见:<a href="http://www.cnblogs.com/xiaoQLu/archive/2013/04/10/3011561.html" target="_blank" rel="external">Java值传递和引用传递之我见</a>、<a href="https://www.zhihu.com/question/31203609" target="_blank" rel="external">java到底是值传递还是引用传递?</a><br><a href="https://www.zhihu.com/question/20628016" target="_blank" rel="external">为什么 Java 只有值传递,但 C# 既有值传递,又有引用传递,这种语言设计有哪些好处?</a><br>7.static、this关键字:</p>
<p> static关键字:</p>
<pre><code>static所修饰的方法、字段、初始化块等是属于类本身的而不是对象实例,“static的真正作用是用于就是用于区分Field、方法、内部类、初始化块这四种成员到底属于类本身还是属于实例。”
</code></pre><p> this关键字:</p>
<pre><code>1)Java提供了一个this关键字,this关键字总是指向调用该方法的对象。
根据this出现位置的不同,有两种情形:
(1)在构造器中引用该构造器正在初始化的对象;
(2)在方法中引用调用该方法的对象。
2)this关键字最大的作用就是让类中一个方法,访问该类里的另一方法或Field。
3)this可以代表任何对象,当this出现在某个方法体中时,它所代表的对象是不确定的,但是它的类型是确定的,它所代表的对象只能是当前类;只有当这个方法被调用时,它所代表的对象才被确定下来:谁调用这个方法,this就代表谁。
4)static修饰的方法可以直接使用类来调用方法。如果在static修饰的方法中使用this关键字,则这个关键字就无法指向合适的对象。所以,static修饰的方法中不能使用this引用。
</code></pre><p>参见:<a href="http://www.cnblogs.com/EvanLiu/archive/2013/06/05/3118420.html" target="_blank" rel="external">Java笔记:static、this关键字</a></p>
<ol>
<li><p>类的初始化过程(执行顺序):</p>
<p>在不涉及继承关系的时候的执行顺序:</p>
<p> (静态变量、惊天初始化块)&gt;(变量、初始化块)&gt;构造器</p>
<p>在设计有继承关系时候的执行顺序:</p>
<p> (父类静态变量、静态初始化块)&gt;(子类静态变量、静态初始化块)&gt;(父类变量、初始化块)&gt; 父类构造器 &gt;(子类变量、子类初始化块)&gt; 子类构造器<br> <strong>并不是父类完全初始化结束才进行子类初始化,而是子类的静态变量和静态初始化块在父类变量和初始化块之前初始化。而(静态)变量和(静态)初始化块之间的顺序是由他们在类声明时出现的先后顺序决定</strong></p>
</li>
</ol>
<p>9.内部类:是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。</p>
<pre><code>Java中非静态内部类对象的创建要依赖其外部类对象
即:
new Outer().new Inner();
</code></pre><p>使用内部类的原因:使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。</p>
<p>下述摘自<a href="http://www.cnblogs.com/chenssy/p/3388487.html" target="_blank" rel="external">java提高篇(八)—-详解内部类</a></p>
<pre><code>其实使用内部类最大的优点就在于它能够非常好的解决多重继承的问题,但是如果我们不需要解决多重继承问题,那么我们自然可以使用其他的编码方式,但是使用内部类还能够为我们带来如下特性(摘自《Think in java》):
1、内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。
2、在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。
3、创建内部类对象的时刻并不依赖于外围类对象的创建。
4、内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。
5、内部类提供了更好的封装,除了该外围类,其他类都不能访问。
当我们在创建一个内部类的时候,它无形中就与外围类有了一种联系,依赖于这种联系,它可以无限制地访问外围类的元素。
</code></pre><figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">OuterClass</span> </span>&#123;</span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">void</span> <span class="title">display</span><span class="params">()</span></span>&#123;</span><br><span class="line"> System.out.println(<span class="string">"OuterClass..."</span>);</span><br><span class="line"> &#125;</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">InnerClass</span></span>&#123;</span><br><span class="line"> <span class="function"><span class="keyword">public</span> OuterClass <span class="title">getOuterClass</span><span class="params">()</span></span>&#123;</span><br><span class="line"> <span class="keyword">return</span> OuterClass.<span class="keyword">this</span>;</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> </span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>&#123;</span><br><span class="line"> OuterClass outerClass = <span class="keyword">new</span> OuterClass();</span><br><span class="line"> OuterClass.InnerClass innerClass = outerClass.new InnerClass();</span><br><span class="line"> innerClass.getOuterClass().display();</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line">-------------</span><br><span class="line">Output:</span><br><span class="line">OuterClass...</span><br></pre></td></tr></table></figure>
<pre><code>内部类是个编译时的概念,一旦编译成功后,它就与外围类属于两个完全不同的类(当然他们之间还是有联系的)。对于一个名为OuterClass的外围类和一个名为InnerClass的内部类,在编译成功后,会出现这样两个class文件:OuterClass.class和OuterClass$InnerClass.class。
</code></pre><p>在Java中内部类主要分为成员内部类、局部内部类、匿名内部类、静态内部类.<a href="http://www.cnblogs.com/chenssy/p/3388487.html" target="_blank" rel="external">具体了解参考</a><br>10.类的继承:方便地实现了功能的扩充,在java中只允许单继承;子类能直接继承父类所有的非私有操作,而只能隐式地继承所有的私有操作。<br>11.重载 和 覆写 的区别:</p>
<pre><code>重载:根据方法签名来判断方法重载
是同一个类中,相同的方法名称,不同的参数列表,以实现不同的功能。
覆写:在继承关系中体现
是子类和父类之间,相同的方法名称并且方法的参数列表一样,在不同类中实现不同的方法。但子类中的访问权限不能比父类中的严格。
</code></pre><p>12.final 关键字:修饰的类怒能再被继承,修饰的方法不能被子类覆写,修饰的变量表示常量。<br>13.抽象类: 包含一个抽象方法的类,抽象类必须使用abstract关键字声明,所有的抽象类不能直接实例化,只能被子类继承并覆写所有的抽象方法。<br>14.接口: 抽象方法和全局常量的集合,使用 interface 关键字进行声明,通过 implements 关键字被子类实现,一个子类可以实现多个接口,一个接口也可以继承多个接口。<br>15.包装类、自动装箱、自动拆箱:包装类是对基本数据类型的处理封装并包含了许多与基本数据先关的操作的封装;装箱:基本数据类型转换为包装类就是装箱,反之就是拆箱。</p>
<h2 id="面向对象高级"><a href="#面向对象高级" class="headerlink" title="面向对象高级"></a>面向对象高级</h2><p>1.抽象类 和 接口 的区别:</p>
<pre><code>共同点:
都不能实例化,都是抽象类型(抽象层次不同,抽象类是对类抽象,接口是对行为抽象;
抽象类是对有相似特点的类的一种继承关系的体现,而接口的子类之间可以毫无关系
从设计层次来看,抽象类是自底向上抽象,而接口是自顶向下设计的),
都是实现多态的一种机制,子类都需要实现定义的所有的抽象方法,
不同点:
抽象类:
1.能有默认的方法实现
2.可以存在构造器
3.可以由 public、protected、default来修饰
4.可以存在main方法,并且可以运行
5.可以继承一个类或实现多个接口
6.新增方法可能不需要更改实现类
接口:
1.不能有任何方法实现
2.不能有构造器
3.只能由默认的public来修饰,不能用其他来修饰
4.不能存在main方法
5.只能继承一个或多个其他接口
6.新增方法一定要更改实现类
综述:最重要的三方面:方法有默认实现,多继承实现,新增方法对实现类的影响
</code></pre><p> 参考资料:<a href="http://blog.csdn.net/chenssy/article/details/12858267" target="_blank" rel="external">java提高篇(四)—–抽象类与接口</a>、<a href="http://www.importnew.com/12399.html" target="_blank" rel="external">Java抽象类与接口的区别</a></p>
<p>2.java 的多态性: 重载、覆写、向上转型</p>
<pre><code>在面向对象中,多态分为静态多态和动态多态,静态多态是指编译期就已经确定了调用目标,主要是指重载;而动态多态是指在程序运行期才能确定调用目标,是通过动态绑定来实现的,主要是指覆写(通过继承和接口方式)。
</code></pre><p>参考资料:<a href="http://www.cnblogs.com/chenssy/p/3372798.html" target="_blank" rel="external">java提高篇(四)—–理解java的三大特性之多态</a>、<a href="http://blog.csdn.net/hikvision_java_gyh/article/details/8957456" target="_blank" rel="external">Java多态性详解——父类引用子类对象</a>、<br><a href="http://blog.csdn.net/thinkGhoster/article/details/2307001" target="_blank" rel="external">深入理解java多态性</a></p>
<p>3.单例设计模式:</p>
<p>懒汉式,线程不安全</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Singleton</span></span>&#123;</span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">static</span> Singleton instance;</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">private</span> <span class="title">Singleton</span><span class="params">()</span></span>&#123;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> Singleton <span class="title">getInstance</span><span class="params">()</span></span>&#123;</span><br><span class="line"> <span class="keyword">if</span>(instance == <span class="keyword">null</span>)&#123;</span><br><span class="line"> instance = <span class="keyword">new</span> Singleton();</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> instance;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>懒汉式,线程安全</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Singleton</span></span>&#123;</span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">static</span> Singleton instance;</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">private</span> <span class="title">Singleton</span><span class="params">()</span></span>&#123;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">synchronized</span> Singleton <span class="title">getInstance</span><span class="params">()</span> </span>&#123;</span><br><span class="line"> <span class="keyword">if</span> (instance == <span class="keyword">null</span>) &#123;</span><br><span class="line"> instance = <span class="keyword">new</span> Singleton();</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> instance;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>双重检验锁</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Singleton</span></span>&#123;</span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">static</span> Singleton instance;</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">private</span> <span class="title">Singleton</span><span class="params">()</span></span>&#123;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> Singleton <span class="title">getSingleton</span><span class="params">()</span> </span>&#123;</span><br><span class="line"> <span class="keyword">if</span> (instance == <span class="keyword">null</span>) &#123; <span class="comment">//Single Checked</span></span><br><span class="line"> <span class="keyword">synchronized</span> (Singleton.class) &#123;</span><br><span class="line"> <span class="keyword">if</span> (instance == <span class="keyword">null</span>) &#123; <span class="comment">//Double Checked</span></span><br><span class="line"> instance = <span class="keyword">new</span> Singleton();</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> <span class="keyword">return</span> instance ;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>参考资料:<a href="http://wuchong.me/blog/2014/08/28/how-to-correctly-write-singleton-pattern/" target="_blank" rel="external">如何正确地写出单例模式</a>、<a href="http://www.devwiki.net/2016/02/27/Java-Design-Pattern-Singleton/" target="_blank" rel="external">Java设计模式—单例模式</a>、<br><a href="https://segmentfault.com/a/1190000002528104" target="_blank" rel="external">设计模式-单例模式</a></p>
<p>4.匿名内部类:是没有名字的内部类,正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写。<br>使用匿名内部类我们必须要继承一个父类或者实现一个接口,当然也仅能只继承一个父类或者实现一个接口。同时它也是没有class关键字,这是因为匿名内部类是直接使用new来生成一个对象的引用。当然这个引用是隐式的。<br>由于匿名内部类不能是抽象类,所以它必须要实现它的抽象父类或者接口里面所有的抽象方法。</p>
<pre><code>注意事项
在使用匿名内部类的过程中,我们需要注意如下几点:
1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
2、匿名内部类中是不能定义构造函数的。
3、匿名内部类中不能存在任何的静态成员变量和静态方法。
4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。
6、 我们给匿名内部类传递参数的时候,若该形参在内部类中需要被使用,那么该形参必须要为final。也就是说:当所在的方法的形参需要被内部类里面使用时,该形参必须为final。
</code></pre><p>参考资料:<a href="http://www.cnblogs.com/chenssy/p/3390871.html" target="_blank" rel="external">java提高篇(十)—–详解匿名内部类</a></p>
<p>5.泛型:</p>
<p>泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,以提高代码的重用率。</p>
<p> 参考资料:<a href="http://www.ibm.com/developerworks/cn/java/j-jtp01255.html" target="_blank" rel="external">Java 理论和实践: 了解泛型</a>、<a href="http://www.imooc.com/article/1935" target="_blank" rel="external">Java总结篇系列:Java泛型</a>、<br> <a href="http://my.oschina.net/jiemachina/blog/201507" target="_blank" rel="external">java 泛型中 T 和 问号(通配符)的区别</a>、<a href="http://findingsea.github.io/2015/10/09/java-generic-type-erasure/" target="_blank" rel="external">Java泛型:类型擦除</a>、<br> <a href="http://liuzxc.github.io/blog/java-advance-06/" target="_blank" rel="external">Java 提高篇(六) — 泛型</a></p>
<p>6.里氏代换原则:<br>里氏代换原则(LiskovSubstitution Principle,简称LSP)说的是:一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本不能够察觉出基类对象<br>通俗点:里氏代换原则(Liskov Substitution Principle, LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象。</p>
<p><strong style="color:red;">里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。</strong></p>
<p>参考资料:<a href="http://www.blogjava.net/fancydeepin/archive/2012/08/02/java_pattern_LSP.html" target="_blank" rel="external">里氏代换原则(LSP)</a>、<a href="http://blog.csdn.net/lovelion/article/details/7540445" target="_blank" rel="external">面向对象设计原则之里氏代换原则</a>、<br><a href="http://zim.logdown.com/posts/261930-about-liskov-substitution-principle" target="_blank" rel="external">equals 与里氏代换原则</a>、<a href="http://blog.csdn.net/zhengzhb/article/details/7281833" target="_blank" rel="external">设计模式六大原则(2):里氏替换原则</a></p>
<h2 id="关于面试,相关资料推荐"><a href="#关于面试,相关资料推荐" class="headerlink" title="关于面试,相关资料推荐"></a>关于面试,相关资料推荐</h2><p><a href="http://blog.csdn.net/jackfrued/article/details/44921941" target="_blank" rel="external">Java面试题全集(上)</a><br><a href="http://blog.csdn.net/jackfrued/article/details/44931137" target="_blank" rel="external">Java面试题全集(中)</a><br><a href="http://blog.csdn.net/jackfrued/article/details/44931161" target="_blank" rel="external">Java面试题全集(下)</a></p>
<p><a href="http://www.importnew.com/10980.html" target="_blank" rel="external">115个Java面试题和答案——终极列表(上)</a><br><a href="http://www.importnew.com/11028.html" target="_blank" rel="external">115个Java面试题和答案——终极列表(下)</a></p>
<p><a href="http://www.importnew.com/17232.html" target="_blank" rel="external">最近5年133个Java面试问题列表</a><br><a href="http://www.importnew.com/15980.html" target="_blank" rel="external">40个Java集合面试问题和答案</a></p>
<p><a href="http://www.hollischuang.com/archives/10#计算机基础知识" target="_blank" rel="external">Java面试题整理</a><br><a href="http://www.imooc.com/article/1330" target="_blank" rel="external">20个高级Java面试题汇总</a></p>
<hr>
<h2 id="相关参考资料"><a href="#相关参考资料" class="headerlink" title="相关参考资料"></a>相关参考资料</h2><p><a href="https://www.zybuluo.com/king/note/29599" target="_blank" rel="external">Java学习笔记</a></p>
<p><a href="http://qd2.cache.baidupcs.com/file/79243cc0a9548154355db3ed7f3c83b6?bkt=p-6ee93bc7b3a9337328142b41dc618989&amp;xcode=48178b544e5545ab60e7fc9ba9e23a128741cec7ecb7b3241682cb8519c2059f&amp;fid=4179565000-250528-4267523062&amp;time=1456579892&amp;sign=FDTAXGERLBH-DCb740ccc5511e5e8fedcff06b081203-oh%2FHcN9g%2B%2Fva0xQWXSoPu1bK%2Byk%3D&amp;to=qc2&amp;fm=Nan,B,U,ny&amp;sta_dx=5&amp;sta_cs=0&amp;sta_ft=rar&amp;sta_ct=7&amp;fm2=Nanjing,B,U,ny&amp;newver=1&amp;newfm=1&amp;secfm=1&amp;flow_ver=3&amp;pkey=14000bd5be2f9c1584e7fb677bb26825f84fb7ccff250000004c19bd&amp;sl=73793614&amp;expires=8h&amp;rt=sh&amp;r=858982758&amp;mlogid=1342792428858653681&amp;vuk=1046126508&amp;vbdid=2667063597&amp;fin=%E6%9D%8E%E5%85%B4%E5%8D%8Ejavase%E5%85%A8%E9%83%A8%E7%AC%94%E8%AE%B0.rar&amp;fn=%E6%9D%8E%E5%85%B4%E5%8D%8Ejavase%E5%85%A8%E9%83%A8%E7%AC%94%E8%AE%B0.rar&amp;slt=pm&amp;uta=0&amp;rtype=1&amp;iv=0&amp;isw=0&amp;dp-logid=1342792428858653681&amp;dp-callid=0.1.1" target="_blank" rel="external">李兴华javase全部笔记.rar(下载链接地址)</a></p>
<p><a href="http://blog.csdn.net/chenssy/article/category/1688799/2" target="_blank" rel="external">java提高篇</a></p>
<p><a href="http://www.devstore.cn/essay/essayInfo/3434.html" target="_blank" rel="external">衡量java初学者是否入门的6个问题</a></p>
<p><a href="http://zangweiren.blog.51cto.com/all/412366" target="_blank" rel="external">JAVA面试题解惑系列 (12)</a></p>
</content>
<summary type="html">
java,java基础
</summary>
<category term="java" scheme="http://aresLove.github.io/categories/java/"/>
<category term="java,java基础" scheme="http://aresLove.github.io/tags/java%EF%BC%8Cjava%E5%9F%BA%E7%A1%80/"/>
</entry>
<entry>
<title>hibernate 映射相关问题</title>
<link href="http://aresLove.github.io/java/hibernate%E6%98%A0%E5%B0%84%E9%97%AE%E9%A2%98/"/>
<id>http://aresLove.github.io/java/hibernate映射问题/</id>
<published>2017-02-19T09:34:19.573Z</published>
<updated>2017-02-19T09:34:19.573Z</updated>
<content type="html"><h2 id="需求背景"><a href="#需求背景" class="headerlink" title="需求背景"></a>需求背景</h2><p>项目需求,将中间数据库的数据查询到本地视图,再将本地视图(千万级数据量)和会员表(百万级数据量)关联查询导出相关数据,<br>因为数据量比较大,一次全部查出或导致内存溢出,因此,后台需要对这些关联数据分页查询然后分批导出cvs文件,然后上传到媒体服务器。</p>
<hr>
<h2 id="需求实现过程中处理的问题"><a href="#需求实现过程中处理的问题" class="headerlink" title="需求实现过程中处理的问题"></a>需求实现过程中处理的问题</h2><p>1.视图处理须知:将视图注解(配置)实体关系映射,并将添加的实体加入 <em>persistence.xml</em> 中;因为 查询实现的方式是 EJB JPA 实体管理器 创建的query,PersistenceContext(持久化上下文)上下文的配置文件中的 <em>持久化单元</em> 中配置的相关实体,否则会 出现 为 sql 语句中的变量赋值时,无法将传入的参数设置到sql语句中<br> <figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">java<span class="class">.lang</span><span class="class">.IndexOutOfBoundsException</span>: Remember that ordinal parameters are <span class="number">1</span>-based!</span><br></pre></td></tr></table></figure></p>
<p>这个问题产生的原因是 hibernate 通过 持久化上下文 中查找不到 相关实体,无法映射表结构,不能将参数设置到sql语句中,提示出这种很疑惑的问题,反复调试,能看到传入的变量值和创建出来的sql语句和sql变参,可就是无法将变量值设置给sql变参,后台日志输出上面的提示,很费解。</p>
<p>2.创建视图实体和联合主键:使用注解方式实现,参照 <a href="http://www.iteye.com/problems/87622" target="_blank" rel="external">Hibernate怎样使用Annotation映射视图</a> 和 <a href="http://blog.csdn.net/flyemu/article/details/8302615" target="_blank" rel="external">Annotation对Hibernate中联合主键定义</a> 将视图所有的字段放在联合主键实体中,该实体用<br> <figure class="highlight aspectj"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="annotation">@Embeddable</span></span><br></pre></td></tr></table></figure></p>
<p>注解,字段和普通实体一样使用<br> <figure class="highlight aspectj"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="annotation">@Column</span></span><br></pre></td></tr></table></figure></p>
<p>注解,在视图实体中使用该联合主键实体,用<br> <figure class="highlight less"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="variable">@EmbeddedId</span> <span class="variable">@AttributeOverrides</span>(&#123;...&#125;)</span><br></pre></td></tr></table></figure></p>
<p>注解,这样视图映射关系已经搞定,因为开启了org.hibernate.tool.hbm2ddl.SchemaUpdate - Running hbm2ddl schema update,在启动过程中会报<br> <figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">ERROR com<span class="class">.huanyu</span><span class="class">.common</span><span class="class">.jpa</span><span class="class">.index</span><span class="class">.OracleDbIndexBuilder</span> - 创建“View_memcon”表主键(...)出错。</span><br><span class="line">java<span class="class">.sql</span><span class="class">.SQLException</span>: ORA-<span class="number">00942</span>: 表或视图不存在</span><br></pre></td></tr></table></figure></p>
<p>处理这个报错的方法是,关闭 hibernate hbm2ddl = none 即可,不需要更新索引,这个报错并不影响功能,只是在容器启动时报这么个错误看着不舒服,因为 本来 视图 就没有 主键 和 索引,这样去为视图 创建实体映射关系并添加联合主键,只是为了能使用 hibernate 去查询视图<br>3.关联查询语句: sql 语句 表、字段 is not mapped 问题<br>4.分批量导出多个文件: 因为写入单个文件的耗时线性增长,600万数据写入一个文件中,10多个小时没导完</p>
<h3 id="视图处理"><a href="#视图处理" class="headerlink" title="视图处理"></a>视图处理</h3><p>将视图映射成实体表,过程中 直接使用 em.createQuery(“数据库查询语句”) 报错:表 is not mapped 的问题,因此,引出了需要为视图创建实体和联合主键<br>创建视图实体和联合主键参照 <a href="http://www.iteye.com/problems/87622" target="_blank" rel="external">Hibernate怎样使用Annotation映射视图</a> ,启动报关于视图 不存在的问题是因为开启了<br>更新表结构的配置,因此为视图更新表结构的时候创建联合主键时为视图更新索引报错,将 hibernate 的 hbm2ddl 配置关闭即可。</p>
<p>过程中,调试关于 <em>java.lang.IndexOutOfBoundsException: Remember that ordinal parameters are 1-based!</em> 的问题,反复调试总不知如何解决,后来得到指点<br>在 <em>将添加的视图实体加入 persistence.xml 中</em> 之后,这个问题得到解决</p>
<figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">2016-01-13 10:32:26,742 [common-quartz-core.scheduler_Worker-2] ERROR com.huanyu.mbr.core.consumption.dao.ConsumptionDao - search(definition=WHERE</span><br><span class="line"> code.EQUALS(1507070011)</span><br><span class="line">ORDER BY </span><br><span class="line">PAGE SIZE = 5000</span><br><span class="line">PAGE = 0) error</span><br><span class="line">SQL=<span class="operator"><span class="keyword">SELECT</span> v.*,<span class="keyword">m</span>.<span class="keyword">name</span>,<span class="keyword">m</span>.sex,<span class="keyword">m</span>.idNo,<span class="keyword">m</span>.cell,<span class="keyword">m</span>.cityName</span><br><span class="line"><span class="keyword">FROM</span> com.huanyu.mbr.core.consumption.dao.Consumption <span class="keyword">AS</span> consumption , com.huanyu.mbr.core.consumption.dao.view_memcon <span class="keyword">AS</span> v , com.huanyu.mbr.dao.mbr.Mbr <span class="keyword">AS</span> <span class="keyword">m</span></span><br><span class="line"><span class="keyword">WHERE</span> (consumption.code <span class="keyword">in</span> ?) <span class="keyword">AND</span> (<span class="keyword">m</span>.<span class="keyword">id</span>=v.code) <span class="keyword">AND</span> (v.code=consumption.queryCode)</span><br><span class="line"><span class="keyword">java</span>.lang.IndexOutOfBoundsException: Remember that ordinal <span class="keyword">parameters</span> <span class="keyword">are</span> <span class="number">1</span>-based!</span><br><span class="line"> <span class="keyword">at</span> org.hibernate.<span class="keyword">engine</span>.<span class="keyword">query</span>.ParameterMetadata.getOrdinalParameterDescriptor(ParameterMetadata.<span class="keyword">java</span>:<span class="number">55</span>)</span><br><span class="line"> <span class="keyword">at</span> org.hibernate.<span class="keyword">engine</span>.<span class="keyword">query</span>.ParameterMetadata.getOrdinalParameterExpectedType(ParameterMetadata.<span class="keyword">java</span>:<span class="number">61</span>)</span><br><span class="line"> <span class="keyword">at</span> org.hibernate.impl.AbstractQueryImpl.determineType(AbstractQueryImpl.<span class="keyword">java</span>:<span class="number">397</span>)</span><br><span class="line"> <span class="keyword">at</span> org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.<span class="keyword">java</span>:<span class="number">369</span>)</span><br><span class="line"> <span class="keyword">at</span> org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.<span class="keyword">java</span>:<span class="number">234</span>)</span><br><span class="line"> <span class="keyword">at</span> sun.reflect.NativeMethodAccessorImpl.invoke0(<span class="keyword">Native</span> Method)</span><br><span class="line"> <span class="keyword">at</span> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.<span class="keyword">java</span>:<span class="number">57</span>)</span><br><span class="line"> <span class="keyword">at</span> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.<span class="keyword">java</span>:<span class="number">43</span>)</span><br><span class="line"> <span class="keyword">at</span> <span class="keyword">java</span>.lang.reflect.Method.invoke(Method.<span class="keyword">java</span>:<span class="number">606</span>)</span><br><span class="line"> <span class="keyword">at</span> org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.<span class="keyword">java</span>:<span class="number">311</span>)</span><br><span class="line"> <span class="keyword">at</span> com.sun.proxy.$Proxy94.setParameter(<span class="keyword">Unknown</span> <span class="keyword">Source</span>)</span><br><span class="line"> ...</span></span><br></pre></td></tr></table></figure>
<p>这个问题 说明 对于 hibernate基础 掌握不扎实,对于 EJB JPA 概念理解不深</p>
<h3 id="关联查询语句问题及处理(表、字段-not-mapped-)【hibernate-基础不扎实】"><a href="#关联查询语句问题及处理(表、字段-not-mapped-)【hibernate-基础不扎实】" class="headerlink" title="关联查询语句问题及处理(表、字段 not mapped )【hibernate 基础不扎实】"></a>关联查询语句问题及处理(表、字段 not mapped )【hibernate 基础不扎实】</h3><h4 id="EJB-JPA-实体管理器"><a href="#EJB-JPA-实体管理器" class="headerlink" title="EJB JPA 实体管理器"></a>EJB JPA 实体管理器</h4><figure class="highlight aspectj"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="annotation">@PersistenceContext</span>(unitName = <span class="string">"huanyu-mbr-core.persistent-unit"</span>)</span><br><span class="line"> <span class="keyword">protected</span> EntityManager em;</span><br></pre></td></tr></table></figure>
<h4 id="下述是问题,是因为-em-createQuery-“sql…”)-其中-sql-中-直接使用了-数据库表名称-view-memcon-,而不是-实体名称-Member"><a href="#下述是问题,是因为-em-createQuery-“sql…”)-其中-sql-中-直接使用了-数据库表名称-view-memcon-,而不是-实体名称-Member" class="headerlink" title="下述是问题,是因为 em.createQuery(“sql…”),其中 sql 中 直接使用了 数据库表名称(view_memcon),而不是 实体名称(Member)"></a>下述是问题,是因为 em.createQuery(“sql…”),其中 sql 中 直接使用了 <em>数据库表名称</em>(view_memcon),而不是 <em>实体名称</em>(Member)</h4><p>对于 视图的字段属性 的 操作:select v.viewData.code from View_memcon v … 其中 View_memcon 是视图实体名称,v.viewData.code 是通过联合主键实体映射来映射视图字段</p>
<figure class="highlight stylus"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line">java<span class="class">.lang</span><span class="class">.IllegalArgumentException</span>: org<span class="class">.hibernate</span><span class="class">.hql</span><span class="class">.ast</span><span class="class">.QuerySyntaxException</span>: view_memcon is not mapped [SELECT <span class="function"><span class="title">COUNT</span><span class="params">(m.id)</span></span> FROM com<span class="class">.huanyu</span><span class="class">.mbr</span><span class="class">.core</span><span class="class">.consumption</span><span class="class">.dao</span><span class="class">.view_memcon</span> v, t_mbr m WHERE m<span class="class">.id</span> = v<span class="class">.memId</span> AND v<span class="class">.unionCode</span> = (select <span class="tag">p</span><span class="class">.queryCode</span> from t_consumption <span class="tag">p</span> where <span class="tag">p</span><span class="class">.code</span> = :code)]</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.ejb</span><span class="class">.AbstractEntityManagerImpl</span><span class="class">.throwPersistenceException</span>(AbstractEntityManagerImpl<span class="class">.java</span>:<span class="number">616</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.ejb</span><span class="class">.AbstractEntityManagerImpl</span><span class="class">.createQuery</span>(AbstractEntityManagerImpl<span class="class">.java</span>:<span class="number">95</span>)</span><br><span class="line"> at sun<span class="class">.reflect</span><span class="class">.GeneratedMethodAccessor62</span><span class="class">.invoke</span>(Unknown Source)</span><br><span class="line"> at sun<span class="class">.reflect</span><span class="class">.DelegatingMethodAccessorImpl</span><span class="class">.invoke</span>(DelegatingMethodAccessorImpl<span class="class">.java</span>:<span class="number">43</span>)</span><br><span class="line"> at java<span class="class">.lang</span><span class="class">.reflect</span><span class="class">.Method</span><span class="class">.invoke</span>(Method<span class="class">.java</span>:<span class="number">606</span>)</span><br><span class="line"> at org<span class="class">.springframework</span><span class="class">.orm</span><span class="class">.jpa</span><span class="class">.ExtendedEntityManagerCreator</span><span class="variable">$ExtendedEntityManagerInvocationHandler</span>.<span class="function"><span class="title">invoke</span><span class="params">(ExtendedEntityManagerCreator.java:<span class="number">366</span>)</span></span></span><br><span class="line"> at com<span class="class">.sun</span><span class="class">.proxy</span>.<span class="variable">$Proxy64</span>.<span class="function"><span class="title">createQuery</span><span class="params">(Unknown Source)</span></span></span><br><span class="line"> at sun<span class="class">.reflect</span><span class="class">.GeneratedMethodAccessor62</span><span class="class">.invoke</span>(Unknown Source)</span><br><span class="line"> at sun<span class="class">.reflect</span><span class="class">.DelegatingMethodAccessorImpl</span><span class="class">.invoke</span>(DelegatingMethodAccessorImpl<span class="class">.java</span>:<span class="number">43</span>)</span><br><span class="line"> at java<span class="class">.lang</span><span class="class">.reflect</span><span class="class">.Method</span><span class="class">.invoke</span>(Method<span class="class">.java</span>:<span class="number">606</span>)</span><br><span class="line"> at org<span class="class">.springframework</span><span class="class">.orm</span><span class="class">.jpa</span><span class="class">.SharedEntityManagerCreator</span><span class="variable">$SharedEntityManagerInvocationHandler</span>.<span class="function"><span class="title">invoke</span><span class="params">(SharedEntityManagerCreator.java:<span class="number">241</span>)</span></span></span><br><span class="line"> at com<span class="class">.sun</span><span class="class">.proxy</span>.<span class="variable">$Proxy64</span>.<span class="function"><span class="title">createQuery</span><span class="params">(Unknown Source)</span></span></span><br><span class="line"> ...</span><br><span class="line">Caused by: org<span class="class">.hibernate</span><span class="class">.hql</span><span class="class">.ast</span><span class="class">.QuerySyntaxException</span>: view_memcon is not mapped [SELECT <span class="function"><span class="title">COUNT</span><span class="params">(m.id)</span></span> FROM com<span class="class">.huanyu</span><span class="class">.mbr</span><span class="class">.core</span><span class="class">.consumption</span><span class="class">.dao</span><span class="class">.view_memcon</span> v, t_mbr m WHERE m<span class="class">.id</span> = v<span class="class">.memId</span> AND v<span class="class">.unionCode</span> = (select <span class="tag">p</span><span class="class">.queryCode</span> from t_consumption <span class="tag">p</span> where <span class="tag">p</span><span class="class">.code</span> = :code)]</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.hql</span><span class="class">.ast</span><span class="class">.util</span><span class="class">.SessionFactoryHelper</span><span class="class">.requireClassPersister</span>(SessionFactoryHelper<span class="class">.java</span>:<span class="number">158</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.hql</span><span class="class">.ast</span><span class="class">.tree</span><span class="class">.FromElementFactory</span><span class="class">.addFromElement</span>(FromElementFactory<span class="class">.java</span>:<span class="number">87</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.hql</span><span class="class">.ast</span><span class="class">.tree</span><span class="class">.FromClause</span><span class="class">.addFromElement</span>(FromClause<span class="class">.java</span>:<span class="number">71</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.hql</span><span class="class">.ast</span><span class="class">.HqlSqlWalker</span><span class="class">.createFromElement</span>(HqlSqlWalker<span class="class">.java</span>:<span class="number">295</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.hql</span><span class="class">.antlr</span><span class="class">.HqlSqlBaseWalker</span><span class="class">.fromElement</span>(HqlSqlBaseWalker<span class="class">.java</span>:<span class="number">3228</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.hql</span><span class="class">.antlr</span><span class="class">.HqlSqlBaseWalker</span><span class="class">.fromElementList</span>(HqlSqlBaseWalker<span class="class">.java</span>:<span class="number">3112</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.hql</span><span class="class">.antlr</span><span class="class">.HqlSqlBaseWalker</span><span class="class">.fromClause</span>(HqlSqlBaseWalker<span class="class">.java</span>:<span class="number">720</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.hql</span><span class="class">.antlr</span><span class="class">.HqlSqlBaseWalker</span><span class="class">.query</span>(HqlSqlBaseWalker<span class="class">.java</span>:<span class="number">571</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.hql</span><span class="class">.antlr</span><span class="class">.HqlSqlBaseWalker</span><span class="class">.selectStatement</span>(HqlSqlBaseWalker<span class="class">.java</span>:<span class="number">288</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.hql</span><span class="class">.antlr</span><span class="class">.HqlSqlBaseWalker</span><span class="class">.statement</span>(HqlSqlBaseWalker<span class="class">.java</span>:<span class="number">231</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.hql</span><span class="class">.ast</span><span class="class">.QueryTranslatorImpl</span><span class="class">.analyze</span>(QueryTranslatorImpl<span class="class">.java</span>:<span class="number">231</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.hql</span><span class="class">.ast</span><span class="class">.QueryTranslatorImpl</span><span class="class">.doCompile</span>(QueryTranslatorImpl<span class="class">.java</span>:<span class="number">162</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.hql</span><span class="class">.ast</span><span class="class">.QueryTranslatorImpl</span><span class="class">.compile</span>(QueryTranslatorImpl<span class="class">.java</span>:<span class="number">113</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.engine</span><span class="class">.query</span><span class="class">.HQLQueryPlan</span>.&lt;init&gt;(HQLQueryPlan<span class="class">.java</span>:<span class="number">77</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.engine</span><span class="class">.query</span><span class="class">.HQLQueryPlan</span>.&lt;init&gt;(HQLQueryPlan<span class="class">.java</span>:<span class="number">56</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.engine</span><span class="class">.query</span><span class="class">.QueryPlanCache</span><span class="class">.getHQLQueryPlan</span>(QueryPlanCache<span class="class">.java</span>:<span class="number">72</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.impl</span><span class="class">.AbstractSessionImpl</span><span class="class">.getHQLQueryPlan</span>(AbstractSessionImpl<span class="class">.java</span>:<span class="number">133</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.impl</span><span class="class">.AbstractSessionImpl</span><span class="class">.createQuery</span>(AbstractSessionImpl<span class="class">.java</span>:<span class="number">112</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.impl</span><span class="class">.SessionImpl</span><span class="class">.createQuery</span>(SessionImpl<span class="class">.java</span>:<span class="number">1624</span>)</span><br><span class="line"> at org<span class="class">.hibernate</span><span class="class">.ejb</span><span class="class">.AbstractEntityManagerImpl</span><span class="class">.createQuery</span>(AbstractEntityManagerImpl<span class="class">.java</span>:<span class="number">92</span>)</span><br><span class="line"> ... <span class="number">105</span> more</span><br></pre></td></tr></table></figure>
<h3 id="分批量导出多个文件"><a href="#分批量导出多个文件" class="headerlink" title="分批量导出多个文件"></a>分批量导出多个文件</h3><p>由于导出数据量比较大,导出单个文件写入耗时性能降低,需要分批量导出多个文件,压缩上传到媒体服务器;google 到 <a href="http://www.mkyong.com/java/how-to-compress-files-in-zip-format/" target="_blank" rel="external">How to compress files in ZIP format</a><br>使用 java.util.zip.ZipEntry 进行导出操作</p>
<figure class="highlight aspectj"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br></pre></td><td class="code"><pre><span class="line">AppCtxUtils 工具类</span><br><span class="line"></span><br><span class="line"><span class="keyword">package</span> com.huanyu.common.util;</span><br><span class="line"></span><br><span class="line"><span class="keyword">import</span> org.springframework.beans.BeansException;</span><br><span class="line"><span class="keyword">import</span> org.springframework.beans.factory.DisposableBean;</span><br><span class="line"><span class="keyword">import</span> org.springframework.context.ApplicationContext;</span><br><span class="line"><span class="keyword">import</span> org.springframework.context.ApplicationContextAware;</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span><br><span class="line"> * <span class="doctag">@author</span> ares</span><br><span class="line"> * </span><br><span class="line"> */</span></span><br><span class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">AppCtxUtils</span> <span class="keyword">implements</span> <span class="title">ApplicationContextAware</span>, <span class="title">DisposableBean</span> </span>&#123;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">static</span> ApplicationContext appCtx;</span><br><span class="line"></span><br><span class="line"> <span class="annotation">@Override</span></span><br><span class="line"> <span class="keyword">public</span> <span class="function"><span class="keyword">void</span> <span class="title">setApplicationContext</span><span class="params">(ApplicationContext appCtx1)</span> <span class="keyword">throws</span> BeansException </span>&#123;</span><br><span class="line"> appCtx = appCtx1;</span><br><span class="line"></span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="function">ApplicationContext <span class="title">getAppCtx</span><span class="params">()</span> </span>&#123;</span><br><span class="line"> assertContextInjected();</span><br><span class="line"> <span class="keyword">return</span> appCtx;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">static</span> &lt;T&gt; <span class="function">T <span class="title">getBean</span><span class="params">(Class&lt;T&gt; clazz)</span> </span>&#123;</span><br><span class="line"> assertContextInjected();</span><br><span class="line"> <span class="function"><span class="keyword">return</span> appCtx.<span class="title">getBean</span><span class="params">(clazz)</span></span>;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">static</span> &lt;T&gt; <span class="function">T <span class="title">getBean</span><span class="params">(String beanName)</span> </span>&#123;</span><br><span class="line"> assertContextInjected();</span><br><span class="line"> <span class="keyword">return</span> (T) appCtx.getBean(beanName);</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">public</span> <span class="keyword">static</span> &lt;T&gt; <span class="function">T <span class="title">getBean</span><span class="params">(String beanName, Class&lt;T&gt; clazz)</span> </span>&#123;</span><br><span class="line"> assertContextInjected();</span><br><span class="line"> <span class="function"><span class="keyword">return</span> appCtx.<span class="title">getBean</span><span class="params">(beanName, clazz)</span></span>;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="function"><span class="keyword">void</span> <span class="title">assertContextInjected</span><span class="params">()</span> </span>&#123;</span><br><span class="line"> <span class="keyword">if</span> (appCtx == <span class="keyword">null</span>) &#123;</span><br><span class="line"> <span class="keyword">throw</span> <span class="keyword">new</span> IllegalStateException(<span class="string">"applicaitonContext未注入!"</span>);</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> <span class="annotation">@Override</span></span><br><span class="line"> <span class="keyword">public</span> <span class="function"><span class="keyword">void</span> <span class="title">destroy</span><span class="params">()</span> <span class="keyword">throws</span> Exception </span>&#123;</span><br><span class="line"> appCtx = <span class="keyword">null</span>;</span><br><span class="line"></span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">文件 打包相关 方法</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span><br><span class="line"> * 创建临时文件夹目录(供存放多个临时导出文件)</span><br><span class="line"> * </span><br><span class="line"> * <span class="doctag">@return</span> 创建的临时文件目录绝对路径</span><br><span class="line"> * <span class="doctag">@throws</span> Exception</span><br><span class="line"> */</span></span><br><span class="line"><span class="keyword">private</span> <span class="function">String <span class="title">getTempFileDirPath</span><span class="params">()</span> <span class="keyword">throws</span> Exception </span>&#123;</span><br><span class="line"> <span class="comment">// 创建本地资源路径</span></span><br><span class="line"> String relativePath = SYSTEM_STATIC_FILE_PATH + <span class="keyword">new</span> SimpleDateFormat(<span class="string">"yyyyMMdd-HHmmss"</span>).format(<span class="keyword">new</span> Date()) </span><br><span class="line"> + <span class="string">"-"</span> + UUID.randomUUID();</span><br><span class="line"> Resource resource = AppCtxUtils.getAppCtx().getResource(relativePath);</span><br><span class="line"> File file = resource.getFile();</span><br><span class="line"> <span class="keyword">if</span> (!file.exists()) &#123;</span><br><span class="line"> file.mkdirs();</span><br><span class="line"> &#125;</span><br><span class="line"></span><br><span class="line"> String realPath = resource.getFile().getPath();</span><br><span class="line"></span><br><span class="line"> <span class="keyword">return</span> realPath;</span><br><span class="line"></span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment">/**</span><br><span class="line"> * 文件打包</span><br><span class="line"> * </span><br><span class="line"> * <span class="doctag">@return</span> zip文件路径</span><br><span class="line"> * <span class="doctag">@throws</span> IOException</span><br><span class="line"> */</span></span><br><span class="line"><span class="keyword">private</span> <span class="function">String <span class="title">zipFile</span><span class="params">()</span> <span class="keyword">throws</span> IOException </span>&#123;</span><br><span class="line"> String zipFilePath = <span class="keyword">this</span>.template.getName() + <span class="string">"-"</span></span><br><span class="line"> + <span class="keyword">new</span> SimpleDateFormat(<span class="string">"yyyyMMdd-HHmmss"</span>).format(<span class="keyword">new</span> Date()) + KEY_ZIPSUFFIX;</span><br><span class="line"> <span class="keyword">byte</span>[] buf = <span class="keyword">new</span> <span class="keyword">byte</span>[<span class="number">1024</span>];</span><br><span class="line"> FileOutputStream f = <span class="keyword">new</span> FileOutputStream(zipFilePath);</span><br><span class="line"> ZipOutputStream out = <span class="keyword">new</span> ZipOutputStream(f);</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">for</span> (String filePath : <span class="keyword">this</span>.fileList) &#123;</span><br><span class="line"> File file = <span class="keyword">new</span> File(filePath);</span><br><span class="line"> </span><br><span class="line"> ZipEntry ze = <span class="keyword">new</span> ZipEntry(file.getName());</span><br><span class="line"> out.putNextEntry(ze);</span><br><span class="line"> </span><br><span class="line"> FileInputStream in = <span class="keyword">new</span> FileInputStream(file);</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">int</span> len;</span><br><span class="line"> <span class="keyword">while</span> ((len = in.read(buf)) &gt; <span class="number">0</span>) &#123;</span><br><span class="line"> out.write(buf, <span class="number">0</span>, len);</span><br><span class="line"> &#125;</span><br><span class="line"> </span><br><span class="line"> in.close();</span><br><span class="line"> &#125;</span><br><span class="line"> out.closeEntry();</span><br><span class="line"> out.close();</span><br><span class="line"> </span><br><span class="line"> <span class="keyword">return</span> zipFilePath;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<hr>
<p>上述问题的处理解决过程中,个人 hibernate 基础 有待深入学习</p>
<hr>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><p><a href="http://www.cnblogs.com/-10086/archive/2012/09/16/2687550.html" target="_blank" rel="external">EJB之JPA(EntityManager)</a></p>
<p><a href="http://www.iteye.com/problems/87622" target="_blank" rel="external">Hibernate怎样使用Annotation映射视图</a> 和 <a href="http://blog.csdn.net/flyemu/article/details/8302615" target="_blank" rel="external">Annotation对Hibernate中联合主键定义</a></p>
<p><a href="http://stackoverflow.com/questions/14446048/hibernate-table-not-mapped-error" target="_blank" rel="external">Hibernate table not mapped error</a></p>
<p><a href="http://www.mkyong.com/java/how-to-compress-files-in-zip-format/" target="_blank" rel="external">How to compress files in ZIP format</a></p>
</content>
<summary type="html">
hibernate 映射问题及处理
</summary>
<category term="java" scheme="http://aresLove.github.io/categories/java/"/>
<category term="hibernate" scheme="http://aresLove.github.io/tags/hibernate/"/>
<category term="hibernate映射" scheme="http://aresLove.github.io/tags/hibernate%E6%98%A0%E5%B0%84/"/>
<category term="java" scheme="http://aresLove.github.io/tags/java/"/>
</entry>
<entry>
<title>Eclipse 使用经验</title>
<link href="http://aresLove.github.io/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/eclipse%20%E4%BD%BF%E7%94%A8%E7%BB%8F%E9%AA%8C/"/>
<id>http://aresLove.github.io/开发工具/eclipse 使用经验/</id>
<published>2017-02-19T09:34:19.573Z</published>
<updated>2017-02-19T09:34:19.573Z</updated>
<content type="html"><h1 id="Eclipse-使用经验总结记录"><a href="#Eclipse-使用经验总结记录" class="headerlink" title="Eclipse 使用经验总结记录"></a>Eclipse 使用经验总结记录</h1><h2 id="配色方案"><a href="#配色方案" class="headerlink" title="配色方案"></a>配色方案</h2><pre><code>手动一点点设置,自定义所有要设置的,参考步骤:
MyEclipse2014 常用设置优化: http://www.360doc.com/content/15/0225/11/15242507_450658857.shtml
通过导入常用的配色方案来快速配置:
eclipse官方配色主题下载: http://eclipsecolorthemes.org/
eclipse 配置黑色主题: http://www.cnblogs.com/csulennon/p/4231405.html
如何修改eclipse背景颜色: http://jingyan.baidu.com/article/d45ad1489aebd169542b8062.html
通常将自己常用的配色方案导出,方便更换工作空间的配色等设置
</code></pre><hr>
<h2 id="实用快捷键和优化设置"><a href="#实用快捷键和优化设置" class="headerlink" title="实用快捷键和优化设置"></a>实用快捷键和优化设置</h2><p>使用快捷键转载自 <a href="http://blog.csdn.net/linsongbin1/article/details/48954353" target="_blank" rel="external">能够提高开发效率的Eclipse实用操作</a><br>最常用快捷键 <a href="http://www.importnew.com/15440.html" target="_blank" rel="external">最常用的Eclipse快捷键</a><br>优化设置 <a href="http://www.importnew.com/13942.html" target="_blank" rel="external">给Eclipse提速的7个技巧</a></p>
</content>
<summary type="html">
Eclipse
</summary>
<category term="开发工具" scheme="http://aresLove.github.io/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/"/>
<category term="Eclipse" scheme="http://aresLove.github.io/tags/Eclipse/"/>
<category term="后端工具" scheme="http://aresLove.github.io/tags/%E5%90%8E%E7%AB%AF%E5%B7%A5%E5%85%B7/"/>
<category term="常用工具" scheme="http://aresLove.github.io/tags/%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7/"/>
</entry>
<entry>
<title>SublimeText 使用经验</title>
<link href="http://aresLove.github.io/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/SublimeText%20%E4%BD%BF%E7%94%A8%E7%BB%8F%E9%AA%8C/"/>
<id>http://aresLove.github.io/开发工具/SublimeText 使用经验/</id>
<published>2017-02-19T09:34:19.572Z</published>
<updated>2017-02-19T09:34:19.572Z</updated>
<content type="html"><h1 id="SublimeText-个人使用经验总结归纳"><a href="#SublimeText-个人使用经验总结归纳" class="headerlink" title="SublimeText 个人使用经验总结归纳"></a>SublimeText 个人使用经验总结归纳</h1><h3 id="SublimeText2-个人安装方法-个人亲测可行-【离线安装方法】"><a href="#SublimeText2-个人安装方法-个人亲测可行-【离线安装方法】" class="headerlink" title="SublimeText2 个人安装方法(个人亲测可行)【离线安装方法】"></a>SublimeText2 个人安装方法(个人亲测可行)【离线安装方法】</h3><pre><code>1. 在安装目录下新建 Data &gt; Installed Packages 形如:C:\Sublime Text2\Data\Installed Packages
2. 然后将下载的 package Control 压缩包放到 Installed Packages 目录下重起SublimeText
3. 然后 在 Data &gt; Packages 目录下 新建 Package Control 文件夹 形如:C:\Sublime Text 2\Data\Packages\Package Control
4. 然后再 将 package Control 压缩包 的内容解压到 Data &gt; Packages &gt; Package Control 文件夹内
5. 最后再重起SublimeText 即可
Ctrl+Shift+P install 即可安装插件
</code></pre><hr>
<h2 id="快捷键列表(Shortcuts-Cheatsheet)"><a href="#快捷键列表(Shortcuts-Cheatsheet)" class="headerlink" title="快捷键列表(Shortcuts Cheatsheet)"></a>快捷键列表(Shortcuts Cheatsheet)</h2><pre><code>调出Console :Ctrl+P
查找 :Ctrl+F
退出面板 :Esc
快速格式化代码 :选中代码 Ctrl+Alt+F
Emmet快速生成HTML框架:
HTML:4t ----&gt; Tab
HTML/! ----&gt; Tab
</code></pre><blockquote>
<p>下述快捷键列表是转载收藏<a href="http://lucida.me/blog/sublime-text-complete-guide/" target="_blank" rel="external">lucida</a>的快捷键列表</p>
</blockquote>
<h3 id="通用(General)"><a href="#通用(General)" class="headerlink" title="通用(General)"></a>通用(General)</h3><pre><code>↑↓←→:上下左右移动光标,注意不是不是KJHL!
Alt:调出菜单
Ctrl + Shift + P:调出命令板(Command Palette)
Ctrl + `:调出控制台
</code></pre><h3 id="编辑(Editing)"><a href="#编辑(Editing)" class="headerlink" title="编辑(Editing)"></a>编辑(Editing)</h3><pre><code>Ctrl + Enter:在当前行下面新增一行然后跳至该行
Ctrl + Shift + Enter:在当前行上面增加一行并跳至该行
Ctrl + ←/→:进行逐词移动
Ctrl + Shift + ←/→进行逐词选择
Ctrl + ↑/↓移动当前显示区域
Ctrl + Shift + ↑/↓移动当前行
选择(Selecting)
Ctrl + D:选择当前光标所在的词并高亮该词所有出现的位置,再次Ctrl + D选择该词出现的下一个位置,在多重选词的过程中,使用Ctrl + K进行跳过,使用Ctrl + U进行回退,使用Esc退出多重编辑
Ctrl + Shift + L:将当前选中区域打散
Ctrl + J:把当前选中区域合并为一行
Ctrl + M:在起始括号和结尾括号间切换
Ctrl + Shift + M:快速选择括号间的内容
Ctrl + Shift + J:快速选择同缩进的内容
Ctrl + Shift + Space:快速选择当前作用域(Scope)的内容
</code></pre><h3 id="查找-amp-替换(Finding-amp-Replacing)"><a href="#查找-amp-替换(Finding-amp-Replacing)" class="headerlink" title="查找&amp;替换(Finding&amp;Replacing)"></a>查找&amp;替换(Finding&amp;Replacing)</h3><pre><code>F3:跳至当前关键字下一个位置
Shift + F3:跳到当前关键字上一个位置
Alt + F3:选中当前关键字出现的所有位置
Ctrl + F/H:进行标准查找/替换,之后:
Alt + C:切换大小写敏感(Case-sensitive)模式
Alt + W:切换整字匹配(Whole matching)模式
Alt + R:切换正则匹配(Regex matching)模式
Ctrl + Shift + H:替换当前关键字
Ctrl + Alt + Enter:替换所有关键字匹配
Ctrl + Shift + F:多文件搜索&amp;替换
跳转(Jumping)
Ctrl + P:跳转到指定文件,输入文件名后可以:
@ 符号跳转:输入@symbol跳转到symbol符号所在的位置
# 关键字跳转:输入#keyword跳转到keyword所在的位置
: 行号跳转:输入:12跳转到文件的第12行。
Ctrl + R:跳转到指定符号
Ctrl + G:跳转到指定行号
</code></pre><h3 id="窗口(Window)"><a href="#窗口(Window)" class="headerlink" title="窗口(Window)"></a>窗口(Window)</h3><pre><code>Ctrl + Shift + N:创建一个新窗口
Ctrl + N:在当前窗口创建一个新标签
Ctrl + W:关闭当前标签,当窗口内没有标签时会关闭该窗口
Ctrl + Shift + T:恢复刚刚关闭的标签
</code></pre><h3 id="屏幕(Screen)"><a href="#屏幕(Screen)" class="headerlink" title="屏幕(Screen)"></a>屏幕(Screen)</h3><pre><code>F11:切换普通全屏
Shift + F11:切换无干扰全屏
Alt + Shift + 2:进行左右分屏
Alt + Shift + 8:进行上下分屏
Alt + Shift + 5:进行上下左右分屏
分屏之后,使用Ctrl + 数字键跳转到指定屏,使用Ctrl + Shift + 数字键将当前屏移动到指定屏
</code></pre><hr>
<h2 id="推荐资料"><a href="#推荐资料" class="headerlink" title="推荐资料"></a>推荐资料</h2><p><a href="http://code.tutsplus.com/courses/perfect-workflow-in-sublime-text-2" target="_blank" rel="external">perfect-workflow-in-sublime-text-2</a></p>
<p><a href="http://lucida.me/blog/sublime-text-complete-guide/" target="_blank" rel="external">sublime-text-complete-guide</a></p>
<p><a href="http://www.jeffjade.com/2015/12/15/2015-04-17-toss-sublime-text/" target="_blank" rel="external">如何优雅地使用Sublime Text3</a></p>
</content>
<summary type="html">
SublimeText
</summary>
<category term="开发工具" scheme="http://aresLove.github.io/categories/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/"/>
<category term="SublimeText" scheme="http://aresLove.github.io/tags/SublimeText/"/>
<category term="前端工具" scheme="http://aresLove.github.io/tags/%E5%89%8D%E7%AB%AF%E5%B7%A5%E5%85%B7/"/>
<category term="常用工具" scheme="http://aresLove.github.io/tags/%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7/"/>
</entry>
<entry>
<title>Oracle物化视图</title>
<link href="http://aresLove.github.io/Oracle/Oracle%E7%89%A9%E5%8C%96%E8%A7%86%E5%9B%BE/"/>
<id>http://aresLove.github.io/Oracle/Oracle物化视图/</id>
<published>2017-02-19T09:34:19.571Z</published>
<updated>2017-02-19T09:34:19.571Z</updated>
<content type="html"><h2 id="问题背景"><a href="#问题背景" class="headerlink" title="问题背景"></a>问题背景</h2><p>客户提出:根据券号来查询相关券活动的信息,提供 REST 接口 供查询;由于 相关券活动 是由 第三方生成,下发到我们系统,再由 我们上传回客户,这中间 那个环节出现问题不清楚,等到发现问题再处理,客户项目上需求已经来不及;故此,客户希望我们系统提供相关 接口 供查询相关 券活动 生成和推送数据</p>
<p> –根据 券号<br> 查询<br> –券号,模板,定义数量,已收到数据路,已推送数量</p>
<p>问题:所查询表数据量非常巨大,响应性能必须解决</p>
<h2 id="处理方法"><a href="#处理方法" class="headerlink" title="处理方法"></a>处理方法</h2><p>因为 couponactivity 券活动表 数据量非常大 已经达到数千万数量,为提高效应效率;采取将相关数据汇总到 物化视图 ,接口通过查询视图来返回相关数据信息 的策略</p>
<h3 id="创建物化视图日志"><a href="#创建物化视图日志" class="headerlink" title="创建物化视图日志"></a>创建物化视图日志</h3><p>物化视图 日志 是 很容易建 成功的 , 但问题是 日志是能建成功 可物化视图 总会 报出 各种问题;经过反复 处理 报错的问题 查找 相关资料;<br>主要受益于 <a href="http://blog.itpub.net/20482996/viewspace-1251469/" target="_blank" rel="external">浅析为何Oracle物化视图对distinct, group by不支持快速刷新</a> 、 <a href="http://www.cnblogs.com/linjiqin/archive/2012/05/23/2514795.html" target="_blank" rel="external">oracle物化视图日志结构</a> 和 <a href="http://www.cnblogs.com/zyizyizyi/archive/2012/04/25/2497824.html" target="_blank" rel="external">Oracle物化视图</a>、<br><a href="http://www.cnblogs.com/juddhu/archive/2012/03/07/2383101.html" target="_blank" rel="external">oracle中的decode的使用</a></p>
<h3 id="创建物化视图"><a href="#创建物化视图" class="headerlink" title="创建物化视图"></a>创建物化视图</h3><p>首先写出 符合 预期结果的 sql 语句,然后 以创建 增量方式快速刷新 的 物化视图为 目标 处理 解决 过程中 遇到的问题</p>
<h4 id="最终实现的如下物化视图"><a href="#最终实现的如下物化视图" class="headerlink" title="最终实现的如下物化视图"></a>最终实现的如下物化视图</h4><figure class="highlight sql"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">--创建物化视图日志</span></span><br><span class="line"><span class="operator"><span class="keyword">create</span> <span class="keyword">materialized</span> <span class="keyword">view</span> <span class="keyword">log</span> <span class="keyword">on</span> couponactivity <span class="keyword">with</span> primary <span class="keyword">key</span>,<span class="keyword">sequence</span>,<span class="keyword">rowid</span>(projectcode,title,codeqty) <span class="keyword">including</span> <span class="keyword">new</span> <span class="keyword">values</span>;</span></span><br><span class="line"><span class="operator"><span class="keyword">create</span> <span class="keyword">materialized</span> <span class="keyword">view</span> <span class="keyword">log</span> <span class="keyword">on</span> coupon <span class="keyword">with</span> primary <span class="keyword">key</span>,<span class="keyword">sequence</span>,<span class="keyword">rowid</span>(couponactivityid,o2ostate) <span class="keyword">including</span> <span class="keyword">new</span> <span class="keyword">values</span>;</span></span><br><span class="line"><span class="comment">--创建物化视图,该物化视图指定了自创建之后开始每10分钟快速增量刷新一次,以保证物化视图的数据和原表统一</span></span><br><span class="line"><span class="operator"><span class="keyword">create</span> <span class="keyword">materialized</span> <span class="keyword">view</span> MVIEW_couponActivityCountData</span><br><span class="line"><span class="keyword">Build</span> <span class="keyword">immediate</span> <span class="keyword">refresh</span> <span class="keyword">fast</span> <span class="keyword">on</span> <span class="keyword">demand</span> <span class="keyword">with</span> <span class="keyword">rowid</span> <span class="keyword">start</span> <span class="keyword">with</span> <span class="keyword">sysdate</span> <span class="keyword">next</span> <span class="keyword">sysdate</span> + <span class="number">10</span>/(<span class="number">24</span>*<span class="number">60</span>) <span class="keyword">as</span> </span><br><span class="line"><span class="keyword">select</span> <span class="keyword">substr</span>(a.projectcode,</span><br><span class="line"> <span class="number">0</span>,</span><br><span class="line"> <span class="keyword">decode</span>(<span class="keyword">sign</span>(<span class="keyword">instr</span>(a.projectcode, <span class="string">','</span>, -<span class="number">1</span>, <span class="number">1</span>) - <span class="number">1</span>),</span><br><span class="line"> -<span class="number">1</span>,</span><br><span class="line"> <span class="keyword">length</span>(a.projectcode),</span><br><span class="line"> <span class="number">1</span>,</span><br><span class="line"> <span class="keyword">instr</span>(a.projectcode, <span class="string">','</span>, -<span class="number">1</span>, <span class="number">1</span>) - <span class="number">1</span>)) billno,</span><br><span class="line"> a.projectcode projectcode,</span><br><span class="line"> a.title activityname,</span><br><span class="line"> a.active_id activityId,</span><br><span class="line"> a.codeqty codeqty,</span><br><span class="line"> <span class="keyword">count</span>(<span class="keyword">p</span>.couponactivityid) receiveqty,</span><br><span class="line"> <span class="keyword">count</span>(<span class="keyword">case</span></span><br><span class="line"> <span class="keyword">when</span> <span class="keyword">p</span>.o2ostate = <span class="number">1</span> <span class="keyword">then</span></span><br><span class="line"> <span class="number">1</span></span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> <span class="literal">null</span></span><br><span class="line"> <span class="keyword">end</span>) pushedqty,</span><br><span class="line"> <span class="keyword">count</span>(*)</span><br><span class="line"> <span class="keyword">from</span> coupon <span class="keyword">p</span>, couponactivity a</span><br><span class="line"> <span class="keyword">where</span> a.active_id = <span class="keyword">p</span>.couponactivityid</span><br><span class="line"> <span class="keyword">and</span> a.projectcode <span class="keyword">is</span> <span class="keyword">not</span> <span class="literal">null</span></span><br><span class="line"><span class="keyword">group</span> <span class="keyword">by</span> a.projectcode, a.title, a.active_id, a.codeqty;</span></span><br></pre></td></tr></table></figure>
<h3 id="创建物化视图注意点"><a href="#创建物化视图注意点" class="headerlink" title="创建物化视图注意点"></a>创建物化视图注意点</h3><p>1.创建适当的物化视图日志,是实现快速增量刷新的物化视图的前提<br>2.查询中需要添加 <strong>count(*)</strong> 才能实现定时自动刷新<br>下述是试验 sql 语句</p>
<figure class="highlight vbnet"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line">-----------------------------------------------------------------------------------------------------</span><br><span class="line">-- 发现一定要加一个count(*)才能自动刷新,定时刷新</span><br><span class="line">-----------------------------------------------------------------------------------------------------</span><br><span class="line">--create materialized view log <span class="keyword">on</span> coupon <span class="keyword">with</span> primary <span class="keyword">key</span>,sequence,rowid(couponactivityid,o2ostate) including <span class="keyword">new</span> values;</span><br><span class="line">-- <span class="keyword">with</span> rowid start sysdate <span class="keyword">next</span> sysdate + <span class="number">1</span>/(<span class="number">24</span>*<span class="number">60</span>)</span><br><span class="line">-- <span class="keyword">next</span> null</span><br><span class="line">/*create materialized view MVIEW_couponCountData</span><br><span class="line">Build immediate refresh fast <span class="keyword">on</span> demand <span class="keyword">with</span> rowid start <span class="keyword">with</span> sysdate <span class="keyword">next</span> sysdate + <span class="number">1</span>/(<span class="number">24</span>*<span class="number">60</span>) <span class="keyword">as</span> </span><br><span class="line"><span class="keyword">select</span> p.couponactivityid activityId,</span><br><span class="line"> count(p.couponactivityid) receiveqty,</span><br><span class="line"> count(<span class="keyword">case</span></span><br><span class="line"> <span class="keyword">when</span> p.o2ostate = <span class="number">1</span> <span class="keyword">then</span></span><br><span class="line"> <span class="number">1</span></span><br><span class="line"> <span class="keyword">else</span></span><br><span class="line"> null</span><br><span class="line"> <span class="keyword">end</span>) pushedqty,</span><br><span class="line"> count(*) </span><br><span class="line"> <span class="keyword">from</span> coupon p</span><br><span class="line"> <span class="keyword">group</span> <span class="keyword">by</span> p.couponactivityid;</span><br><span class="line">*/</span><br><span class="line">--drop materialized view log <span class="keyword">on</span> coupon;</span><br><span class="line">--drop materialized view MVIEW_couponCountData;</span><br><span class="line"><span class="keyword">select</span> * <span class="keyword">from</span> mlog$_coupon;</span><br><span class="line"><span class="keyword">select</span> * <span class="keyword">from</span> coupon p <span class="keyword">where</span> p.couponactivityid=<span class="comment">'81391';</span></span><br><span class="line">/*update coupon p <span class="keyword">set</span> p.o2ostate=<span class="number">0</span> <span class="keyword">where</span> p.couponactivityid=<span class="comment">'81391';</span></span><br><span class="line">commit;*/</span><br></pre></td></tr></table></figure>
<hr>
<h2 id="扩展关于-DBLink-跨库查询-相关"><a href="#扩展关于-DBLink-跨库查询-相关" class="headerlink" title="扩展关于 DBLink 跨库查询 相关"></a>扩展关于 DBLink 跨库查询 相关</h2><figure class="highlight haml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">-<span class="ruby">-查看 dblink信息</span><br><span class="line"></span>-<span class="ruby">-select * from <span class="constant">ALL_DB_LINKS</span>;</span><br><span class="line"></span></span><br><span class="line">-<span class="ruby">-选择一个<span class="constant">DBLink</span>后,要关联这个<span class="constant">DBLink</span>下所有的表名</span><br><span class="line"></span>-<span class="ruby">-select table_name from user_tables<span class="variable">@crmquery</span>;</span></span><br></pre></td></tr></table></figure>
<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>主要耗时 是:在 创建了 物化视图日志之后,创建 物化视图时 报 各种问题;查找很多资料解决相关问题,原因就是 创建的 物化视图 不正确,对于这种复杂查询的 sql 查询创建的 物化视图,需要创建 primary key sequence rowid 的物化视图日志,<br>其中 rowid 中的列 由 group by 语句 后面 的 相关字段 有关;另外就是 对于查询结构的要求,对字符串的截取 substr 和 case 语句的 写法(类似 程序的 if else 功能)使用和学习</p>
<hr>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><p><a href="http://blog.csdn.net/orion61/article/details/6873593" target="_blank" rel="external">oracle物化视图详解</a></p>
<p><a href="http://www.cnblogs.com/linjiqin/archive/2012/05/22/2513551.html" target="_blank" rel="external">Oracle如何根据物化视图日志快速刷新物化视图</a></p>
<p><a href="http://blog.itpub.net/20482996/viewspace-1251469/" target="_blank" rel="external">浅析为何Oracle物化视图对distinct, group by不支持快速刷新</a></p>
<p><a href="http://www.cnblogs.com/linjiqin/archive/2012/05/23/2514795.html" target="_blank" rel="external">oracle物化视图日志结构</a></p>
<p><a href="http://www.cnblogs.com/zyizyizyi/archive/2012/04/25/2497824.html" target="_blank" rel="external">Oracle物化视图</a></p>
<p><a href="http://www.cnblogs.com/sopost/archive/2009/12/23/2190138.html" target="_blank" rel="external">物化视图的快速刷新</a></p>
<p><a href="http://www.cnblogs.com/juddhu/archive/2012/03/07/2383101.html" target="_blank" rel="external">oracle中的decode的使用</a></p>
<p><a href="http://www.cnblogs.com/eshizhan/archive/2012/04/06/2435493.html" target="_blank" rel="external">Oracle CASE WHEN 用法介绍</a></p>
<p><a href="http://www.cnblogs.com/ningvsban/p/3586218.html" target="_blank" rel="external">Oracle中INSTR、SUBSTR和NVL的用法</a></p>
<p><a href="http://blog.csdn.net/hzgang811856054/article/details/7399809" target="_blank" rel="external">oracle获取字符串长度函数length()和hengthb()</a></p>
<p><a href="http://www.2cto.com/database/201409/339237.html" target="_blank" rel="external">使用OracleDBLink进行数据库之间对象的访问操作</a></p>
</content>
<summary type="html">
Oracle 物化视图
</summary>
<category term="Oracle" scheme="http://aresLove.github.io/categories/Oracle/"/>
<category term="Oracle" scheme="http://aresLove.github.io/tags/Oracle/"/>
<category term="物化视图" scheme="http://aresLove.github.io/tags/%E7%89%A9%E5%8C%96%E8%A7%86%E5%9B%BE/"/>
</entry>
<entry>
<title>Java集合类操作经验总结</title>
<link href="http://aresLove.github.io/java/Java%E9%9B%86%E5%90%88%E7%B1%BB%E6%93%8D%E4%BD%9C%E7%BB%8F%E9%AA%8C%E6%80%BB%E7%BB%93/"/>
<id>http://aresLove.github.io/java/Java集合类操作经验总结/</id>
<published>2017-02-19T09:34:19.570Z</published>
<updated>2017-02-19T09:34:19.570Z</updated>
<content type="html"><hr>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><p><a href="http://www.ibm.com/developerworks/cn/java/j-lo-set-operation/index.html" target="_blank" rel="external">集合类操作优化经验总结</a></p>
<p><a href="http://blog.csdn.net/jianxin1009/article/details/22322247" target="_blank" rel="external">不得不知道的Java内存溢出之在经常调用的方法内不要new大对象</a></p>
<p><a href="http://blog.csdn.net/yahuadai/article/details/7675318" target="_blank" rel="external">注意java代码的内存泄漏</a></p>
<p><a href="http://www.blogjava.net/zh-weir/archive/2011/02/23/345007.html" target="_blank" rel="external">Java内存泄露的理解与解决</a></p>
<p><a href="http://www.importnew.com/12074.html" target="_blank" rel="external">Java程序员们最常犯的10个错误</a></p>
<p><a href="http://www.douban.com/group/topic/17850733/" target="_blank" rel="external">【Java程序优化技巧】大总结</a></p>
<p><a href="http://www.lightskystreet.com/2015/09/01/mat_usage/" target="_blank" rel="external">MAT - Memory Analyzer Tool 使用进阶</a></p>
</content>
<summary type="html">
java 集合操作
</summary>
<category term="java" scheme="http://aresLove.github.io/categories/java/"/>
<category term="java" scheme="http://aresLove.github.io/tags/java/"/>
<category term="java集合" scheme="http://aresLove.github.io/tags/java%E9%9B%86%E5%90%88/"/>
<category term="内存泄露,内存溢出" scheme="http://aresLove.github.io/tags/%E5%86%85%E5%AD%98%E6%B3%84%E9%9C%B2%EF%BC%8C%E5%86%85%E5%AD%98%E6%BA%A2%E5%87%BA/"/>
</entry>
<entry>
<title>Java经验总结和优化技巧</title>
<link href="http://aresLove.github.io/java/Java%E7%BB%8F%E9%AA%8C%E6%80%BB%E7%BB%93%E5%92%8C%E4%BC%98%E5%8C%96%E6%8A%80%E5%B7%A7/"/>
<id>http://aresLove.github.io/java/Java经验总结和优化技巧/</id>
<published>2017-02-19T09:34:19.570Z</published>
<updated>2017-02-19T09:34:19.570Z</updated>
<content type="html"><hr>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><p><a href="http://segmentfault.com/a/1190000002761014" target="_blank" rel="external">Google 推出的 Java 编码规范</a></p>
<p><a href="http://www.importnew.com/15605.html" target="_blank" rel="external">Java习惯用法总结</a></p>
<p><a href="https://www.zybuluo.com/king/note/29599" target="_blank" rel="external">Java学习笔记</a></p>
<p><a href="http://blog.csdn.net/evankaka" target="_blank" rel="external">林炳文Evankaka的专栏</a></p>
<p><a href="http://www.ibm.com/developerworks/cn/java/j-javaresources.html" target="_blank" rel="external">必备的 Java 参考资源列表</a></p>
<p><a href="http://segmentfault.com/search?type=article&amp;q=java" target="_blank" rel="external">segmentfault java</a></p>
<p><a href="http://www.importnew.com/16181.html" target="_blank" rel="external">10种简单的Java性能优化</a></p>
<p><a href="http://codecloud.net/java-problem-6283.html" target="_blank" rel="external">Java问题集锦</a></p>
</content>
<summary type="html">
java 代码优化,经验总结
</summary>
<category term="java" scheme="http://aresLove.github.io/categories/java/"/>
<category term="java" scheme="http://aresLove.github.io/tags/java/"/>
<category term="java代码优化" scheme="http://aresLove.github.io/tags/java%E4%BB%A3%E7%A0%81%E4%BC%98%E5%8C%96/"/>
<category term="java经验总结" scheme="http://aresLove.github.io/tags/java%E7%BB%8F%E9%AA%8C%E6%80%BB%E7%BB%93/"/>
</entry>
<entry>
<title>JS模块化规范</title>
<link href="http://aresLove.github.io/javascript/JS%E6%A8%A1%E5%9D%97%E5%8C%96%E8%A7%84%E8%8C%83%E7%9A%84%E5%AD%A6%E4%B9%A0/"/>
<id>http://aresLove.github.io/javascript/JS模块化规范的学习/</id>
<published>2017-02-19T09:34:19.569Z</published>
<updated>2017-02-19T09:34:19.569Z</updated>
<content type="html"><h1 id="JS模块化规范学习笔记"><a href="#JS模块化规范学习笔记" class="headerlink" title="JS模块化规范学习笔记"></a>JS模块化规范学习笔记</h1><h2 id="CommonJS"><a href="#CommonJS" class="headerlink" title="CommonJS"></a>CommonJS</h2><p>CommonJS是主要为了JS在后端的表现制定的,Node遵循CommonJS的规范。</p>
<p>CommonJS定义的模块分为:{模块引用(require)} {模块定义(exports)} {模块标识(module)}</p>
<p>require()用来引入外部模块;exports对象用于导出当前模块的方法或变量,唯一的导出口;module对象就代表模块本身。</p>
<p>概述:CommonJS是JS后端模块化规范,该规范定义的模块划分为:{模块标识(module)}(声明)、{模块定义(exports)}(定义)、{模块引用(require)}(使用)</p>
<h2 id="AMD"><a href="#AMD" class="headerlink" title="AMD"></a>AMD</h2><p>AMD(异步模块定义)是主要为前端JS的表现制定的,RequireJS就是实现了AMD规范。</p>
<p>异步模块定义规范(AMD)制定了定义模块的规则,这样模块和模块的依赖可以被异步加载。这和浏览器的异步加载模块的环境刚好适应(浏览器同步加载模块会导致性能、可用性、调试和跨域访问等问题)</p>
<p>只定义了一个函数 “define”,它是全局变量。define(id?, dependencies?, factory); </p>
<p>AMD的模块名规范是CommonJS模块名规范的超集。AMD可以作为CommonJS模块一个中转的版本只要CommonJS没有被用来同步的require调用。使用同步require调用的CommonJS代码可以被转换为使用回调风格的AMD模块加载器。</p>
<p>概述:AMD(异步模块定义)是JS前端模块化规范,只定义了一个函数 “define”,并且它是全局变量。</p>
<h2 id="CMD"><a href="#CMD" class="headerlink" title="CMD"></a>CMD</h2><p>CMD(Common Module Definition)明确了模块的基本书写格式和基本交互规则,与AMD蛮相近的,不过用起来感觉更加方便些,seajs遵循CMD规范。</p>
<p>Sea.js 是一个成熟的开源项目,核心目标是给前端开发提供简单、极致的模块化开发体验。</p>
<p>在 CMD 规范中,一个模块就是一个文件,代码的书写格式:define(factory); define 是一个全局函数,用来定义模块。具体了解:<a href="https://github.com/seajs/seajs/issues/242" target="_blank" rel="external">CMD 模块定义规范</a></p>
<p>概述:CMD(通用模块定义)是JS前端模块化规范,明确了模块的基本书写格式和基本交互规则,使用更加方便。</p>
<h2 id="SeaJs和RequireJs的异同"><a href="#SeaJs和RequireJs的异同" class="headerlink" title="SeaJs和RequireJs的异同"></a>SeaJs和RequireJs的异同</h2><p>共同点:</p>
<p>RequireJS 和 Sea.js 都是模块加载器,倡导模块化开发理念,核心价值是让 JavaScript 的模块化开发变得简单自然。</p>
<p>不同点:</p>
<p>两者的主要区别如下:</p>
<p>1.定位有差异。RequireJS 想成为浏览器端的模块加载器,同时也想成为 Rhino / Node 等环境的模块加载器。Sea.js 则专注于 Web 浏览器端,同时通过 Node 扩展的方式可以很方便跑在 Node 环境中。</p>
<p>2.遵循的规范不同。RequireJS 遵循 AMD(异步模块定义)规范,Sea.js 遵循 CMD (通用模块定义)规范。规范的不同,导致了两者 API 不同。Sea.js 更贴近 CommonJS Modules/1.1 和 Node Modules 规范。</p>
<p>3.推广理念有差异。RequireJS 在尝试让第三方类库修改自身来支持 RequireJS,目前只有少数社区采纳。Sea.js 不强推,采用自主封装的方式来“海纳百川”,目前已有较成熟的封装策略。</p>
<p>4.对开发调试的支持有差异。Sea.js 非常关注代码的开发调试,有 nocache、debug 等用于调试的插件。RequireJS 无这方面的明显支持。</p>
<p>5.插件机制不同。RequireJS 采取的是在源码中预留接口的形式,插件类型比较单一。Sea.js 采取的是通用事件机制,插件类型更丰富。</p>
<p>还有不少差异,涉及具体使用方式和源码实现,欢迎有兴趣者研究并发表看法。</p>
<p>总之,如果说 RequireJS 是 Prototype 类库的话,则 Sea.js 致力于成为 jQuery 类库。</p>
<p><a href="http://www.zhihu.com/question/20351507" target="_blank" rel="external">AMD 和 CMD 的区别</a></p>
<p>执行模块的机制大不一样</p>
<p>SeaJS对模块的态度是懒执行, 而RequireJS对模块的态度是预执行</p>
<p>AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。CMD 是 SeaJS 在推广过程中对模块定义的规范化产出。</p>
<p>对于依赖的模块,AMD 是提前执行,CMD 是延迟执行。不过 RequireJS 从 2.0 开始,也改成可以延迟执行(根据写法不同,处理方式不同)。CMD 推崇 as lazy as possible.2. CMD 推崇依赖就近,AMD 推崇依赖前置<br>AMD 的 API 默认是一个当多个用,CMD 的 API 严格区分,推崇职责单一。</p>
<hr>
<h2 id="推荐资料"><a href="#推荐资料" class="headerlink" title="推荐资料"></a>推荐资料</h2><p><a href="http://www.cnblogs.com/skylar/p/4065455.html" target="_blank" rel="external">浅析JS中的模块规范(CommonJS,AMD,CMD)</a></p>
<p><a href="https://github.com/amdjs/amdjs-api/wiki/AMD" target="_blank" rel="external">AMD 模块定义规范</a><br><a href="https://github.com/seajs/seajs/issues/242" target="_blank" rel="external">CMD 模块定义规范</a></p>
<p><a href="http://www.zhihu.com/question/20351507" target="_blank" rel="external">AMD 和 CMD 的区别</a></p>
<p><a href="https://lifesinger.wordpress.com/2011/05/17/the-difference-between-seajs-and-requirejs/" target="_blank" rel="external">SeaJS 和 RequireJS 的异同</a></p>
</content>
<summary type="html">
javascript,javascript模块化,javascript规范,CommonJS,AMD,CMD,node,RequireJS,SeaJs
</summary>
<category term="javascript" scheme="http://aresLove.github.io/categories/javascript/"/>
<category term="javascript,javascript模块化,javascript规范" scheme="http://aresLove.github.io/tags/javascript%EF%BC%8Cjavascript%E6%A8%A1%E5%9D%97%E5%8C%96%EF%BC%8Cjavascript%E8%A7%84%E8%8C%83/"/>
</entry>
<entry>
<title>java访问本机代码【调用C、C++类库】</title>
<link href="http://aresLove.github.io/java/JNA%E8%AE%BF%E9%97%AE%E6%9C%AC%E6%9C%BA%E4%BB%A3%E7%A0%81/"/>
<id>http://aresLove.github.io/java/JNA访问本机代码/</id>
<published>2017-02-19T09:34:19.569Z</published>
<updated>2017-02-19T09:34:19.569Z</updated>
<content type="html"><h2 id="背景介绍"><a href="#背景介绍" class="headerlink" title="背景介绍"></a>背景介绍</h2><p> 由于 java 的跨平台和可移植性,没有c、c++好,因此,由c、c++来提供高可移植性和跨平台性的类库供各种平台和语言来调用提供的接口,实现请求转发和调用底层驱动。<br> 编写的dll类库文件主要用于Linux和windows98及windowXp以上平台中方便于Delphi、VB、C#、java等语言编写的界面来调用提供的接口。</p>
<h2 id="java调用dll接口产生的问题及处理总结"><a href="#java调用dll接口产生的问题及处理总结" class="headerlink" title="java调用dll接口产生的问题及处理总结"></a>java调用dll接口产生的问题及处理总结</h2><h3 id="调用dll类库导致应用崩溃"><a href="#调用dll类库导致应用崩溃" class="headerlink" title="调用dll类库导致应用崩溃"></a>调用dll类库导致应用崩溃</h3><p> 这种问题主要分两种情况,一种是c++类库内部崩溃,另一种是java和C++类库接口传入和转换类库返回的值导致崩溃的</p>
<h4 id="c-类库内部崩溃"><a href="#c-类库内部崩溃" class="headerlink" title="c++类库内部崩溃"></a>c++类库内部崩溃</h4><p> 这种问题,多因指针和数据内存泄露导致,各种代码情况很多</p>
<pre><code>传入参数开辟的空间不足,而 c++ 程序中 使用超出了分配的空间,
比如:
java 代码中:
byte[] name = new byte[20];
调用dll接口
c++ 代码中:
strncpy((char*) name, response.memberInfo.name.c_str(), 30);
上述这种问题,是我犯过的错误,花费了不少调试时间才找出来原因;由于定义java变量的时候,疏忽了,导致这种问题,
在java调用dll类库运行时就会使得java应用崩溃,实际原因是c++内部崩溃,耗费时间调试查找原因,而且很难想到,因为
strncpy这种简单的操作很容易忽略,认为不会出问题
</code></pre><h4 id="java和c-类库接口传入和传出参数转换不当"><a href="#java和c-类库接口传入和传出参数转换不当" class="headerlink" title="java和c++类库接口传入和传出参数转换不当"></a>java和c++类库接口传入和传出参数转换不当</h4><p> (一)接口参数类型对应</p>
<p> 1.值类型参数</p>
<pre><code>java c、c++
NativeLong long
short short
int int
long long long, __int64
float float
double double
boolean int
byte char
</code></pre><p> 2.指针类型参数</p>
<p> java 使用 jna.jar 包中的 com.sun.jna.ptr 包中的相关数据类型</p>
<pre><code>java c、c++
ShortByReference short*
IntByReference int*
NativeLongReference/LongByReference long*
FloatByReference float*
DoubleByReference double*
ByteByReference byte*
byte[] char*/uchar*/byte*
String char*/uchar*
PointerByReference 二维数组(指针的指针)
传入参数:
java c、c++
Native.toByteArray(String values) char*/uchar*
</code></pre><p> (二)取到传出参数值</p>
<p> 1.值类型参数</p>
<pre><code>variable.getValue()
</code></pre><p> 2.指针类型参数</p>
<pre><code>java程序中 的 byte[] 类型的变量 获取值 的问题:
Native.toString(变量) 而 变量.toString() 输出的 结果是 该变量的内存地址 而非 我们所想要的值
使用 变量.toString() 出现的现象:
取值不完整或取不到,也可能取到内存地址
</code></pre><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p> 一般的容易出问题而且出问题最多的就是 java 和 c++ 接口 调用的时候,而且,很多是 由于 java 代码而导致的问题,因此首先和 c++ 提供的接口声明对比,查找 java 相关代码的问题排查</p>
<hr>
<h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><p><a href="http://blog.csdn.net/shendl/article/details/3589676" target="_blank" rel="external">JNA—JNI终结者</a></p>
</content>
<summary type="html">
java访问本机代码,java调用C、C++类库
</summary>
<category term="java" scheme="http://aresLove.github.io/categories/java/"/>