Spring Boot: Mengkonfigurasi Kelas Utama

1. Gambaran keseluruhan

Tutorial ringkas ini menyediakan pelbagai cara untuk menentukan titik masuk ke aplikasi Spring Boot melalui Maven dan Gradle.

Kelas utama aplikasi Spring Boot adalah kelas yang mengandungi kaedah main (void main static public) yang memulakan Spring ApplicationContext . Secara lalai, jika kelas utama tidak dinyatakan secara eksplisit, Spring akan mencari satu di classpath pada waktu kompilasi dan gagal dimulakan jika tidak ada atau beberapa daripadanya ditemui.

Tidak seperti aplikasi Java konvensional, kelas utama yang dibincangkan dalam tutorial ini tidak muncul sebagai sifat metadata Kelas Utama dalam META-INF / MANIFEST.MF dari fail JAR atau WAR yang dihasilkan.

Spring Boot mengharapkan harta metadata Kelas Utama artifak itu ditetapkan kepada org.springframework.boot.loader.JarLauncher(atau WarLauncher )yang bermaksud bahawa lulus kelas utama kami terus ke baris arahan java tidak akan memulakan aplikasi Spring Boot kami dengan betul.

Manifes contoh kelihatan seperti ini:

Manifest-Version: 1.0 Start-Class: com.baeldung.DemoApplication Main-Class: org.springframework.boot.loader.JarLauncher

Sebagai gantinya, kita perlu menentukan sifat Kelas Mula dalam manifes yang dinilai oleh JarLauncher untuk memulakan aplikasi.

Mari lihat bagaimana kita dapat mengawal harta tanah ini menggunakan Maven dan Gradle.

2. Maven

Kelas utama boleh didefinisikan sebagai elemen kelas permulaan di bahagian sifat pom.xml :

  com.baeldung.DemoApplication  

Perhatikan bahawa harta tanah ini hanya akan dinilai jika kita juga menambah ibu bapa spring-boot-starter sebagaidi pom.xml kami .

Sebagai alternatif, kelas utama boleh didefinisikan sebagai elemen mainClass spring-boot-maven-plugin di bahagian plugin pom.xml kami :

   org.springframework.boot spring-boot-maven-plugin  com.baeldung.DemoApplication    

Contoh konfigurasi Maven ini boleh didapati di GitHub.

3. Gradle

Sekiranya kita menggunakan plugin Spring Boot Gradle , terdapat beberapa konfigurasi yang diwarisi dari org.springframework.boot di mana kita dapat menentukan kelas utama kita.

Dalam fail Gradle projek, mainClassName dapat ditentukan dalam blok konfigurasi springBoot . Perubahan ini dibuat di sini diambil oleh bootRun dan bootJar tugasan:

springBoot { mainClassName = 'cpm.baeldung.DemoApplication' }

Sebagai alternatif, kelas utama boleh ditakrifkan sebagai mainClassName harta bootJar tugas Gradle:

bootJar { mainClassName = 'cpm.baeldung.DemoApplication' }

Atau sebagai atribut nyata dari tugas bootJar :

bootJar { manifest { attributes 'Start-Class': 'com.baeldung.DemoApplication' } }

Perhatikan bahawa kelas utama yang ditentukan dalam blok konfigurasi bootJar hanya mempengaruhi JAR yang dihasilkan oleh tugas itu sendiri. Perubahan ini tidak mempengaruhi tingkah laku tugas Spring Boot Gradle lain seperti bootRun .

Sebagai bonus, jika plugin aplikasi Gradle diterapkan pada projek, mainClassName dapat didefinisikan sebagai harta global:

mainClassName = 'com.baeldung.DemoApplication' 

Kita dapat mencari contoh konfigurasi Gradle ini di GitHub.

4. Menggunakan CLI

Kami juga dapat menentukan kelas utama melalui antara muka baris perintah.

Org.springframework.boot.loader.PropertiesLauncher Spring Boot dilengkapi dengan hujah JVM untuk membolehkan anda mengatasi kelas utama logik yang disebut loader.main :

java -cp bootApp.jar -Dloader.main=com.baeldung.DemoApplication org.springframework.boot.loader.PropertiesLauncher

5. Kesimpulan

Terdapat lebih daripada beberapa cara untuk menentukan titik masuk ke aplikasi Spring Boot. Penting untuk mengetahui bahawa semua konfigurasi ini hanyalah cara yang berbeza untuk mengubah manifes fail JAR atau WAR.

Contoh kod kerja boleh didapati di sini dan di sini.