diff --git a/poem/opentelemetry-basic/Cargo.toml b/poem/opentelemetry-basic/Cargo.toml
index 24f9359..de389ac 100644
--- a/poem/opentelemetry-basic/Cargo.toml
+++ b/poem/opentelemetry-basic/Cargo.toml
@@ -10,6 +10,6 @@ async-graphql = { path = "../../..", features = ["opentelemetry"] }
 async-graphql-poem = { path = "../../../integrations/poem" }
 tokio = { version = "1.37", features = ["macros", "rt-multi-thread"] }
 poem = "3.0.0"
-opentelemetry = { version = "0.27.0" }
-opentelemetry_sdk = { version = "0.27", features = ["rt-tokio"] }
-opentelemetry-stdout = { version = "0.27.0", features = ["trace"] }
+opentelemetry = { version = "0.29.0" }
+opentelemetry_sdk = { version = "0.29.0", features = ["rt-tokio"] }
+opentelemetry-stdout = { version = "0.29.0", features = ["trace"] }
diff --git a/poem/opentelemetry-basic/src/main.rs b/poem/opentelemetry-basic/src/main.rs
index 897f316..fbdd435 100644
--- a/poem/opentelemetry-basic/src/main.rs
+++ b/poem/opentelemetry-basic/src/main.rs
@@ -2,8 +2,8 @@ use async_graphql::{
     extensions::OpenTelemetry, EmptyMutation, EmptySubscription, Object, Result, Schema,
 };
 use async_graphql_poem::GraphQL;
-use opentelemetry::trace::TracerProvider as _;
-use opentelemetry_sdk::trace::TracerProvider;
+use opentelemetry::trace::TracerProvider;
+use opentelemetry_sdk::trace::SdkTracerProvider;
 use poem::{listener::TcpListener, post, EndpointExt, Route, Server};
 
 struct QueryRoot;
@@ -17,7 +17,7 @@ impl QueryRoot {
 
 #[tokio::main]
 async fn main() {
-    let provider = TracerProvider::builder()
+    let provider = SdkTracerProvider::builder()
         .with_simple_exporter(opentelemetry_stdout::SpanExporter::default())
         .build();
     let tracer = provider.tracer("poem-opentelemetry-basic");
@@ -43,4 +43,6 @@ async fn main() {
         .run(app)
         .await
         .unwrap();
+
+    provider.shutdown().unwrap();
 }