Rumah > Java > javaTutorial > Bagaimana untuk menyelesaikan masalah yang dihadapi apabila projek SpringBoot dibungkus dan dikeluarkan kepada tomcat luaran

Bagaimana untuk menyelesaikan masalah yang dihadapi apabila projek SpringBoot dibungkus dan dikeluarkan kepada tomcat luaran

WBOY
Lepaskan: 2023-05-10 17:49:14
ke hadapan
1118 orang telah melayarinya

Mari kita bincangkan tentang situasi apabila kita menghadapi masalah:

Saya cuba menggunakan rangka kerja but spring untuk menulis projek web kecil buat kali pertama, dan ia boleh bermula dan berjalan seperti biasa dalam Intellij IDEA. Gunakan maven untuk menjalankan pemasangan, menjana pakej perang, dan menerbitkannya kepada tomcat tempatan Pengecualian berlaku. Maklumat pengecualian utama ialah .....LifeCycleException. Selepas pelbagai pencarian, saya temui jawapannya.

Oleh kerana spring boot mempunyai bekas tomcat terbenam, projek itu boleh diterbitkan dengan membungkusnya sebagai pakej jar Tetapi bagaimana untuk membungkus projek spring boot menjadi projek pakej perang yang boleh diterbitkan kepada tomcat?

1. Memandangkan anda perlu membungkusnya ke dalam projek pakej perang, anda perlu mengubah suai jenis pembungkusan dalam pom

2 dibenamkan dalam projek web but musim bunga, jadi jika kita ingin menerbitkan pakej perang ke projek tomcat, kita perlu mengecualikan kebergantungan pakej tomcat yang dibenamkan dalam but musim bunga kod di bawah.

<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-web</artifactid>
  <!--
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
    </exclusion>
  </exclusions>
  -->
</dependency>
Salin selepas log masuk

Satu perkara yang saya ingin katakan ialah jika anda masih mahu menggunakan spring boot embedded tomcat untuk penyahpepijatan semasa membangunkan secara tempatan, cuma tambahkan dependensi berikut

<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-tomcat</artifactid>
  <scope>provided</scope>
</dependency>
Salin selepas log masuk

3 Titik masuk program web pakej ialah kelas di mana fungsi utama terletak, yang diberi penjelasan dengan @SpringBootApplication. Walau bagaimanapun, jika pakej perang diterbitkan kepada tomcat, anda perlu menambah subkelas SpringBootServletInitializer dan mengatasi kaedah konfigurasinya, atau mewarisi secara langsung kelas di mana fungsi utama terletak daripada subkelas SpringBootServletInitializer dan mengatasi kaedah konfigurasinya. Contoh kod adalah seperti berikut,

@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer {
   
  @Override
  protected SpringApplicationBuilder configure(
      SpringApplicationBuilder application) {
    return application.sources(DemoApplication.class);
  }
 
   
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}
Salin selepas log masuk

Di atas melengkapkan semua langkah untuk membungkus pakej perang projek but spring, dan boleh diterbitkan kepada tomcat7 dan ke atas.

Akhir sekali dan yang paling penting, jika versi tomcat tempatan anda tidak konsisten dengan versi 8.0 disepadukan secara automatik oleh springboot. Terdapat juga masalah, penyelesaiannya:

Versi Tomcat tempatan saya ialah 8.0.28, dan Tomcat pada pelayan ialah 7.0.69. Saya menggunakan Tomcat 7.0.70 secara tempatan dan melaporkan ralat yang sama. Saya lebih pasti bahawa masalah itu berkaitan dengan versi Tomcat. Selepas mencari maklumat dalam pelbagai cara, akhirnya saya melihat seorang warga asing di Stackoverflow yang mengatakan bahawa bekas Servlet lalai SpringBoot adalah berdasarkan Tomcat8

Saya telah menemui pakej balang berkaitan Tomcat dalam pakej perang yang disediakan, dan ia adalah daripada Tomcat8. Ambil Tomcat8 Pakej benam tidak boleh digunakan di bawah Tomcat7

Bagaimana untuk menyelesaikan masalah yang dihadapi apabila projek SpringBoot dibungkus dan dikeluarkan kepada tomcat luaran

Untuk menyokong versi Tomcat yang lebih rendah, anda perlu menentukan versi Tomat dalam maven seperti berikut:

<properties>
  <tomcat.version>7.0.69</tomcat.version>
</properties>
Salin selepas log masuk

Kemudian tambahkannya pada kebergantungan (ini sebenarnya tidak perlu, dokumen rasmi menambahnya)

<dependency>
  <groupid>org.apache.tomcat</groupid>
  <artifactid>tomcat-juli</artifactid>
  <version>${tomcat.version}</version>
</dependency>
Salin selepas log masuk

Selepas menambahnya, saya mencubanya, dan ternyata tiada masalah. Selepas melihat direktori lib dalam pakej perang, ia memang menjadi pakej Tomcat7

Bagaimana untuk menyelesaikan masalah yang dihadapi apabila projek SpringBoot dibungkus dan dikeluarkan kepada tomcat luaran

Tetapi saya masih keliru sedikit versi Tomcat jika konfigurasi dibungkus seperti ini? Memandangkan had ini disebabkan oleh bekas Servlet di dalam SpringBoot, bolehkah saya tidak menggunakannya? Selepas menyemak banyak maklumat, saya menemui penyelesaian!

rreeee

Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah yang dihadapi apabila projek SpringBoot dibungkus dan dikeluarkan kepada tomcat luaran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan