愁人的 SpringCloud 微服务多模块打war包部署到tomcat,亲测成功
程序员文章站
2024-01-12 13:32:34
...
注意:SpringCloud 微服务多模块项目需要一个一个打包部署,只要有启动类的都需要打包单独部署,如果打包过程中有错误切记不要盲目去找,要根据错误提示一点找问题所在
pom.xml 需要加入的文件
第一:加入packaging
注意:如果当前pom文件中有packaging里面参数是pom,只需要修改成war就行了;
若之前没有packaging需要从新添加入下面一行代码.
<packaging>war</packaging>
第二:SpringBoot 框架中自带tomcat,打包的时候需要剔除自身的tomcat
<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>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。
相当于compile,但是打包阶段做了exclude操作-->
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
将上面的代码放入dependencies中
注意:需要根据自己项目的情况而定,我在打包的时候出现下面的错误
Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project ruoyi-eureka: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode)
这个提示并不是你缺少依赖,而是在打包的时候,没有web.xml文件,因为SpringCloud 微服务多模块下没有web.xml文件,此时也不需要加入,在pom文件下加入一行代码如下:
<!--如果想在没有web.xml文件的情况下构建WAR,请设置为false。-->
<properties>
<failOnMissingWebXml>false</failOnMissingWebXml>
</properties>
所有的依赖加入后,你可能打包的时候,文件名不是自己想要的此时可以在build文件下加入finalName,自定义打包名称
<build>
<finalName>ruoyi-eureka</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
启动类
1.启动类需要继承 SpringBootServletInitializer,重写SpringApplicationBuilder 方法
package com.ruoyi.eureka;
import com.sun.jersey.spi.container.servlet.WebConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class RuoyiEurekaApp extends SpringBootServletInitializer
{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(RuoyiEurekaApp.class, WebConfig.class);
}
public static void main(String[] args)
{
SpringApplication.run(RuoyiEurekaApp.class, args);
}
}
配置文件
上图有两个配置文件
application-dev.yml
server:
port: 8665 #端口号尽可能与tomcat保持一致
eureka:
instance:
hostname: 127.0.0.1 #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
#单机
#设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)。
defaultZone: http://${eureka.instance.hostname}:${server.port}/
#defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
application-prod.yml
server:
port: 8665 #端口号尽可能与tomcat保持一致
eureka:
instance:
hostname: 127.0.0.1 #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
#单机
#设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)。
defaultZone: http://${eureka.instance.hostname}:${server.port}/
#defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
因为对eureka集群不太了解所以两个都配置了
打包完成
使用 maven package打包
双击package打包,出现BUILD SUCCESS说明打包成功
打包完成的目录如下
将打包后的war文件放到tomcat的webapps文件下运行tomcat就可以了
如何用浏览器查看是否部署成功
请求的时一定要加上项目名称,这样才能访问到,访问地址
刚学,感觉好难啊,弄了两天才完成,欢迎交流学习