Skip to content

Commit 25a63ae

Browse files
committed
BAEL-8140: code samples
1 parent fb8a1be commit 25a63ae

File tree

6 files changed

+108
-3
lines changed

6 files changed

+108
-3
lines changed

persistence-modules/spring-boot-persistence-5/pom.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@
8383
<instancio.version>5.2.1</instancio.version>
8484
<spring-boot.version>3.4.1</spring-boot.version>
8585
<db2.version>12.1.0.0</db2.version>
86+
<java.version>17</java.version>
87+
<maven.compiler.source>17</maven.compiler.source>
88+
<maven.compiler.target>17</maven.compiler.target>
8689
</properties>
8790

8891
</project>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.baeldung.transactional.rollback;
2+
3+
import jakarta.annotation.Nonnull;
4+
import jakarta.persistence.Column;
5+
import jakarta.persistence.Entity;
6+
import jakarta.persistence.GeneratedValue;
7+
import jakarta.persistence.GenerationType;
8+
import jakarta.persistence.Id;
9+
10+
import lombok.Data;
11+
import lombok.NoArgsConstructor;
12+
13+
@Data
14+
@Entity
15+
@NoArgsConstructor
16+
class Article {
17+
18+
@Id
19+
@GeneratedValue(strategy = GenerationType.SEQUENCE)
20+
private Long id;
21+
22+
@Column(nullable = false)
23+
private String title;
24+
25+
@Column(nullable = false)
26+
private String author;
27+
28+
public Article(String title, String author) {
29+
this.title = title;
30+
this.author = author;
31+
}
32+
33+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.baeldung.transactional.rollback;
2+
3+
import org.springframework.data.jpa.repository.JpaRepository;
4+
import org.springframework.stereotype.Repository;
5+
6+
@Repository
7+
interface ArticleRepo extends JpaRepository<Article, Long> {
8+
}

spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/micrometer/tags/Application.java

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,21 @@
33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
55
import org.springframework.context.annotation.Bean;
6+
import org.springframework.expression.Expression;
7+
import org.springframework.expression.ExpressionParser;
8+
import org.springframework.expression.spel.SpelParserConfiguration;
9+
import org.springframework.expression.spel.standard.SpelExpressionParser;
10+
import org.springframework.expression.spel.support.SimpleEvaluationContext;
11+
import org.springframework.expression.spel.support.StandardEvaluationContext;
612

13+
import io.micrometer.common.annotation.ValueExpressionResolver;
714
import io.micrometer.core.aop.CountedAspect;
815
import io.micrometer.core.aop.CountedMeterTagAnnotationHandler;
916
import io.micrometer.core.aop.MeterTagAnnotationHandler;
1017
import io.micrometer.core.aop.TimedAspect;
1118

1219
@SpringBootApplication
13-
class Application {
20+
public class Application {
1421

1522
public static void main(String[] args) {
1623
SpringApplication.run(Application.class, args);
@@ -27,10 +34,32 @@ public MeterTagAnnotationHandler meterTagAnnotationHandler() {
2734
public CountedAspect countedAspect() {
2835
CountedAspect aspect = new CountedAspect();
2936
CountedMeterTagAnnotationHandler tagAnnotationHandler = new CountedMeterTagAnnotationHandler(
30-
aClass -> Object::toString,
31-
aClass -> (exp, param) -> "");
37+
aClass -> o -> new SpelValueExpressionResolver().resolve(o.toString(), null),
38+
aClass -> new SpelValueExpressionResolver());
3239
aspect.setMeterTagAnnotationHandler(tagAnnotationHandler);
3340
return aspect;
3441
}
3542

43+
public static class SpelValueExpressionResolver implements ValueExpressionResolver {
44+
45+
@Override
46+
public String resolve(String expression, Object parameter) {
47+
try {
48+
SpelParserConfiguration config = new SpelParserConfiguration(true, true);
49+
StandardEvaluationContext context = new StandardEvaluationContext(parameter);
50+
51+
ExpressionParser expressionParser = new SpelExpressionParser(config);
52+
return expressionParser.parseExpression(expression)
53+
.getValue(context, String.class);
54+
55+
// ExpressionParser expressionParser = new SpelExpressionParser();
56+
// Expression expressionToEvaluate = expressionParser.parseExpression(expression);
57+
// return expressionToEvaluate.getValue(parameter, String.class);
58+
}
59+
catch (Exception ex) {
60+
ex.printStackTrace(); // todo: proper logging
61+
}
62+
return String.valueOf(parameter);
63+
}
64+
}
3665
}

spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/micrometer/tags/dummy/DummyService.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
package com.baeldung.micrometer.tags.dummy;
22

3+
import java.math.BigDecimal;
34
import java.util.concurrent.ThreadLocalRandom;
45

56
import org.slf4j.Logger;
67
import org.slf4j.LoggerFactory;
78
import org.springframework.stereotype.Service;
89

10+
import com.baeldung.micrometer.tags.Application;
11+
912
import io.micrometer.core.annotation.Counted;
1013
import io.micrometer.core.annotation.Timed;
1114
import io.micrometer.core.aop.MeterTag;
15+
import io.micrometer.core.aop.MeterTags;
1216
import io.micrometer.core.instrument.Counter;
1317
import io.micrometer.core.instrument.Meter;
1418
import io.micrometer.core.instrument.MeterRegistry;
@@ -65,6 +69,23 @@ public String buzz(@MeterTag("device.type") String device) {
6569
return invokeSomeLogic();
6670
}
6771

72+
@Counted(value = "fizz")
73+
public String fizz(
74+
@MeterTag(key = "id", expression = "#order.id")
75+
@MeterTag(key = "other.id", expression = "#order.otherOrder.id")
76+
@MeterTag(key = "math", expression = "20 - 1")
77+
@MeterTag(key = "total", expression = "#order.total")
78+
@MeterTag(key = "other.total", expression = "#order.otherOrder.total")
79+
@MeterTag(key = "total.group", expression = "#order.total > 50 ? 'high' : 'low'")
80+
Order order
81+
) {
82+
log.info("fizz({})", order);
83+
return invokeSomeLogic();
84+
}
85+
86+
public record Order(int id, int total, Order otherOrder) {
87+
}
88+
6889
private String invokeSomeLogic() {
6990
long sleepMs = ThreadLocalRandom.current()
7091
.nextInt(0, 100);

spring-boot-modules/spring-boot-3-observation/src/main/java/com/baeldung/micrometer/tags/dummy/DummyStartupListener.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.baeldung.micrometer.tags.dummy;
22

33
import java.util.List;
4+
import java.util.concurrent.ThreadLocalRandom;
45
import java.util.stream.IntStream;
56

67
import org.springframework.boot.context.event.ApplicationReadyEvent;
78
import org.springframework.context.event.EventListener;
89
import org.springframework.stereotype.Component;
910

11+
import com.baeldung.micrometer.tags.dummy.DummyService.Order;
12+
1013
@Component
1114
class DummyStartupListener {
1215

@@ -24,9 +27,17 @@ void sendRequests() {
2427
service.foo(deviceType);
2528
service.bar(deviceType);
2629
service.buzz(deviceType);
30+
service.fizz(
31+
new Order(randomInt(), randomInt(),
32+
new Order(randomInt(), randomInt(), null)));
2733
});
2834
}
2935

36+
int randomInt() {
37+
return ThreadLocalRandom.current()
38+
.nextInt(1, 100);
39+
}
40+
3041
DummyStartupListener(DummyService service) {
3142
this.service = service;
3243
}

0 commit comments

Comments
 (0)