ক্লাউড ডেটাস্টোরের সাথে স্প্রিং বুট অ্যাপ্লিকেশন

1. সংক্ষিপ্ত বিবরণ

গুগল ক্লাউড ডেটাস্টোর হল একটি NoSQL ডকুমেন্ট ডাটাবেস যা স্বয়ংক্রিয় স্কেলিং, উচ্চ কর্মক্ষমতা এবং অ্যাপ্লিকেশন ডেভেলপমেন্টের সহজতার জন্য তৈরি।

তুমি কি শিখবে

  • স্প্রিং বুটে জাভা অবজেক্ট সংরক্ষণ এবং পুনরুদ্ধার করতে ক্লাউড ডেটাস্টোর কীভাবে ব্যবহার করবেন

তোমার যা লাগবে

আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?

শুধু পুরোটা পড়ুন এটি পড়ুন এবং অনুশীলনগুলি সম্পূর্ণ করুন।

গুগল ক্লাউড প্ল্যাটফর্ম পরিষেবা ব্যবহারের অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

নবীন মধ্যবর্তী দক্ষ

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. গুগল ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন অথবা বিদ্যমান একটি পুনরায় ব্যবহার করুন। যদি আপনার ইতিমধ্যেই একটি জিমেইল বা গুগল ওয়ার্কস্পেস অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png সম্পর্কে

a99b7ace416376c4.png সম্পর্কে

