English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
المقدمة
عادة ما تشغل مشاريع Spring Boot على Tomcat أو خادم Jetty المدمج، ويتم نادرًا استخدام حزمة war لتوزيعها على خادم خدمة خارجي، حتى إذا تم وضعها على Linux، عادة ما يتم تشغيل Application class مباشرة، ولكن في بعض الأحيان نحتاج إلى توزيعها على خادم خارجي، وهو أمر معقد قليلاً بالنسبة لـ Spring Boot
لا أستطيع أن أتحدث أكثر، دعونا نرى الشرح التفصيلي معًا.
بيان البيئة:
jdk:1.8
الخادم: آلي بيتا، ubuntu 16.04
springBoot:1.5.9.RELEASE
الغرض
ستقوم بتعبئة Spring Boot على Tomcat على الخادم البعيد.
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" <modelVersion>4.0.0</modelVersion> <groupId>waibao</groupId> <artifactId>project</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 移除tomcat的支持,改成编译时支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <!--非严格模式 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- 配置thymeleaf的非严格模式,需要该依赖--> <dependency> <groupId>net.sourceforge.nekohtml</groupId> <artifactId>nekohtml</artifactId> <version>1.9.22</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.6</version> </dependency> <!-- 阿里连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.5</version> </dependency> <!-- fastJson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.40</version> </dependency> <!-- 热部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <version>1.5.9.RELEASE</version> <optional>true</optional> <scope>true</scope> </dependency> </dependencies> <build> <finalName>/testweb</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
注意
1、maven 插件不能使用springBoot自带的插件。我使用这个插件报以下错误
Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:2.6:jar (default-jar) on project project: Execution default-jar of goal org.apache.maven.plugins:maven-jar-plugin:2.6:jar failed: An API incompatibility was encountered while executing org.apache.maven.plugins:maven-jar-plugin:2.6:jar: java.lang.ExceptionInInitializerError: null
将maven插件修改为
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin>
需要注意的是,因为我没有web.xml。所以多加了
<configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration>
2-
<build> <finalName>xxx</finalName> </build>
finalName يجب أن يكون متطابقًا مع context-path في application.yml.
3- يجب تحويل اعتماد Tomcat إلى اعتماد التجميع
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
4- فئة الدخول لـ springBoot، توريث SpringBootServletInitializer وتغطية
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(MainApplication.class); }
MainApplication.class هو فئة الدخول لـ springBoot.
ت打包
اذهب إلى مجلد الجذر للمشروع. إذا كنت تستخدم IDEA، يمكنك إدخال ما يلي هنا:
mvn clean package -DskipTests
بعد انتهاء الت打包، سيتم إنشاء ملف .war الم对应 في مجلد target للمشروع.
تحميل
يمكن丢اع التوزيع War تحت مجلد webapps لـ Tomcat.
المشاكل التي لم تحل بعد:
كانت الفكرة أولاً هي تحويله إلى مكتبة Jar. ثم تشغيل springBoot مباشرة. ولكن تم تحويله إلى مكتبة Jar، وظهر خطأ في جزء مكونات Maven. لذا، يمكن فقط تحويله إلى مكتبة War وتحميلها إلى Tomcat.
إذا تم حل هذه المشكلة من قبل، يرجى إخباري.
في هذا المقال، يقول إن هذا خطأ...
https://issues.apache.org/jira/browse/MSITE-724
تحديث......
المشكلة قد تم حلها. يمكنك ت打包 springBoot إلى Jar و تشغيله مباشرة.
سبب:
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins>
يستخدم مثال springBoot الرسمي هذا الملحق.
Maven سيقوم بتحميل إصدار 2.4 وإصدار 2.6 من maven-jar-plugin تلقائيًا.
Maven سيقوم بتحميل إصدار 2.6 بشكل افتراضي. في البداية لم ألاحظ أن المشكلة التي يحدثها المشروع هي عدم التوافق مع maven-jar-plugin 2.6jar. مما أدى إلى عدم العثور على الخطأ لفترة طويلة...
الآن، نسخة 2.6 غير متوافقة. يمكنك تعديلها يدويًا إلى إصدار 2.4 فقط. كما يظهر أدناه:
<plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> </plugin> </plugins>
الخاتمة
هذا هو نهاية محتوى هذا المقال، نأمل أن يكون محتوى هذا المقال له قيمة مرجعية في تعلم أو عملكم، إذا كان لديكم أي أسئلة، يمكنكم ترك تعليقات للتفاعل، شكراً لدعمكم لتعليم呐喊.
بيان: محتوى هذا المقال تم جمعه من الإنترنت، حقوق الطبع والنشر مملوكة للمساهمين، محتوى تم توفيره من قبل مستخدمي الإنترنت بتحميلهم، هذا الموقع لا يمتلك حقوق الملكية، لم يتم تعديل المحتوى بشكل يدوي، ولا يتحمل أي مسؤولية قانونية متعلقة بذلك. إذا كنت قد وجدت محتوى يشتبه في حقوق الطبع والنشر، فيرجى إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (عند إرسال البريد الإلكتروني، يرجى استبدال #بـ @) للإبلاغ، وقدم الدليل على ذلك، إذا تم التحقق من ذلك، فإن هذا الموقع سيقوم بإزالة المحتوى المزعوم بسرعة.