知識庫 / Spring / Spring Boot RSS 訂閱

使用 Spring Boot 連接 NoSQL 數據庫

NoSQL,Spring Boot
HongKong
11
12:18 PM · Dec 06 ,2025

1. 概述

在本文教程中,我們將學習如何使用 Spring Boot 連接到 NoSQL 數據庫。本文重點將使用 DataStax Astra DB,這是一種由 Apache Cassandra 驅動的 DBaaS(數據庫即服務),允許我們使用雲原生服務開發和部署數據驅動應用程序。

首先,我們將瞭解如何設置和配置我們的應用程序以使用 Astra DB。然後,我們將學習如何使用 Spring Boot 構建一個簡單的應用程序。

2. 依賴項

首先,讓我們為我們的 <em >pom.xml</em> 添加依賴項。當然,我們需要添加 <em >https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-cassandra</a > 依賴項:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-cassandra</artifactId>
    <version>2.6.3</version>
</dependency>

接下來,我們將添加 spring-boot-starter-web 依賴項:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
     <version>2.6.3</version>
</dependency>

最後,我們將使用 Datastax 的 《astra-spring-boot-starter》

<dependency>
    <groupId>com.datastax.astra</groupId>
    <artifactId>astra-spring-boot-starter</artifactId>
    <version>0.3.0</version>
</dependency>

現在我們已經配置了所有必要的依賴項,就可以開始編寫我們的 Spring Boot 應用程序。

3. 數據庫設置

在我們開始定義應用程序之前,請務必快速重申,DataStax Astra 是一款基於雲的數據庫服務,它由 Apache Cassandra 提供支持。 這使我們能夠使用託管且完全由管理 Cassandra 數據庫,用於存儲我們的數據。 然而,正如我們即將看到的,設置和連接到數據庫的方式具有一些特定的要求。

為了與我們的數據庫交互,我們需要在主機平台上設置 Astra 數據庫。 然後,我們需要下載 Secure Connect Bundle,其中包含有關 SSL 證書和用於此特定數據庫的連接詳細信息的詳細信息,從而允許我們安全地連接。

為了本教程的目的,我們假設我們已經完成了這兩個任務。

4. 應用配置

接下來,我們將配置一個簡單的 main 類用於我們的應用程序:

@SpringBootApplication
public class AstraDbSpringApplication {

    public static void main(String[] args) {
        SpringApplication.run(AstraDbSpringApplication.class, args);
    }
}

如我們所見,這是一個典型的 Spring Boot 應用。現在我們開始填充我們的 application.properties 文件:

astra.api.application-token=<token>
astra.api.database-id=<your_db_id>
astra.api.database-region=europe-west1

以下是我們的Cassandra憑據,可以直接從Astra儀表盤獲取。

為了通過標準的 CqlSession 使用 CQL,我們將添加一些額外的屬性,包括我們下載的Secure Connect捆綁包的位置:

astra.cql.enabled=true
astra.cql.downloadScb.path=~/.astra/secure-connect-shopping-list.zip

最後,我們將添加一些標準的 Spring Data 屬性,用於與 Cassandra 交互:

spring.data.cassandra.keyspace=shopping_list
spring.data.cassandra.schema-action=CREATE_IF_NOT_EXISTS

在這裏,我們指定了數據庫的鍵空間,並告訴 Spring Data 如果這些表不存在,就創建它們。

5. 測試我們的連接

現在我們已經準備好所有組件,可以測試數據庫連接。 讓我們定義一個簡單的 REST 控制器:

@RestController
public class AstraDbApiController {

    @Autowired
    private AstraClient astraClient;

    @GetMapping("/ping")
    public String ping() {
        return astraClient.apiDevopsOrganizations()
          .organizationId();
    }

}

如我們所見,我們使用 AstraClient 類創建了一個簡單的 ping 端點,它將返回我們數據庫的組織 ID。 這是一個由 Astra SDK 提供,我們可以用來與各種 Astra API 交互的包裝類

最重要的是,這只是一個簡單的測試,以確保我們可以建立連接。因此,讓我們使用 Maven 運行我們的應用程序:

mvn clean install spring-boot:run

我們應該在控制枱中看到與 Astra 數據庫的連接已建立:

...
13:08:00.656 [main] INFO  c.d.stargate.sdk.StargateClient - + CqlSession   :[ENABLED]
13:08:00.656 [main] INFO  c.d.stargate.sdk.StargateClient - + API Cql      :[ENABLED]
13:08:00.657 [main] INFO  c.d.stargate.sdk.rest.ApiDataClient - + API Data     :[ENABLED]
13:08:00.657 [main] INFO  c.d.s.sdk.doc.ApiDocumentClient - + API Document :[ENABLED]
13:08:00.658 [main] INFO  c.d.s.sdk.gql.ApiGraphQLClient - + API GraphQL  :[ENABLED]
13:08:00.658 [main] INFO  com.datastax.astra.sdk.AstraClient
  - [AstraClient] has been initialized.
13:08:01.515 [main] INFO  o.b.s.a.AstraDbSpringApplication
  - Started AstraDbSpringApplication in 7.653 seconds (JVM running for 8.097)