bd84a6d3004737c5.png সম্পর্কে

  • এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রজেক্টের নামটি প্রদর্শন করা হবে। এটি একটি অক্ষর স্ট্রিং যা Google API গুলি ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
  • সমস্ত Google ক্লাউড প্রোজেক্টে প্রোজেক্ট আইডি অনন্য এবং অপরিবর্তনীয় (সেট করার পরে এটি পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটি কী তা নিয়ে চিন্তা করেন না। বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রোজেক্ট আইডি (সাধারণত PROJECT_ID হিসাবে চিহ্নিত) উল্লেখ করতে হবে। যদি আপনি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি র্যান্ডম তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন, এবং এটি উপলব্ধ কিনা তা দেখতে পারেন। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে।
  • আপনার তথ্যের জন্য, তৃতীয় একটি মান আছে, একটি Project Number , যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপর, ক্লাউড রিসোর্স/API ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবটি চালানোর জন্য খুব বেশি খরচ হবে না, এমনকি কিছু খরচও হবে না। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে রিসোর্স বন্ধ করতে, আপনি আপনার তৈরি রিসোর্সগুলি মুছে ফেলতে পারেন অথবা প্রকল্পটি মুছে ফেলতে পারেন। নতুন গুগল ক্লাউড ব্যবহারকারীরা $300 USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, ক্লাউড শেল সক্রিয় করুন ক্লিক করুন 853e55310c205094.png সম্পর্কে .

55efc1aaa7a4d3ad.png সম্পর্কে

যদি আপনি প্রথমবারের মতো ক্লাউড শেল শুরু করেন, তাহলে আপনাকে একটি মধ্যবর্তী স্ক্রিন দেখানো হবে যা এটি কী তা বর্ণনা করবে। যদি আপনার কাছে একটি মধ্যবর্তী স্ক্রিন থাকে, তাহলে Continue এ ক্লিক করুন।

9c92662c6a846a5c.png সম্পর্কে

ক্লাউড শেলের সাথে সংযোগ স্থাপন এবং সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে।

9f0e51b578fecce5.png সম্পর্কে

এই ভার্চুয়াল মেশিনটিতে প্রয়োজনীয় সকল ডেভেলপমেন্ট টুল রয়েছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি অফার করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার বেশিরভাগ কাজ, যদি সব না হয়, একটি ব্রাউজার দিয়ে করা যেতে পারে।

একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি প্রমাণিত এবং প্রকল্পটি আপনার প্রকল্প আইডিতে সেট করা আছে।

  1. আপনি প্রমাণিত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud auth list

কমান্ড আউটপুট

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. gcloud কমান্ড আপনার প্রকল্প সম্পর্কে জানে কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি তা না হয়, তাহলে আপনি এই কমান্ড দিয়ে এটি সেট করতে পারেন:

gcloud config set project <PROJECT_ID>

কমান্ড আউটপুট

Updated property [core/project].

৩. ক্লাউড ডেটাস্টোর শুরু করুন

GCP কনসোলে , মেনু -> ডেটাস্টোরে (স্টোরেজ বিভাগে) নেভিগেট করুন অথবা এখানে ক্লিক করুন

যদি আপনি বর্তমান প্রজেক্টে কখনও ডেটাস্টোর ব্যবহার না করে থাকেন, তাহলে আপনি "একটি ক্লাউড ফায়ারস্টোর মোড নির্বাচন করুন" স্ক্রিনটি দেখতে পাবেন। "ডেটাস্টোর মোড" বিকল্পটি নির্বাচন করুন।

f938295c7ff297f4.png সম্পর্কে

এরপর, আপনি "আপনার ডেটা কোথায় সংরক্ষণ করবেন তা নির্বাচন করুন" স্ক্রিনটি দেখতে পাবেন। us-east1 অথবা অন্য কোনও আঞ্চলিক অবস্থান নির্বাচন করুন এবং "Create Database" এ ক্লিক করুন:

916ac84fec10fae7.png সম্পর্কে

৪. একটি নতুন স্প্রিং বুট জাভা অ্যাপ্লিকেশন বুটস্ট্র্যাপ করুন

ক্লাউডশেল পরিবেশ থেকে, একটি নতুন স্প্রিং বুট অ্যাপ্লিকেশন শুরু এবং বুটস্ট্র্যাপ করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:

$ curl https://start.spring.io/starter.tgz \
  -d packaging=war \
  -d dependencies=cloud-gcp \
  -d type=maven-project \
  -d baseDir=datastore-example \
  -d bootVersion=3.0.5 | tar -xzvf -

এটি একটি নতুন Maven প্রকল্পের সাথে একটি নতুন datastore-example/ ডিরেক্টরি তৈরি করবে, সাথে Maven এর pom.xml , একটি Maven র‍্যাপার এবং একটি অ্যাপ্লিকেশন এন্ট্রিপয়েন্ট থাকবে।

আমাদের অ্যাপ্লিকেশনটি ব্যবহারকারীদের কমান্ড প্রবেশ করানোর এবং ফলাফল দেখার জন্য একটি CLI প্রদান করবে। আমরা একটি বই উপস্থাপনের জন্য একটি ক্লাস তৈরি করব এবং তারপর ডেটাস্টোর রিপোজিটরি ব্যবহার করে এটি ক্লাউড ডেটাস্টোরে সংরক্ষণ করব।

আমাদের pom.xml তে আরও একটি প্রয়োজনীয় নির্ভরতা যোগ করতে হবে।

ক্লাউড শেল মেনু থেকে "ওপেন এডিটর" এ ক্লিক করে ওয়েব কোড এডিটরটি খুলুন।

6d823258c76a7452.png সম্পর্কে

এডিটর লোড হওয়ার পর, pom.xml ফাইলটি পরিবর্তন করে Google Cloud Datastore Starter এবং Spring Shell Starter নির্ভরতা যোগ করুন:

pom.xml সম্পর্কে

<project>
  ...
  <dependencies>
        ...
        <!-- Add GCP Datastore Starter -->
        <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>spring-cloud-gcp-starter-data-datastore</artifactId>
        </dependency>

        <!-- Add Spring Shell Starter -->
        <dependency>
                <groupId>org.springframework.shell</groupId>
                <artifactId>spring-shell-starter</artifactId>
                <version>3.0.2</version>
        </dependency>

  </dependencies>
</project>

৫. বই ক্লাস তৈরি করুন

এডিটর ব্যবহার করে, নিম্নলিখিত বিষয়বস্তু সহ Book ক্লাস তৈরি করুন:

ডেটাস্টোর-উদাহরণ/src/main/java/com/example/demo/Book.java

package com.example.demo;

import com.google.cloud.spring.data.datastore.core.mapping.Entity;
import org.springframework.data.annotation.Id;

@Entity(name = "books")
public class Book {
  @Id
  Long id;

  String title;

  String author;

  int year;

  public Book(String title, String author, int year) {
    this.title = title;
    this.author = author;
    this.year = year;
  }

  public long getId() {
    return this.id;
  }

  @Override
  public String toString() {
    return "Book{" +
        "id=" + this.id +
        ", title='" + this.title + '\'' +
        ", author='" + this.author + '\'' +
        ", year=" + this.year +
        '}';
  }
}

আপনি দেখতে পাচ্ছেন, এটি একটি সাধারণ POJO। ক্লাসটি @Entity দিয়ে টীকা করা হয়েছে যাতে বোঝা যায় যে এটি ডেটাস্টোরে সংরক্ষণ করা যেতে পারে এবং টাইপের নাম প্রদান করা হয় (SQL ডাটাবেসে টাইপকে টেবিল হিসেবে ভাবুন, আরও বিস্তারিত জানার জন্য ডকুমেন্টেশন দেখুন)। টাইপের নামটি ঐচ্ছিক - যদি এটি বাদ দেওয়া হয়, তাহলে ক্লাসের নামের উপর ভিত্তি করে টাইপের নাম তৈরি করা হবে।

মনে রাখবেন যে আমরা @Id দিয়ে id প্রোপার্টিটি টীকা করেছি। এর অর্থ হল আমরা এই ফিল্ডটি ডেটাস্টোর কী-এর শনাক্তকারী অংশ হিসেবে ব্যবহার করতে চাই। প্রতিটি ডেটাস্টোর সত্তার একটি শনাক্তকারী প্রয়োজন। সমর্থিত প্রকারগুলি হল String এবং Long

অবজেক্টের স্ট্রিং উপস্থাপনা আরও পঠনযোগ্য করার জন্য আমরা toString পদ্ধতিটি ওভাররাইড করি; এটি প্রিন্ট করার সময় কার্যকর হবে।

৬. BookRepository ইন্টারফেস তৈরি করুন

নিম্নলিখিত কন্টেন্ট দিয়ে BookRepository ক্লাস তৈরি করুন:

ডেটাস্টোর-উদাহরণ/src/main/java/com/example/demo/BookRepository.java

package com.example.demo;

import java.util.List;

import com.google.cloud.spring.data.datastore.repository.DatastoreRepository;


public interface BookRepository extends DatastoreRepository<Book, Long> {

  List<Book> findByAuthor(String author);

  List<Book> findByYearGreaterThan(int year);

  List<Book> findByAuthorAndYear(String author, int year);
}

ইন্টারফেসটি DatastoreRepository<Book, Long> প্রসারিত করে যেখানে Book হল ডোমেইন ক্লাস এবং Long হল Id টাইপ। আমরা আমাদের সংগ্রহস্থলে তিনটি কোয়েরি পদ্ধতি ঘোষণা করি যার বাস্তবায়ন পর্দার আড়ালে স্বয়ংক্রিয়ভাবে তৈরি হয়।

প্রথমটি হল findByAuthor । আপনি অনুমান করতে পারেন, এই পদ্ধতিটি বাস্তবায়নের ফলে একটি কোয়েরি কার্যকর হবে যা লেখকের সমতা ক্ষেত্রের জন্য শর্ত ফিল্টারে ব্যবহারকারী-প্রদত্ত মান ব্যবহার করবে।

findByYearGreaterThan পদ্ধতিটি এমন একটি কোয়েরি কার্যকর করে যা ব্যবহারকারীর প্রদত্ত মানের চেয়ে বড় বছরের ক্ষেত্রটি ফিল্টার করে।

findByAuthorAndYear এমন একটি কোয়েরি কার্যকর করে যা এমন সত্তাগুলির সন্ধান করে যেখানে লেখক এবং বছরের ক্ষেত্রগুলি ব্যবহারকারীর প্রদত্ত মানের সাথে মেলে।

৭. ইন্টারেক্টিভ CLI অ্যাপ্লিকেশন তৈরি করুন

প্রধান অ্যাপ্লিকেশন DemoApplication ক্লাসটি খুলুন এবং এটিকে এইরকম দেখতে পরিবর্তন করুন:

ডেটাস্টোর-উদাহরণ/src/main/java/com/example/demo/DemoApplication.java

package com.example.demo;

import java.util.List;

import com.google.common.collect.Lists;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.shell.standard.ShellComponent;
import org.springframework.shell.standard.ShellMethod;

@ShellComponent
@SpringBootApplication
public class DemoApplication {
  @Autowired
  BookRepository bookRepository;

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

  @ShellMethod("Saves a book to Cloud Datastore: save-book <title> <author> <year>")
  public String saveBook(String title, String author, int year) {
     Book savedBook = this.bookRepository.save(new Book(title, author, year));
     return savedBook.toString();
  }

  @ShellMethod("Loads all books")
  public String findAllBooks() {
     Iterable<Book> books = this.bookRepository.findAll();
     return Lists.newArrayList(books).toString();
  }

  @ShellMethod("Loads books by author: find-by-author <author>")
  public String findByAuthor(String author) {
     List<Book> books = this.bookRepository.findByAuthor(author);
     return books.toString();
  }

  @ShellMethod("Loads books published after a given year: find-by-year-after <year>")
  public String findByYearAfter(int year) {
     List<Book> books = this.bookRepository.findByYearGreaterThan(year);
     return books.toString();
  }

  @ShellMethod("Loads books by author and year: find-by-author-year <author> <year>")
  public String findByAuthorYear(String author, int year) {
     List<Book> books = this.bookRepository.findByAuthorAndYear(author, year);
     return books.toString();
  }

  @ShellMethod("Removes all books")
  public void removeAllBooks() {
     this.bookRepository.deleteAll();
  }
}

লক্ষ্য করুন কিভাবে আমরা @ShellComponent দিয়ে ক্লাসটি টীকা করেছি। এটি Spring কে জানায় যে আমরা এই ক্লাসটিকে CLI কমান্ডের উৎস হিসেবে ব্যবহার করতে চাই। @ShellMethod দিয়ে টীকা করা পদ্ধতিগুলি আমাদের অ্যাপ্লিকেশনে CLI কমান্ড হিসাবে প্রকাশ করা হবে।

এখানে আমরা BookRepository ইন্টারফেসে ঘোষিত পদ্ধতিগুলি ব্যবহার করি: findByAuthor , findByYearGreaterThan , findByAuthorAndYear । এছাড়াও আমরা তিনটি অন্তর্নির্মিত পদ্ধতি ব্যবহার করি: save , findAll এবং deleteAll

আসুন saveBook পদ্ধতিটি দেখি। আমরা ব্যবহারকারীর দ্বারা প্রদত্ত শিরোনাম, লেখক এবং বছরের মান ব্যবহার করে একটি Book অবজেক্ট তৈরি করি। আপনি দেখতে পাচ্ছেন, আমরা কোনও id মান প্রদান করি না, তাই এটি স্বয়ংক্রিয়ভাবে save-এ id ক্ষেত্রে বরাদ্দ এবং বরাদ্দ করা হবে। save পদ্ধতি Book ধরণের একটি অবজেক্ট গ্রহণ করে এবং এটি ক্লাউড ডেটাস্টোরে সংরক্ষণ করে। এটি id ক্ষেত্র সহ সমস্ত ক্ষেত্র পূরণ করে একটি Book অবজেক্ট ফেরত দেয়। শেষে আমরা এই অবজেক্টের একটি স্ট্রিং উপস্থাপনা ফেরত দেই।

বাকি পদ্ধতিগুলি একইভাবে কাজ করে: তারা উপযুক্ত রিপোজিটরি পদ্ধতিতে পাস করা প্যারামিটার গ্রহণ করে এবং স্ট্রিংফাইড ফলাফল প্রদান করে।

৮. অ্যাপ্লিকেশনটি চালান

অ্যাপ্লিকেশনটি তৈরি এবং শুরু করতে, প্রথমে নিশ্চিত করুন যে JAVA_HOME সঠিক সংস্করণে সেট করা আছে:

$ export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64

ক্লাউড শেলে এই কমান্ডটি কার্যকর করুন (প্রজেক্ট datastore-example/ এর রুট থেকে যেখানে pom.xml অবস্থিত):

$ ./mvnw spring-boot:run
export JAVA_HOME=/usr/lib/jvm/java-1.17.0-openjdk-amd64

সফলভাবে বিল্ড পর্যায়ের পরে, স্প্রিং লোগোটি প্রদর্শিত হবে এবং শেল প্রম্পটটি প্রদর্শিত হবে:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.0.5)



