# Primeros pasos

Site [llms.txt](/es/llms.txt)

---

> [!NOTE]
>
> También puedes usar el [agente de Java](../../agent) para instrumentar tu
> aplicación Spring Boot. Para conocer las ventajas y desventajas de cada
> opción, consulta [Instrumentación sin código para Java](..).

## Compatibilidad {#compatibility}

El _starter_ de OpenTelemetry para Spring Boot funciona con Spring Boot 2.6+ y
3.1+, y con aplicaciones Spring Boot compiladas como imagen nativa. El
repositorio
[opentelemetry-java-examples/spring-native](https://github.com/open-telemetry/opentelemetry-java-examples/tree/main/spring-native)
contiene un ejemplo de una aplicación Spring Boot con imagen nativa
instrumentada con el _starter_ de OpenTelemetry para Spring Boot.

## Gestión de dependencias {#dependency-management}

Un _Bill of Materials_
([BOM](https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#bill-of-materials-bom-poms))
garantiza que las versiones de las dependencias (incluidas las transitivas)
estén alineadas.

Para asegurar que las versiones de todas las dependencias de OpenTelemetry estén
alineadas, debes importar el BOM `opentelemetry-instrumentation-bom` cuando uses
el _starter_ de OpenTelemetry.

> [!NOTE]
>
> Si usas Maven, importa los BOMs de OpenTelemetry antes que cualquier otro BOM
> de tu proyecto. Por ejemplo, si importas el BOM `spring-boot-dependencies`,
> debes declararlo después de los BOMs de OpenTelemetry.
>
> Gradle selecciona la
> [versión más reciente](https://docs.gradle.org/current/userguide/dependency_constraints_conflicts.html#sub:resolving-version-conflicts)
> de una dependencia cuando varios BOMs la definen, por lo que el orden de los
> BOMs no importa.

El siguiente ejemplo muestra cómo importar los BOMs de OpenTelemetry con Maven:

```xml
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>io.opentelemetry.instrumentation</groupId>
            <artifactId>opentelemetry-instrumentation-bom</artifactId>
            <version>2.30.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
```

Con Gradle y Spring Boot, tienes dos formas de importar un BOM.

Puedes usar el soporte nativo de BOMs de Gradle añadiendo `dependencies`:

```kotlin
import org.springframework.boot.gradle.plugin.SpringBootPlugin

plugins {
  id("java")
  id("org.springframework.boot") version "3.2.O"
}

dependencies {
  implementation(platform(SpringBootPlugin.BOM_COORDINATES))
  implementation(platform("io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.30.0"))
}
```

La otra forma con Gradle es usar el _plugin_ `io.spring.dependency-management` e
importar los BOMs en `dependencyManagement`:

```kotlin
plugins {
  id("java")
  id("org.springframework.boot") version "3.2.O"
  id("io.spring.dependency-management") version "1.1.0"
}

dependencyManagement {
  imports {
    mavenBom("io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.30.0")
  }
}
```

> [!NOTE]
>
> Ten cuidado de no mezclar las distintas formas de configurar Gradle. Por
> ejemplo, no uses
> `implementation(platform("io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom:2.30.0"))`
> junto con el _plugin_ `io.spring.dependency-management`.

### Dependencia del _starter_ de OpenTelemetry {#opentelemetry-starter-dependency}

Añade la siguiente dependencia para habilitar el _starter_ de OpenTelemetry.

El _starter_ de OpenTelemetry usa la
[autoconfiguración](https://docs.spring.io/spring-boot/reference/using/auto-configuration.html)
de Spring Boot.

   <ul class="nav nav-tabs" id="tabs-4" role="tablist">
  <li class="nav-item">
      <button class="nav-link active"
          id="tabs-04-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-04-00" role="tab"
          data-td-tp-persist="maven (`pom.xml`)" aria-controls="tabs-04-00" aria-selected="true">
        Maven (<code>pom.xml</code>)
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-04-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-04-01" role="tab"
          data-td-tp-persist="gradle (`build.gradle`)" aria-controls="tabs-04-01" aria-selected="false">
        Gradle (<code>build.gradle</code>)
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-4-content">
    <div class="tab-body tab-pane fade show active"
        id="tabs-04-00" role="tabpanel" aria-labelled-by="tabs-04-00-tab" tabindex="4">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-xml" data-lang="xml"><span class="line"><span class="cl"><span class="nt">&lt;dependency&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;groupId&gt;</span>io.opentelemetry.instrumentation<span class="nt">&lt;/groupId&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;artifactId&gt;</span>opentelemetry-spring-boot-starter<span class="nt">&lt;/artifactId&gt;</span>
</span></span><span class="line"><span class="cl"><span class="nt">&lt;/dependency&gt;</span>
</span></span></code></pre></div>
    </div>
    <div class="tab-body tab-pane fade"
        id="tabs-04-01" role="tabpanel" aria-labelled-by="tabs-04-01-tab" tabindex="4">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-kotlin" data-lang="kotlin"><span class="line"><span class="cl"><span class="n">implementation</span><span class="p">(</span><span class="s2">&#34;io.opentelemetry.instrumentation:opentelemetry-spring-boot-starter&#34;</span><span class="p">)</span>
</span></span></code></pre></div>
    </div>
</div>
