[JAVA] Exécution du traitement initial à l'aide de Spring Boot Command Line Runner

Création du processus d'initialisation

Dans Spring Boot, une fois que tous les beans sont enregistrés dans le conteneur DI, les beans qui implémentent l'interface CommandLineRunner sont exécutés. En utilisant cela, il est possible d'implémenter un traitement initial tel que l'enregistrement de données dans la base de données au démarrage. La méthode est simple, implémentez simplement l'interface CommandLineRunner et enregistrez la classe qui décrit le processus que vous souhaitez exécuter dans la méthode d'exécution dans le conteneur DI. Ici, @Component est utilisé comme exemple. Dans l'exemple ci-dessous, lors du démarrage dans l'environnement de développement (Profile = "dev"), la classe du référentiel est utilisée et les données initiales sont enregistrées dans la base de données.

@Component
@Profile(value = ["dev"]) //Exécuter pour le profil d'environnement de développement
class DevDataInitializer(@Autowired private val greetingRepository: GreetingRepository) : CommandLineRunner {

    private val logger = LoggerFactory.getLogger(javaClass)

    override fun run(vararg args: String?) {

        logger.info("${this.javaClass.simpleName} Run")
        greetingRepository.save(Greeting(value = "Dev!!!"))
    }
}

La classe suivante est un exemple, il n'y a donc pas de signification particulière dans le processus. Classe de référentiel

import com.example.springsecuritydemo.domain.Greeting
import org.springframework.data.jpa.repository.JpaRepository
import org.springframework.stereotype.Repository

@Repository
interface GreetingRepository: JpaRepository<Greeting, Long>

Classe d'entité

import org.springframework.data.jpa.domain.support.AuditingEntityListener
import javax.persistence.*

@EntityListeners(AuditingEntityListener::class)
@Entity
@Table(name = "greeting")
data class Greeting(
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "id")
        var id: Long = 0,

        @Column(name = "value")
        val value: String = ""
)

Spécifier l'ordre d'exécution

Lors de l'inscription de classes qui implémentent plusieurs CommandLineRunner dans le conteneur DI, l'ordre d'exécution de chaque classe peut être spécifié avec @Order. Spécifiez l'ordre d'exécution avec l'argument @Order comme indiqué ci-dessous.

import com.example.springsecuritydemo.domain.Greeting
import com.example.springsecuritydemo.repository.GreetingRepository
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.CommandLineRunner
import org.springframework.context.annotation.Profile
import org.springframework.core.annotation.Order
import org.springframework.stereotype.Component

@Component
@Order(1)
@Profile(value = ["dev"])
class DevDataInitializer(@Autowired private val greetingRepository: GreetingRepository) : CommandLineRunner {

    private val logger = LoggerFactory.getLogger(javaClass)

    override fun run(vararg args: String?) {

        logger.info("${this.javaClass.simpleName} Run")
        greetingRepository.save(Greeting(value = "Dev!!!"))
    }
}
import com.example.springsecuritydemo.domain.Greeting
import com.example.springsecuritydemo.repository.GreetingRepository
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.CommandLineRunner
import org.springframework.context.annotation.Profile
import org.springframework.core.annotation.Order
import org.springframework.stereotype.Component

@Component
@Order(2)
@Profile(value = ["dev"])
class DevDataInitializer2(@Autowired private val greetingRepository: GreetingRepository): CommandLineRunner {

    private val logger = LoggerFactory.getLogger(javaClass)

    override fun run(vararg args: String?) {


        logger.info("${this.javaClass.simpleName} Run")
        greetingRepository.save(Greeting(value = "Dev2!!!"))
    }
}

Si vous regardez le journal au démarrage, vous pouvez voir qu'ils sont exécutés dans l'ordre spécifié. pic2.png

Recommended Posts

Exécution du traitement initial à l'aide de Spring Boot Command Line Runner
Erreur inconnue dans la ligne 1 de pom.xml lors de l'utilisation de Spring Boot dans Eclipse
Traitement asynchrone avec Spring Boot en utilisant @Async
Solution de contournement pour que Command Line Runner fonctionne avec JUnit dans Spring Boot
Traitement asynchrone avec exécution régulière dans Spring Boot
[FCM] Implémentation de la transmission de messages en utilisant FCM + Spring boot
Exécution asynchrone des requêtes examinée dans Spring Boot 1.5.9
Essayez d'utiliser Spring Boot Security
Mémorandum lorsque Spring Boot 1.5.10 → Spring Boot 2.0.0
Tutoriel Spring Boot à l'aide de l'authentification Spring Security
Implémenter le traitement déclaratif des tentatives à l'aide de Spring Retry
Sortie de message (Spring boot)
[Java] Intégration LINE avec Spring Boot
[Kotlin] Un exemple de traitement utilisant Enum
Traitement lors du démarrage d'une application avec Spring Boot
Essayez d'utiliser Spring Boot avec VS Code
À propos de l'affichage initial de Spring Framework
Mémorandum WebMvcConfigurer de Spring Boot 2.0 (printemps 5)
Résumé des paramètres initiaux pour Spring Boot, Doma2, Gradle