README.md
1 # spring
2 [![Build Status][travis-image]][travis-url]
3 [![Windows Build Status][appveyor-image]][appveyor-url]
4 [![Maven Central][maven-image]][maven-url]
5
6 Provides annotation support for projects that use Spring.
7
8 ## Quickstart
9
10 ### Add the dependencies to your project.
11
12 Replace `SPRING_VERSION` with the version of spring you're using.
13
14 For Maven add to your `pom.xml`:
15 ```xml
16 <dependencies>
17 <!-- census -->
18 <dependency>
19 <groupId>io.opencensus</groupId>
20 <artifactId>opencensus-api</artifactId>
21 <version>0.16.1</version>
22 </dependency>
23 <dependency>
24 <groupId>io.opencensus</groupId>
25 <artifactId>opencensus-contrib-spring</artifactId>
26 <version>0.16.1</version>
27 </dependency>
28 <dependency>
29 <groupId>io.opencensus</groupId>
30 <artifactId>opencensus-impl</artifactId>
31 <version>0.16.1</version>
32 <scope>runtime</scope>
33 </dependency>
34
35 <!-- spring aspects -->
36 <dependency>
37 <groupId>org.springframework</groupId>
38 <artifactId>spring-aspects</artifactId>
39 <version>SPRING_VERSION</version>
40 <scope>runtime</scope>
41 </dependency>
42
43 </dependencies>
44 ```
45
46 For Gradle add to your dependencies:
47 ```gradle
48 compile 'io.opencensus:opencensus-api:0.16.1'
49 compile 'io.opencensus:opencensus-contrib-spring:0.16.1'
50 runtime 'io.opencensus:opencensus-impl:0.16.1'
51 runtime 'org.springframework:spring-aspects:SPRING_VERSION'
52 ```
53
54 ### Features
55
56 #### Traced Annotation
57
58 The `opencensus-contrib-spring` package provides support for a `@Traced` annotation
59 that can be applied to methods. When applied, the method will be wrapped in a
60 Span, [https://github.com/census-instrumentation/opencensus-specs/blob/master/trace/Span.md](https://github.com/census-instrumentation/opencensus-specs/blob/master/trace/Span.md)
61
62 If the method throws an exception, the `Span` will be marked with a status of `Status.UNKNOWN`
63 and the stack trace will be added to the span as an annotation.
64
65 To enable the `@Traced` annotation, include the `CensusSpringAspect` bean.
66
67 ```xml
68 <!-- traces explicit calls to Traced -->
69 <bean id="censusAspect" class="io.opencensus.contrib.spring.aop.CensusSpringAspect">
70 <constructor-arg ref="tracer"/>
71 </bean>
72 ```
73
74 #### Database Support
75
76 The `opencensus-contrib-spring` package also includes support for tracing database
77 calls. When database support is included, all calls to `java.sql.PreparedStatement.execute*`
78 will be wrapped in a Span in the same way that `@Traced` wraps methods.
79
80 To enable database support, include the `CensusSpringSqlAspect` bean.
81
82 ```xml
83 <!-- traces all SQL calls -->
84 <bean id="censusSQLAspect" class="io.opencensus.contrib.spring.aop.CensusSpringSqlAspect">
85 <constructor-arg ref="tracer"/>
86 </bean>
87 ```
88
89 #### Complete Spring XML configuration
90
91 The following contains a complete spring xml file to configure `opencensus-contrib-spring`
92 with support for both `@Traced` and database connection tracing.
93
94 **Note:** This example does not include the configuration of any exporters. That will
95 need to be done separately.
96
97 **TBD:*** Include examples of spring with exporters.
98
99 ```xml
100 <beans xmlns="http://www.springframework.org/schema/beans"
101 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
102 xmlns:aop="http://www.springframework.org/schema/aop"
103 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
104
105 <aop:aspectj-autoproxy/>
106
107 <!-- traces explicit calls to Traced -->
108 <bean id="censusAspect" class="io.opencensus.contrib.spring.aop.CensusSpringAspect">
109 <constructor-arg ref="tracer"/>
110 </bean>
111
112 <!-- traces all SQL calls -->
113 <bean id="censusSQLAspect" class="io.opencensus.contrib.spring.aop.CensusSpringSqlAspect">
114 <constructor-arg ref="tracer"/>
115 </bean>
116
117 <!-- global tracer -->
118 <bean id="tracer" class="io.opencensus.trace.Tracing" factory-method="getTracer"/>
119 </beans>
120 ```
121
122 ### Traced Usage
123
124 Once configured, you can use the `@Traced` annotation to indicate that a method should
125 be wrapped with a `Span`. By default, `@Traced` will use the name of the method as the
126 span name. However, `@Traced` supports an optional name attribute to allow a custom
127 span name to be specified.
128
129 ```java
130 @Traced()
131 void example1() {
132 // do work
133 }
134
135 // a custom span name can also be provided to Traced
136 @Traced(name = "custom-span-name")
137 void example2() {
138 // do moar work
139 }
140 ```
141
142 #### Notes
143
144 `opencensus-contrib-spring` support only enables annotations. You will still need to configure opencensus and register exporters / views.
145
146 [travis-image]: https://travis-ci.org/census-instrumentation/opencensus-java.svg?branch=master
147 [travis-url]: https://travis-ci.org/census-instrumentation/opencensus-java
148 [appveyor-image]: https://ci.appveyor.com/api/projects/status/hxthmpkxar4jq4be/branch/master?svg=true
149 [appveyor-url]: https://ci.appveyor.com/project/opencensusjavateam/opencensus-java/branch/master
150 [maven-image]: https://maven-badges.herokuapp.com/maven-central/io.opencensus/opencensus-contrib-spring/badge.svg
151 [maven-url]: https://maven-badges.herokuapp.com/maven-central/io.opencensus/opencensus-contrib-spring
152
153 #### Java Versions
154
155 Java 6 or above is required for using this artifact.
156
157 #### About the `aop` package
158
159 `opencensus-contrib-spring` makes heavy use of Aspect Oriented Programming [AOP](https://en.wikipedia.org/wiki/Aspect-oriented_programming) to
160 add behavior to annotations. Fortunately, Spring supports this natively so we can leverage the capabilities they've already built in.
161