1
1
package io .github .lvyahui8 .spring .autoconfigure ;
2
2
3
+ import io .github .lvyahui8 .spring .aggregate .config .RuntimeSettings ;
3
4
import io .github .lvyahui8 .spring .aggregate .facade .DataBeanAggregateQueryFacade ;
4
5
import io .github .lvyahui8 .spring .aggregate .facade .impl .DataBeanAggregateQueryFacadeImpl ;
5
6
import io .github .lvyahui8 .spring .aggregate .model .*;
20
21
import org .springframework .context .ApplicationContextAware ;
21
22
import org .springframework .context .annotation .Bean ;
22
23
import org .springframework .context .annotation .Configuration ;
24
+ import org .springframework .core .annotation .AnnotationUtils ;
23
25
import org .springframework .scheduling .concurrent .CustomizableThreadFactory ;
26
+ import org .springframework .util .Assert ;
27
+ import org .springframework .util .StringUtils ;
24
28
25
29
import java .lang .reflect .Method ;
26
30
import java .lang .reflect .Parameter ;
@@ -56,6 +60,7 @@ public DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade() {
56
60
DataProviderRepository repository = new DataProviderRepositoryImpl ();
57
61
scanProviders (repository );
58
62
DataBeanAgregateQueryServiceImpl service = new DataBeanAgregateQueryServiceImpl (repository );
63
+ service .setRuntimeSettings (createRuntimeSettings ());
59
64
service .setExecutorService (aggregateExecutorService ());
60
65
service .setApplicationContext (applicationContext );
61
66
return new DataBeanAggregateQueryFacadeImpl (service );
@@ -64,13 +69,12 @@ public DataBeanAggregateQueryFacade dataBeanAggregateQueryFacade() {
64
69
@ Bean (name = "aggregateExecutorService" )
65
70
@ ConditionalOnMissingBean (name = "aggregateExecutorService" )
66
71
public ExecutorService aggregateExecutorService () {
67
- log .info ("create a ThreadPoolExecutor" );
68
72
return new ThreadPoolExecutor (
69
- 4 ,
70
- properties .getThreadNumber () < 4 ? 4 : properties . getThreadNumber () ,
73
+ properties . getThreadNumber () ,
74
+ properties .getThreadNumber () ,
71
75
2L , TimeUnit .HOURS ,
72
76
new LinkedBlockingDeque <>(properties .getQueueSize ()),
73
- new CustomizableThreadFactory ("aggregateTask-" ));
77
+ new CustomizableThreadFactory (properties . getThreadPrefix () ));
74
78
}
75
79
76
80
private void scanProviders (DataProviderRepository repository ) {
@@ -87,10 +91,12 @@ private void scanProviders(DataProviderRepository repository) {
87
91
88
92
private void dealProvideMethod (DataProviderRepository repository , Method method ) {
89
93
DataProvideDefination provider = new DataProvideDefination ();
90
- DataProvider beanProvider = method .getAnnotation (DataProvider .class );
91
- provider .setId (beanProvider .id ());
94
+ DataProvider beanProvider = AnnotationUtils .findAnnotation (method , DataProvider .class );
95
+ String dataId = beanProvider .id ();
96
+ Assert .isTrue (! StringUtils .isEmpty (dataId ),"data id must be not null!" );
97
+ provider .setId (dataId );
92
98
provider .setMethod (method );
93
- provider .setTimeout (beanProvider .timeout ());
99
+ provider .setTimeout (beanProvider .timeout () > 0 ? beanProvider . timeout () : properties . getDefaultTimeout () );
94
100
Parameter [] parameters = provider .getMethod ().getParameters ();
95
101
List <MethodArg > methodArgs = new ArrayList <>(method .getParameterCount ());
96
102
provider .setDepends (new ArrayList <>(method .getParameterCount ()));
@@ -99,31 +105,40 @@ private void dealProvideMethod(DataProviderRepository repository, Method method)
99
105
dealMethodParamter (provider , methodArgs , parameter );
100
106
}
101
107
provider .setMethodArgs (methodArgs );
102
- repository .put (beanProvider . id () ,provider );
108
+ repository .put (dataId ,provider );
103
109
}
104
110
105
111
private void dealMethodParamter (DataProvideDefination provideDefination , List <MethodArg > methodArgs , Parameter parameter ) {
112
+ DataConsumer dataConsumer = AnnotationUtils .findAnnotation (parameter , DataConsumer .class );
113
+ InvokeParameter invokeParameter = AnnotationUtils .findAnnotation (parameter ,InvokeParameter .class );
114
+ Assert .isTrue (dataConsumer != null || invokeParameter != null ,
115
+ "Parameters must be added @InvokeParameter or @DataConsumer annotation" );
106
116
MethodArg methodArg = new MethodArg ();
107
- DataConsumer bean = parameter . getAnnotation ( DataConsumer . class );
108
- InvokeParameter invokeParameter = parameter . getAnnotation ( InvokeParameter . class );
109
- if ( bean != null ) {
110
- methodArg .setAnnotionKey (bean . id () );
117
+ if ( dataConsumer != null ) {
118
+ String dataId = dataConsumer . id ( );
119
+ Assert . isTrue (! StringUtils . isEmpty ( dataId ), "data id must be not null!" );
120
+ methodArg .setAnnotionKey (dataId );
111
121
methodArg .setDenpendType (DenpendType .OTHER_MODEL );
112
122
DataConsumeDefination dataConsumeDefination = new DataConsumeDefination ();
113
123
dataConsumeDefination .setClazz (parameter .getType ());
114
- dataConsumeDefination .setId (bean . id () );
124
+ dataConsumeDefination .setId (dataId );
115
125
provideDefination .getDepends ().add (dataConsumeDefination );
116
- } else if ( invokeParameter != null ) {
126
+ } else {
117
127
methodArg .setAnnotionKey (invokeParameter .value ());
118
128
methodArg .setDenpendType (DenpendType .INVOKE_PARAM );
119
129
InvokeParameterDefination parameterDefination = new InvokeParameterDefination ();
120
130
parameterDefination .setKey (invokeParameter .value ());
121
131
provideDefination .getParams ().add (parameterDefination );
122
- } else {
123
- throw new IllegalArgumentException (
124
- "paramter must ananotion by InvokeParameter or DataConsumer" );
125
132
}
126
133
methodArg .setParameter (parameter );
127
134
methodArgs .add (methodArg );
128
135
}
136
+
137
+ private RuntimeSettings createRuntimeSettings () {
138
+ RuntimeSettings runtimeSettings = new RuntimeSettings ();
139
+ runtimeSettings .setEnableLogging (properties .getEnableLogging () != null
140
+ ? properties .getEnableLogging () : false );
141
+ return runtimeSettings ;
142
+ }
143
+
129
144
}
0 commit comments