简介:
1.Spring Boot使用了内嵌容器,因此它的部署方式也变得非常简单灵活,可以将Spring Boot项目打包成JAR包来独立运行,也可以打包成WAR包部署到Tomcat容器中运行,如果涉及大规模的部署,Jenkins成为最佳选择之一。
生成jar包
Maven默认会将项目打成JAR包,也可以在pom.xml文件中指定打包方式。配置示例如下:
生成war包
Spring Boot项目既可以生成WAR包发布,也可以生成JAR包发布。那么它们有什么区别呢?
JAR包:通过内置Tomcat运行,不需要额外安装Tomcat。如果需修改内置Tomcat的配置,只需要在Spring Boot的配置文件中配置即可。内置Tomcat没有自己的日志输出,全靠JAR包应用输出日志,但是部署简单方便,适合快速部署。
WAR包:传统的应用交付方式,需要安装Tomcat,然后将WAR包放到webapps目录下运行,这样可以灵活选择Tomcat版本,也可以直接修改Tomcat的配置,同时有自己的Tomcat日志输出,可以灵活配置安全策略。WAR包相对JAR包来说没那么快速方便。
更改配置
排除tomcat
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
在上面的示例中,将Tomcat组件的scope属性设置为provided,这样在打包产生的WAR中就不会包含Tomcat相关的JAR。
注册启动类
@SpringBootApplication public class PackageApplication extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(PackageApplication.class); } public static void main(String[] args) { SpringApplication.run(PackageApplication.class, args); } }
打包命令
在项目根目录下,在控制台执行如下命令:
mvn clean package -Dmaven.test.skip=true
1)mvn clean package其实是两条命令,mvn clean用于清除项目target目录下的文件,mvn package是打包命令。两个命令可以一起执行。
2)-Dmaven.test.skip=true:排除测试代码后进行打包。
将打包好的WAR包复制到Tomcat服务器中的webapps目录下启动即可。
启动运行
SpringBoot打war包配置
pom.xml配置
<?xml version="1.0"?> <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>net.say</groupId> <artifactId>sss</artifactId> <version>0.0.1</version> </parent> <groupId>net.say</groupId> <artifactId>backend</artifactId> <version>1.0</version> <name>backend</name> <packaging>war</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>net.mapsay</groupId> <artifactId>core</artifactId> <version>1.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp --> <!-- OKHttp3依赖 --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.8.0</version> </dependency> <!-- 钉钉开放平台-推送消息 --> <dependency> <groupId>com.aliyun</groupId> <artifactId>dingtalk</artifactId> <version>2.0.0</version> </dependency> <!-- Initialized JPA EntityManagerFactory 初始化成功关键,注意, lt 2023.06.10 ,否则报错:Error creating bean with name 'entityManagerFactory' defined in class path resource 或 Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister --> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.23.1-GA</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!--Tomcat 启动报错>> Application run failed--> <!--org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration--> <!-- hibernate-validator --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>6.0.17.Final</version> </dependency> <!-- validation --> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency> <dependency> <groupId>javax.el</groupId> <artifactId>javax.el-api</artifactId> <version>3.0.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.0.0</version> </plugin> </plugins> </build> </project>