27
27
import io .micrometer .core .instrument .simple .SimpleMeterRegistry ;
28
28
import org .junit .Test ;
29
29
30
+ import org .springframework .aop .framework .ProxyFactory ;
30
31
import org .springframework .beans .BeansException ;
31
32
import org .springframework .beans .factory .config .BeanPostProcessor ;
32
33
import org .springframework .boot .actuate .autoconfigure .metrics .test .MetricsRun ;
39
40
import org .springframework .context .annotation .Configuration ;
40
41
import org .springframework .core .Ordered ;
41
42
import org .springframework .core .PriorityOrdered ;
43
+ import org .springframework .jdbc .datasource .DelegatingDataSource ;
42
44
43
45
import static org .assertj .core .api .Assertions .assertThat ;
44
46
@@ -185,6 +187,25 @@ public void someHikariDataSourcesCanBeInstrumented() {
185
187
});
186
188
}
187
189
190
+ @ Test
191
+ public void hikariProxiedDataSourceCanBeInstrumented () {
192
+ this .contextRunner
193
+ .withUserConfiguration (ProxiedHikariDataSourcesConfiguration .class )
194
+ .withConfiguration (
195
+ AutoConfigurations .of (DataSourceAutoConfiguration .class ))
196
+ .run ((context ) -> {
197
+ context .getBean ("proxiedDataSource" , DataSource .class )
198
+ .getConnection ();
199
+ context .getBean ("delegateDataSource" , DataSource .class )
200
+ .getConnection ();
201
+ MeterRegistry registry = context .getBean (MeterRegistry .class );
202
+ registry .get ("hikaricp.connections" ).tags ("pool" , "firstDataSource" )
203
+ .meter ();
204
+ registry .get ("hikaricp.connections" ).tags ("pool" , "secondOne" )
205
+ .meter ();
206
+ });
207
+ }
208
+
188
209
@ Test
189
210
public void hikariDataSourceIsInstrumentedWithoutMetadataProvider () {
190
211
this .contextRunner .withUserConfiguration (OneHikariDataSourceConfiguration .class )
@@ -199,6 +220,14 @@ public void hikariDataSourceIsInstrumentedWithoutMetadataProvider() {
199
220
});
200
221
}
201
222
223
+ private static HikariDataSource createHikariDataSource (String poolName ) {
224
+ String url = "jdbc:hsqldb:mem:test-" + UUID .randomUUID ();
225
+ HikariDataSource hikariDataSource = DataSourceBuilder .create ().url (url )
226
+ .type (HikariDataSource .class ).build ();
227
+ hikariDataSource .setPoolName (poolName );
228
+ return hikariDataSource ;
229
+ }
230
+
202
231
@ Configuration
203
232
static class BaseConfiguration {
204
233
@@ -242,12 +271,20 @@ public DataSource secondOne() {
242
271
return createHikariDataSource ("secondOne" );
243
272
}
244
273
245
- private HikariDataSource createHikariDataSource (String poolName ) {
246
- String url = "jdbc:hsqldb:mem:test-" + UUID .randomUUID ();
247
- HikariDataSource hikariDataSource = DataSourceBuilder .create ().url (url )
248
- .type (HikariDataSource .class ).build ();
249
- hikariDataSource .setPoolName (poolName );
250
- return hikariDataSource ;
274
+ }
275
+
276
+ @ Configuration
277
+ static class ProxiedHikariDataSourcesConfiguration {
278
+
279
+ @ Bean
280
+ public DataSource proxiedDataSource () {
281
+ return (DataSource ) new ProxyFactory (
282
+ createHikariDataSource ("firstDataSource" )).getProxy ();
283
+ }
284
+
285
+ @ Bean
286
+ public DataSource delegateDataSource () {
287
+ return new DelegatingDataSource (createHikariDataSource ("secondOne" ));
251
288
}
252
289
253
290
}
@@ -257,11 +294,7 @@ static class OneHikariDataSourceConfiguration {
257
294
258
295
@ Bean
259
296
public DataSource hikariDataSource () {
260
- String url = "jdbc:hsqldb:mem:test-" + UUID .randomUUID ();
261
- HikariDataSource hikariDataSource = DataSourceBuilder .create ().url (url )
262
- .type (HikariDataSource .class ).build ();
263
- hikariDataSource .setPoolName ("hikariDataSource" );
264
- return hikariDataSource ;
297
+ return createHikariDataSource ("hikariDataSource" );
265
298
}
266
299
267
300
}
0 commit comments