[JAVA] Ausführen der Erstverarbeitung mit Spring Boot Command Line Runner

Erstellung des Initialisierungsprozesses

In Spring Boot werden nach der Registrierung aller Beans im DI-Container die Beans ausgeführt, die die CommandLineRunner-Schnittstelle implementieren. Auf diese Weise ist es möglich, eine Erstverarbeitung zu implementieren, z. B. das Registrieren von Daten in der Datenbank beim Start. Die Methode ist einfach. Implementieren Sie einfach die CommandLineRunner-Schnittstelle und registrieren Sie die Klasse, die den Prozess beschreibt, den Sie in der run-Methode ausführen möchten, im DI-Container. Hier wird @Component als Beispiel verwendet. Im folgenden Beispiel wird beim Start in der Entwicklungsumgebung (Profile = "dev") die Repository-Klasse verwendet und die Anfangsdaten werden in der Datenbank gespeichert.

@Component
@Profile(value = ["dev"]) //Für Entwicklungsumgebungsprofil ausführen
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!!!"))
    }
}

Die folgende Klasse ist ein Beispiel, daher hat der Prozess keine besondere Bedeutung. Repository-Klasse

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

@Repository
interface GreetingRepository: JpaRepository<Greeting, Long>

Entitätsklasse

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 = ""
)

Angabe der Ausführungsreihenfolge

Bei der Registrierung von Klassen, die mehrere CommandLineRunner im DI-Container implementieren, kann die Ausführungsreihenfolge jeder Klasse mit @Order angegeben werden. Geben Sie die Ausführungsreihenfolge mit dem Argument @Order an (siehe unten).

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!!!"))
    }
}

Wenn Sie sich das Protokoll beim Start ansehen, können Sie sehen, dass sie in der angegebenen Reihenfolge ausgeführt werden. pic2.png

Recommended Posts

Ausführen der Erstverarbeitung mit Spring Boot Command Line Runner
Unbekannter Fehler in Zeile 1 von pom.xml bei Verwendung von Spring Boot in Eclipse
Asynchrone Verarbeitung mit Spring Boot unter Verwendung von @Async
Problemumgehung für Command Line Runner zur Arbeit mit JUnit in Spring Boot
Asynchrone Verarbeitung mit regelmäßiger Ausführung in Spring Boot
[FCM] Implementierung der Nachrichtenübertragung mit FCM + Spring Boot
Untersuchte asynchrone Ausführung von Abfragen in Spring Boot 1.5.9
Versuchen Sie es mit Spring Boot Security
Memorandum beim Spring Boot 1.5.10 → Spring Boot 2.0.0
Spring Boot Tutorial Verwenden der Spring Security-Authentifizierung
Implementieren Sie die deklarative Wiederholungsverarbeitung mit Spring Retry
Nachricht erlöschen (Spring Boot)
[Java] LINE-Integration mit Spring Boot
[Kotlin] Ein Beispiel für die Verarbeitung mit Enum
Verarbeitung beim Starten einer Anwendung mit Spring Boot
Versuchen Sie es mit Spring Boot mit VS-Code
Informationen zur ersten Anzeige von Spring Framework
WebMvcConfigurer-Memorandum von Spring Boot 2.0 (Spring 5)
Zusammenfassung der Grundeinstellungen für Spring Boot, Doma2, Gradle