# Spring modules without Spring Boot

> Use Occurrent's Spring modules as plain libraries.

Spring Data · Modules: `occurrent-saga-dsl-mongodb-spring`, `occurrent-snapshot-dsl-mongodb-spring-blocking`, `occurrent-snapshot-dsl-mongodb-spring-reactor`, `occurrent-application-service-transaction-spring`, `occurrent-application-service-transaction-spring-reactor`

The [Spring Boot Starter](/docs/spring-boot/starter/) auto-wires a saga state store, a snapshot store, and a Spring transaction executor for you. If you’re on Spring but not on the Occurrent starter (for example, you wire beans by hand or only need one of these pieces), each is also published as a standalone library artifact with no starter dependency:

* A Spring Data MongoDB `SagaStateStore` implementation, used by [Sagas](/docs/layer-1/sagas/):

- Maven

  ```xml
  <dependency>
      <groupId>org.occurrent</groupId>
      <artifactId>occurrent-saga-dsl-mongodb-spring</artifactId>
      <version>0.34.0</version>
  </dependency>
  ```

- Gradle

  ```groovy
  compile 'org.occurrent:occurrent-saga-dsl-mongodb-spring:0.34.0'
  ```

- SBT

  ```scala
  libraryDependencies += "org.occurrent" % "occurrent-saga-dsl-mongodb-spring" % "0.34.0"
  ```

- Grape

  ```groovy
  @Grab(group='org.occurrent', module='occurrent-saga-dsl-mongodb-spring', version='0.34.0')
  ```

- Leiningen

  ```clojure
  [org.occurrent/occurrent-saga-dsl-mongodb-spring "0.34.0"]
  ```

- Buildr

  ```ruby
  'org.occurrent:occurrent-saga-dsl-mongodb-spring:jar:0.34.0'
  ```

- Ivy

  ```xml
  <dependency org="org.occurrent" name="occurrent-saga-dsl-mongodb-spring" rev="0.34.0" />
  ```

* A Spring Data MongoDB blocking `SnapshotStore` implementation, used by [Snapshots](/docs/layer-1/snapshots/):

- Maven

  ```xml
  <dependency>
      <groupId>org.occurrent</groupId>
      <artifactId>occurrent-snapshot-dsl-mongodb-spring-blocking</artifactId>
      <version>0.34.0</version>
  </dependency>
  ```

- Gradle

  ```groovy
  compile 'org.occurrent:occurrent-snapshot-dsl-mongodb-spring-blocking:0.34.0'
  ```

- SBT

  ```scala
  libraryDependencies += "org.occurrent" % "occurrent-snapshot-dsl-mongodb-spring-blocking" % "0.34.0"
  ```

- Grape

  ```groovy
  @Grab(group='org.occurrent', module='occurrent-snapshot-dsl-mongodb-spring-blocking', version='0.34.0')
  ```

- Leiningen

  ```clojure
  [org.occurrent/occurrent-snapshot-dsl-mongodb-spring-blocking "0.34.0"]
  ```

- Buildr

  ```ruby
  'org.occurrent:occurrent-snapshot-dsl-mongodb-spring-blocking:jar:0.34.0'
  ```

- Ivy

  ```xml
  <dependency org="org.occurrent" name="occurrent-snapshot-dsl-mongodb-spring-blocking" rev="0.34.0" />
  ```

* A Spring Data MongoDB reactive `SnapshotStore` implementation, the reactive counterpart of the one above:

- Maven

  ```xml
  <dependency>
      <groupId>org.occurrent</groupId>
      <artifactId>occurrent-snapshot-dsl-mongodb-spring-reactor</artifactId>
      <version>0.34.0</version>
  </dependency>
  ```

- Gradle

  ```groovy
  compile 'org.occurrent:occurrent-snapshot-dsl-mongodb-spring-reactor:0.34.0'
  ```

- SBT

  ```scala
  libraryDependencies += "org.occurrent" % "occurrent-snapshot-dsl-mongodb-spring-reactor" % "0.34.0"
  ```

- Grape

  ```groovy
  @Grab(group='org.occurrent', module='occurrent-snapshot-dsl-mongodb-spring-reactor', version='0.34.0')
  ```

- Leiningen

  ```clojure
  [org.occurrent/occurrent-snapshot-dsl-mongodb-spring-reactor "0.34.0"]
  ```

- Buildr

  ```ruby
  'org.occurrent:occurrent-snapshot-dsl-mongodb-spring-reactor:jar:0.34.0'
  ```

- Ivy

  ```xml
  <dependency org="org.occurrent" name="occurrent-snapshot-dsl-mongodb-spring-reactor" rev="0.34.0" />
  ```

* A generic Spring `TransactionExecutor` (depends only on `spring-tx`, not MongoDB-specific), used for [transactional side-effects](/docs/layer-1/application-service-side-effects/#application-service-transactional-side-effects):

- Maven

  ```xml
  <dependency>
      <groupId>org.occurrent</groupId>
      <artifactId>occurrent-application-service-transaction-spring</artifactId>
      <version>0.34.0</version>
  </dependency>
  ```

- Gradle

  ```groovy
  compile 'org.occurrent:occurrent-application-service-transaction-spring:0.34.0'
  ```

- SBT

  ```scala
  libraryDependencies += "org.occurrent" % "occurrent-application-service-transaction-spring" % "0.34.0"
  ```

- Grape

  ```groovy
  @Grab(group='org.occurrent', module='occurrent-application-service-transaction-spring', version='0.34.0')
  ```

- Leiningen

  ```clojure
  [org.occurrent/occurrent-application-service-transaction-spring "0.34.0"]
  ```

- Buildr

  ```ruby
  'org.occurrent:occurrent-application-service-transaction-spring:jar:0.34.0'
  ```

- Ivy

  ```xml
  <dependency org="org.occurrent" name="occurrent-application-service-transaction-spring" rev="0.34.0" />
  ```

* A generic reactive Spring `ReactiveTransactionExecutor`, the reactive counterpart of the one above:

- Maven

  ```xml
  <dependency>
      <groupId>org.occurrent</groupId>
      <artifactId>occurrent-application-service-transaction-spring-reactor</artifactId>
      <version>0.34.0</version>
  </dependency>
  ```

- Gradle

  ```groovy
  compile 'org.occurrent:occurrent-application-service-transaction-spring-reactor:0.34.0'
  ```

- SBT

  ```scala
  libraryDependencies += "org.occurrent" % "occurrent-application-service-transaction-spring-reactor" % "0.34.0"
  ```

- Grape

  ```groovy
  @Grab(group='org.occurrent', module='occurrent-application-service-transaction-spring-reactor', version='0.34.0')
  ```

- Leiningen

  ```clojure
  [org.occurrent/occurrent-application-service-transaction-spring-reactor "0.34.0"]
  ```

- Buildr

  ```ruby
  'org.occurrent:occurrent-application-service-transaction-spring-reactor:jar:0.34.0'
  ```

- Ivy

  ```xml
  <dependency org="org.occurrent" name="occurrent-application-service-transaction-spring-reactor" rev="0.34.0" />
  ```

Construct each one directly and pass it wherever the corresponding interface is expected. The starter still gives you these beans for free if you’re using it, this is only for manual wiring.