Home | History | Annotate | Download | only in spring
      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