Rumah  >  Artikel  >  Java  >  Bagaimana untuk membungkus SpringBoot ke dalam pakej perang untuk dijalankan di bawah kucing jantan atau lalat liar

Bagaimana untuk membungkus SpringBoot ke dalam pakej perang untuk dijalankan di bawah kucing jantan atau lalat liar

WBOY
WBOYke hadapan
2023-05-10 17:04:061518semak imbas

Kaedah pembungkusan default springboot ialah pakej jar Kelebihan pakej jar ialah konfigurasi tidak perlu diubah, dan tomcat dibenamkan jika dibungkus ke dalam pakej jar, ia boleh terus dibuang ke dalam docker untuk menjalankan ujian. Walau bagaimanapun, memandangkan kod bahagian hadapan hanya boleh dibungkus ke dalam pakej perang, sudah cukup untuk membungkus kod bahagian belakang ke dalam pakej perang dan menjalankannya bersama-sama dengan kod bahagian hadapan dalam aplikasi web dalam bekas tomcat.

Format pembungkusan SpringBoot

Secara lalai, projek SpringBoot yang dibuat dibungkus dalam format pakej balang. Pada masa yang sama, bekas tomcat terbina dalam.

Jadi, jika anda ingin membungkus springboot ke dalam pakej perang dan mengerahkannya ke bekas seperti lalat liar, apakah yang perlu anda lakukan?

Berikut akan menerangkan setiap langkah bermula daripada mencipta projek.

Buat projek

Tiada kesukaran untuk mencipta projek Hanya gunakan alat idea untuk mencipta projek maven yang mudah dan anda ingin mengubahnya Ia adalah dalam bentuk pakej perang dan boleh diubah suai dengan sewajarnya.

Ubah suai konfigurasi pom.xml

Selepas mencipta projek, ubah suai fail pom.xml dan tambah teg induk.

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.1.5.RELEASE</version>
  <relativePath/>
</parent>

Jika asalnya projek springboot, ia sudah disertakan dan tidak perlu diubah suai.

Tetapkan kaedah pembungkusan dalam pom.xml kepada perang.

<packaging>war</packaging>

Tambah atau ubah suai konfigurasi kebergantungan, seperti berikut:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  </dependency>
  <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>
  <dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
</dependencies>

Antaranya, kebergantungan tomcat perlu dikecualikan dalam spring-boot-starter-web . Pada masa yang sama, tambahkan kebergantungan servlet-api. Ambil perhatian bahawa kebergantungan yang ditambahkan di sini ialah Servlet2.5.

Gunakan pemalam berikut untuk pembungkusan dalam binaan.

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <version>2.6</version>
      <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
      </configuration>
    </plugin>
  </plugins>
</build>

Mulakan kaedah utama

Jika sudah ada kaedah utama untuk bermula, biarkan kaedah utama mewarisi SpringBootServletInitializer dan melaksanakan kaedahnya. Jika ia adalah projek yang baru dibuat, buat SpringBootApp (kelas permulaan) terus dalam direktori peringkat atas, dan kemudian mulakan diam seperti berikut.

@SpringBootApplication
public class SpringBootApp extends SpringBootServletInitializer {
 public static void main(String[] args) {
 SpringApplication.run(SpringBootApp.class, args);
 }
 @Override
 protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
 return builder.sources(SpringBootApp.class);
 }
}

Pembungkusan

Hanya laksanakan pembungkusan pakej melalui arahan maven, dan pakej perang boleh dijana dalam direktori sasaran.

Bagi penggunaan tomcat dan wildfly, anda boleh meletakkan pakej perang dalam direktori yang sepadan untuk memulakan perkhidmatan.

Pengecualian

Jika pengecualian yang serupa dengan yang berikut berlaku semasa permulaan (mencadangkan bahawa web.xml tiada):

Ralat semasa memasang WAR: webxml atribut diperlukan (atau WEB-INF/web.xml sedia ada jika melaksanakan dalam mod kemas kini)

Beri perhatian untuk menyemak pemalam pembungkusan fail pom dan sama ada masalah tomcat telah dihapuskan, dan semak sama ada pemalam pembungkusan di atas adalah betul.

Sebab masalahnya ialah: pakej kebergantungan spring-boot-starter-web dirujuk dalam projek springboot. Spring-boot-starter-tomcat yang dirujuk dalam pakej ini mengandungi bekas servlet terbenam tomcat, dan versi berbezanya melaksanakan spesifikasi versi servlet yang berbeza.

Servlet/JSP versi 2.5/2.1 menyokong Tomcat versi 6.0.x, dan versi java minimum ialah 1.5. Servlet/JSP versi 3.0/2.2 menyokong Tomcat versi 7.0.x, dan versi java minimum ialah 1.6.

Memandangkan Servlet2.5 digunakan di atas, pengecualian di atas akan berlaku apabila tiada fail web.xml.

Penyelesaian 1: Apabila versi Servlet kurang daripada 3, buat fail /src/main/webapp/WEB-INF/web.xml.

Penyelesaian 2: Tambahkan pemalam maven-war-plugin di bawah binaan pom.xml. Dan tetapkan failOnMissingWebXml kepada false.

Atas ialah kandungan terperinci Bagaimana untuk membungkus SpringBoot ke dalam pakej perang untuk dijalankan di bawah kucing jantan atau lalat liar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam