SpringBoot-初期データのロード

この投稿では、後でSpringBootアプリケーションで使用するためにデータベースに初期データをロードする方法について説明します。

まず、初期データが必要になる理由を見てみましょう。

  • 最初の使用例は、アプリケーションの開始後に、データベースにすでに作成されているデータが必要になる場合があることです。Webサイトをスクレイプして大量のデータを収集し、それをアプリケーションの通常のフローで使用することを計画している状況を想像してみてください。このような状況が発生した場合は、アプリケーションの起動直後に収集したデータを読み込む必要があります。
  • 別のユースケースは、テスト目的で初期データをロードすることです。テストデータのセットを準備し、アプリケーションを開始した直後にそれらをロードすると、アプリケーションをテストフェーズに進めることができます。
  • @PostConstruct、アプリケーションの起動直後に実行されるメソッドで使用されるメインのアノテーション。
  • @Profile、本番やテストなどのフェーズに応じて実行するクラスを決定するためのサイドアノテーション。

@Component
@Profile("dev")
public class UserInit {
    private final BCryptPasswordEncoder bCryptPasswordEncoder;
    private final UserRepository userRepository;
    @Autowired
    public UserInit(BCryptPasswordEncoder bCryptPasswordEncoder, UserRepository userRepository) {
        this.bCryptPasswordEncoder = bCryptPasswordEncoder;
        this.userRepository = userRepository;
    }
    @PostConstruct
    public void createTestUsers() {
        if (!userRepository.findByUsername("admin").isPresent()) {
            User admin = new User()
                    .setUsername("admin")
                    .setPassword(bCryptPasswordEncoder.encode("123"))
                    .setRoles(Arrays.asList(Role.ADMIN))
                    .setEmail("[email protected]");
            userRepository.save(admin);
        }
        if (!userRepository.findByUsername("user").isPresent()) {
            User user = new User()
                    .setUsername("user")
                    .setPassword(bCryptPasswordEncoder.encode("123"))
                    .setRoles(Arrays.asList(Role.USER))
                    .setEmail("[email protected]");
            userRepository.save(user);
        }
    }
}

spring.profiles.active=dev

別の状況を想像することができます。たとえば、アプリケーションを開始する前に、xmlファイルからデータセットをロードする必要があるとします。同じ方法でそれを実現し、PostConstructでメソッドにアノテーションを付けてから、ロジックをその中に入れます。

@PostConstruct
public void loadFromXml() {
    // some code to read xml that is not our focus right now
    for (XmlObject xmlObject : XmlFile) {
        repository.save(xmlObject);   
    }
}

もちろん、これは初期データのロードに限定されるものではなく、アプリケーションの起動後に実行するロジックを使用することもできます。

この記事では、アプリケーションに初期データをロードする方法について説明しました。楽しんでいただき、お役に立てば幸いです。

提案された投稿

ドメイン名に関する情報の検索

Brian P. Hogan 著『Small, Sharp Software Tools』からの抜粋

ドメイン名に関する情報の検索

facebook.com にリクエストを送信すると、コンピュータはドメイン名を検索してそのドメイン名を IP アドレスに変換し、コンピュータが接続できるようにします。

Spring Boot での Apache Kafka の構成と使用

スプリングブーツを履いたカフカ

Spring Boot での Apache Kafka の構成と使用

はじめに Apache Kafka は、大規模で高スループット、フォールトトレラントなリアルタイム データ ストリーミングを処理するオープンソースの分散ストリーミング プラットフォームです。このシステムは、プロデューサーがトピックにメッセージをパブリッシュし、コンシューマーがそれらのトピックをサブスクライブしてメッセージを消費するパブリッシュ/サブスクライブ モデルに基づいています。

関連記事

脅威ハンティングのための OSINT の収集

脅威ハンティングのための OSINT の収集

サイバー愛好家の皆さん、こんにちは!OSINT for Threat Hunting シリーズへようこそ。最初の記事では、OSINT の概要と脅威ハンティングにおけるその重要性について説明しました。

Goodreads の読書チャレンジは有毒です

Goodreads の読書チャレンジは有毒です

地元の書店ともう一冊の本を求めて交渉していると、手のかゆみが広がった。この本は、最近購入した残りの本と同様に、私の「読みたい本」(TBR)の山の中でその王座を見つけることになります。それでも、買ってしまいました。

カウボーイの嘘

巨大企業はいかにしてアメリカ国民にひどい嘘を売ったのか

カウボーイの嘘

西のなだらかな丘陵地帯では、太陽の最初の光が平原の曇った草を照らす、まばゆいばかりの金色の朝です。真っ黒で巨大な穏やかなアンガス牛の群れが日の出を背景にシルエットを描き、誰もがよく知っている場所へ人里離れた道を進んでいます。朝食バー。

ライティングスキルを向上させる実証済みの 3 つの方法

書くことの利点とそれを助けるための戦略

ライティングスキルを向上させる実証済みの 3 つの方法

2022 年には GPT-3 がリリースされるため、ライティング スキルの重要性は低くなるようです。AI を使えば、文章が苦手な人でも質の高い人材を生み出すことができます。