shell:>

এখন আপনি পূর্বে সংজ্ঞায়িত কমান্ডগুলি নিয়ে পরীক্ষা-নিরীক্ষা করতে পারেন। কমান্ডের তালিকা দেখতে, help কমান্ডটি ব্যবহার করুন:

shell:> help
...
find-all-books: Loads all books
find-by-author: Loads books by author: find-by-author <author>
find-by-author-year: Loads books by author and year: find-by-author-year <author> <year>
find-by-year-after: Loads books published after a given year: find-by-year-after <year>
remove-all-books: Removes all books
save-book: Saves a book to Cloud Datastore: save-book <title> <author> <year>

নিম্নলিখিতগুলি চেষ্টা করুন:

  1. save-book কমান্ড ব্যবহার করে কয়েকটি বই তৈরি করুন।
  2. find-all-books কমান্ড ব্যবহার করে একটি অনুসন্ধান চালান।
  3. নির্দিষ্ট লেখকের বই খুঁজুন: find-by-author <author>
  4. নির্দিষ্ট বছরের পরে প্রকাশিত বইগুলি খুঁজুন: find-by-year-after <year>
  5. নির্দিষ্ট লেখক এবং বছর অনুসারে বই খুঁজুন: find-by-author-year <author> <year>

৯. ওয়েব ইন্টারফেস ব্যবহার করে ডেটাস্টোরে কী সংরক্ষণ করা আছে তা দেখুন

ক্লাউড ডেটাস্টোরে সত্তাগুলি কীভাবে সংরক্ষণ করা হয় তা দেখতে, GCP কনসোলে যান। প্রয়োজনে, kind ক্ষেত্রে "books" ইনপুট করুন।

5fab21a6c89f45a.png সম্পর্কে

১০. পরিষ্কার করা

পরিষ্কার করার জন্য, অ্যাপ্লিকেশন শেল থেকে উপযুক্ত নামকরণ করা remove-all-books কমান্ড ব্যবহার করে সমস্ত বই মুছে ফেলুন।

shell:> remove-all-books

অ্যাপ্লিকেশন থেকে বেরিয়ে আসার জন্য quit কমান্ড ব্যবহার করুন, তারপর Ctrl+C

১১. অভিনন্দন!

এই কোডল্যাবে, আপনি একটি ইন্টারেক্টিভ CLI অ্যাপ্লিকেশন তৈরি করেছেন যা ক্লাউড ডেটাস্টোর থেকে বস্তু সংরক্ষণ এবং পুনরুদ্ধার করতে পারে!

আরও জানুন

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।