Saya memiliki aplikasi Spring Boot sederhana yang menerima pesan dari antrian JMS dan menyimpan beberapa data ke file log, tetapi tidak memerlukan server web. Apakah ada cara untuk memulai Spring Boot tanpa server web?
java
spring-boot
Michael
sumber
sumber
spring-jms
(saya kira) sebagai ketergantungan. Kemudian mulai aplikasinya, tidak ada server yang akan dimulai.Jawaban:
Spring boot tidak akan menyertakan tomcat tertanam jika Anda tidak memiliki dependensi Tomcat di classpath. Anda dapat melihat fakta ini sendiri di kelas
EmbeddedServletContainerAutoConfiguration
yang sumbernya dapat Anda temukan di sini .Inti dari kode adalah penggunaan
@ConditionalOnClass
anotasi di kelasEmbeddedTomcat
Juga, untuk informasi lebih lanjut check out ini dan ini panduan dan ini bagian dari dokumentasi
sumber
gs-convert-jar-to-war/complete
proyek Maven tidak menambahkan Tomcat server yang tertanam, meskipunspring-boot-starter-tomcat
ketergantungan dinyatakan dengan ruang lingkupprovided
. Ini terasa seperti bug. Juga lihat stackoverflow.com/q/25991789/923560jika Anda ingin menjalankan spring boot tanpa container servlet, tetapi dengan container di classpath (misalnya untuk pengujian), gunakan yang berikut ini, seperti yang dijelaskan dalam dokumentasi spring boot :
juga, saya baru saja menemukan properti ini:
sumber
application.properties
berfungsi dengan baik.spring.main.web-environment
ini sekarang tidak digunakan lagi. Masih berfungsi untuk Boot 2.1.1spring.main.web-application-type=none
Boot Musim Semi 2.x
Properti Aplikasi
atau SpringApplicationBuilder
Dimana WebApplicationType :
sumber
Anda dapat membuat sesuatu seperti ini:
Dan
Ketergantungan masih ada meskipun tidak digunakan.
sumber
Solusi paling sederhana. di file application.properties Anda. tambahkan properti berikut seperti yang disebutkan oleh jawaban sebelumnya:
Untuk versi 2.0.0 dari Spring boot starter, gunakan properti berikut:
Untuk dokumentasi tentang semua properti, gunakan tautan ini: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
sumber
Untuk Spring boot v2.1.3.RELEASE, cukup tambahkan properti berikut ke application.propertes:
sumber
Gunakan kode ini.
sumber
Jika Anda memerlukan fungsionalitas web dalam aplikasi Anda (seperti
org.springframework.web.client.RestTemplate
untuk panggilan REST) tetapi Anda tidak ingin memulai server TOMCAT, cukup kecualikan di POM:sumber
Melalui program:
Melalui file application.properties:
Melalui file application.yml:
sumber
Jika Anda ingin menggunakan salah satu template "Memulai" dari situs spring.io, tetapi Anda tidak memerlukan item terkait servlet apa pun yang disertakan dengan template "default" ("gs / spring-boot"), Anda dapat mencoba template tugas penjadwalan (yang pom * berisi spring-boot-starter dll) sebagai gantinya:
https://spring.io/guides/gs/scheduling-tasks/
Itu memberi Anda Spring Boot, dan aplikasi berjalan sebagai standalone (tidak ada servlet atau spring-webmvc dll yang termasuk dalam pom). Yang mana yang Anda inginkan (meskipun Anda mungkin perlu menambahkan beberapa hal khusus JMS, seperti yang sudah ditunjukkan orang lain).
[* Saya menggunakan Maven, tetapi asumsikan bahwa build Gradle akan bekerja dengan cara yang sama].
sumber
Hapus ketergantungan berikut pada file pom Anda akan bekerja untuk saya
sumber
Untuk Kotling inilah yang saya gunakan belakangan ini:
Dan semuanya boot biasanya berakhir dengan shell dengan perintah kustom saya tersedia.
sumber
Anda dapat menggunakan dependensi spring-boot-starter. Ini tidak akan memiliki barang web.
sumber
Dalam boot Spring, ketergantungan Spring Web menyediakan server web Apache Tomcat tertanam. Jika Anda menghapus ketergantungan spring-boot-starter-web di pom.xml maka itu tidak menyediakan server web tertanam.
hapus ketergantungan berikut
sumber
Mirip dengan @nayun oh jawaban di atas, tetapi untuk Spring versi lama, gunakan kode ini:
sumber