这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions spring-boot-modules/spring-boot-3-observation/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -103,12 +103,33 @@
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>21</source>
<target>21</target>
</configuration>
</plugin>
</plugins>
</build>

<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-bom</artifactId>
<version>${micrometer.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<properties>
<start-class>com.baeldung.samples.SimpleObservationApplication</start-class>
<p6spy-spring-boot-starter.version>1.9.0</p6spy-spring-boot-starter.version>
<micrometer.version>1.15.3</micrometer.version>
</properties>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.baeldung.micrometer.tags;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

import io.micrometer.core.aop.CountedAspect;
import io.micrometer.core.aop.CountedMeterTagAnnotationHandler;
import io.micrometer.core.aop.MeterTagAnnotationHandler;
import io.micrometer.core.aop.TimedAspect;

@SpringBootApplication
class Application {

public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}

@Bean
public MeterTagAnnotationHandler meterTagAnnotationHandler() {
return new MeterTagAnnotationHandler(
aClass -> Object::toString,
aClass -> (exp, param) -> "");
}

@Bean
public CountedAspect countedAspect() {
CountedAspect aspect = new CountedAspect();
CountedMeterTagAnnotationHandler tagAnnotationHandler = new CountedMeterTagAnnotationHandler(
aClass -> Object::toString,
aClass -> (exp, param) -> "");
aspect.setMeterTagAnnotationHandler(tagAnnotationHandler);
return aspect;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.baeldung.micrometer.tags.dummy;

import java.util.concurrent.ThreadLocalRandom;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import io.micrometer.core.annotation.Counted;
import io.micrometer.core.annotation.Timed;
import io.micrometer.core.aop.MeterTag;
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;

@Service
class DummyService {

private static final Logger log = LoggerFactory.getLogger(DummyService.class);

private final MeterRegistry meterRegistry;
private final Meter.MeterProvider<Counter> counterProvider;
private final Meter.MeterProvider<Timer> timerProvider;

public DummyService(MeterRegistry meterRegistry) {
this.meterRegistry = meterRegistry;

this.counterProvider = Counter.builder("bar.count")
.withRegistry(meterRegistry);
this.timerProvider = Timer.builder("bar.time")
.withRegistry(meterRegistry);
}

public String foo(String deviceType) {
log.info("foo({})", deviceType);

Counter.builder("foo.count")
.tag("device.type", deviceType)
.register(meterRegistry)
.increment();
String response = Timer.builder("foo.time")
.tag("device.type", deviceType)
.register(meterRegistry)
.record(this::invokeSomeLogic);

return response;
}

public String bar(String device) {
log.info("bar({})", device);

counterProvider.withTag("device.type", device)
.increment();
String response = timerProvider.withTag("device.type", device)
.record(this::invokeSomeLogic);

return response;
}

@Timed("buzz.time")
@Counted("buzz.count")
public String buzz(@MeterTag("device.type") String device) {
log.info("buzz({})", device);
return invokeSomeLogic();
}

private String invokeSomeLogic() {
long sleepMs = ThreadLocalRandom.current()
.nextInt(0, 100);
try {
Thread.sleep(sleepMs);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
return "dummy response";
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.baeldung.micrometer.tags.dummy;

import java.util.List;
import java.util.stream.IntStream;

import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

@Component
class DummyStartupListener {

private static final List<String> deviceTypes = List.of("desktop", "mobile", "tablet", "smart_tv", "wearable");

private final DummyService service;

@EventListener(ApplicationReadyEvent.class)
void sendRequests() {
IntStream.range(0, 100)
.map(it -> it % deviceTypes.size())
.mapToObj(deviceTypes::get)
.parallel()
.forEach(deviceType -> {
service.foo(deviceType);
service.bar(deviceType);
service.buzz(deviceType);
});
}

DummyStartupListener(DummyService service) {
this.service = service;
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
management:
observations:
annotations:
enabled: true
endpoints:
web:
exposure:
Expand Down