同樣,如果我們在瀏覽器中訪問我們的端點,或者使用 curl 命令對其進行調用,我們應該得到一個有效的響應:

$ curl http://localhost:8080/ping; echo
d23bf54d-1bc2-4ab7-9bd9-2c628aa54e85

太好了!現在我們已經建立了數據庫連接,並且使用 Spring Boot 實現了簡單的應用程序,接下來我們來看看如何存儲和檢索數據。

6. 使用 Spring Data

我們有多種選擇,作為我們 Cassandra 數據庫訪問的基礎。在本教程中,我們選擇使用 Spring Data,它支持 Cassandra。

Spring Data 的 repository 抽象的主要目標是顯著減少實現數據訪問層的樣板代碼量,從而幫助我們保持示例的簡潔性。

對於我們的數據模型,我們將定義一個實體,表示一個簡單的購物清單:

@Table
public class ShoppingList {

    @PrimaryKey
    @CassandraType(type = Name.UUID)
    private UUID uid = UUID.randomUUID();

    private String title;
    private boolean completed = false;

    @Column
    private List<String> items = new ArrayList<>();

    // Standard Getters and Setters
}

在本示例中,我們使用了標準註釋來將我們的 Bean 映射到 Cassandra 數據表,並定義一個名為 uid 的主鍵列。

現在,讓我們創建一個 ShoppingListRepository,用於在我們的應用程序中使用:

@Repository
public interface ShoppingListRepository extends CassandraRepository<ShoppingList, String> {

    ShoppingList findByTitleAllIgnoreCase(String title);

}

這遵循了標準 Spring Data 存儲庫抽象。除了繼承自 CassandraRepository 接口的 inherited 方法,例如 findAll我們還添加了一個 findByTitleAllIgnoreCase 方法,我們可以使用它通過標題查找購物清單。

事實上,使用 Astra Spring Boot Starter 的一個主要優勢在於它為我們創建了 CqlSession bean,利用之前定義的屬性。

7. 整合所有組件

現在我們已經建立了數據訪問倉庫,接下來定義一個簡單的服務和控制器:

@Service
public class ShoppingListService {

    @Autowired
    private ShoppingListRepository shoppingListRepository;

    public List<ShoppingList> findAll() {
        return shoppingListRepository.findAll(CassandraPageRequest.first(10)).toList();
    }

    public ShoppingList findByTitle(String title) {
        return shoppingListRepository.findByTitleAllIgnoreCase(title);
    }
    
    @PostConstruct
    public void insert() {
        ShoppingList groceries = new ShoppingList("Groceries");
        groceries.setItems(Arrays.asList("Bread", "Milk, Apples"));

        ShoppingList pharmacy = new ShoppingList("Pharmacy");
        pharmacy.setCompleted(true);
        pharmacy.setItems(Arrays.asList("Nappies", "Suncream, Aspirin"));

        shoppingListRepository.save(groceries);
        shoppingListRepository.save(pharmacy);
    }
    
}

為了我們的測試應用程序的目的,我們已添加了一個 @PostContruct 註解,將其插入到我們的數據庫中以進行測試數據。

在最終的謎題部分,我們將添加一個簡單的控制器,其中包含一個端點以檢索我們的購物清單:

@RestController
@RequestMapping(value = "/shopping")
public class ShoppingListController {

    @Autowired
    private ShoppingListService shoppingListService;

    @GetMapping("/list")
    public List<ShoppingList> findAll() {
        return shoppingListService.findAll();
    }
}

現在當我們運行我們的應用程序並訪問 http://localhost:8080/shopping/list 時,我們會看到一個包含我們不同購物列表對象的 JSON 響應:

[
  {
    "uid": "363dba2e-17f3-4d01-a44f-a805f74fc43d",
    "title": "Groceries",
    "completed": false,
    "items": [
      "Bread",
      "Milk, Apples"
    ]
  },
  {
    "uid": "9c0f407e-5fc1-41ad-8e46-b3c115de9474",
    "title": "Pharmacy",
    "completed": true,
    "items": [
      "Nappies",
      "Suncream, Aspirin"
    ]
  }
]

這確認我們的應用程序正在正常運行。太棒了!

8. 使用 Cassandra 模板

另一方面,也可以直接使用 Cassandra 模板,即經典的 Spring CQL 方法,並且可能仍然是最流行的。

簡單來説,我們可以很容易地擴展我們的 AstraDbApiController 以檢索我們的數據中心:

@Autowired
private CassandraTemplate cassandraTemplate;

@GetMapping("/datacenter")
public String datacenter() {
    return cassandraTemplate
        .getCqlOperations()
        .queryForObject("SELECT data_center FROM system.local", String.class);
}

這仍然會利用我們已定義的全部配置屬性。 如您所見,在兩種訪問方法之間切換完全透明。

9. 結論

在本文中,我們學習瞭如何設置並連接到託管的 Cassandra Astra 數據庫。接下來,我們構建了一個簡單的購物清單應用程序,用於存儲和檢索數據,使用了 Spring Data。最後,我們還討論瞭如何使用 Cassandra Template 這種更底層的訪問方法。

如往常一樣,本文的完整源代碼可在 GitHub 上獲取

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.