最近在做一个springboot+springcloud+consul的测试demo时,把springboot项目打包成war包放tomcat6、7、8版本都运行不起来。然后就在网上找一堆的资料,大部分的人写的打war方法都不全,特别是遇到一些标题党,看他们写的blog就是浪费时间。接下来,我说下具体步骤。
1、创建spingboot的项目
spring-cloud-consul-producer,目录结构如下:
pom.xml
- <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>jypay.com</groupId>
- <artifactId>spring-cloud-consul-producer</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <packaging>war</packaging><!--改为war方式-->
-
- <name>spring-cloud-consul-producer</name>
- <url>http://maven.apache.org</url>
-
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.0.3.RELEASE</version>
- </parent>
-
- <properties>
- <java.version>1.8</java.version>
- <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
- <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
- <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
- </properties>
-
- <dependencies>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-actuator</artifactId><!-- 健康检查依赖于此包 -->
- </dependency>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-consul-discovery</artifactId><!-- Spring Cloud Consul 的支持。 -->
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
-
- <!-- 排除内置tomcat容器,导出成war包可以让外部容器运行spring-boot项目-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-tomcat</artifactId>
- <!-- provided表明该包只在编译和测试的时候用 -->
- <scope>provided</scope>
- </dependency>
- <!-- 添加jsp支持 -->
- <dependency>
- <groupId>org.apache.tomcat.embed</groupId>
- <artifactId>tomcat-embed-jasper</artifactId>
- <!--<scope>provided</scope>-->
- <!-- 如果不注释,你会发现main线程运行报404错误,必须使用 spring-boot:run这个命令运行才行。所以我们注释掉-->
- </dependency>
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-api</artifactId>
- <!-- provided表明该包只在编译和测试的时候用 -->
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>javax.servlet.jsp</groupId>
- <artifactId>jsp-api</artifactId>
- <version>2.2</version>
- <scope>provided</scope>
- </dependency>
- </dependencies>
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-dependencies</artifactId>
- <version>${spring-cloud.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
- <build>
- <!-- 修改war包名称 -->
- <finalName>springCloudConsulProducer</finalName>
- <plugins>
- <!-- 在打jar包时,用来指定主类的插件,打war包将其注释掉 -->
- <!-- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- <configuration>
- <mainClass>${start-class}</mainClass>
- <layout>ZIP</layout>
- </configuration>
- <executions>
- <execution>
- <goals>
- <goal>repackage</goal>
- </goals>
- </execution>
- </executions>
- </plugin> -->
- </plugins>
- </build>
-
- </project>
添加配置,在配置文件添加内容如下。application.yml
- server.context-path: /
- server:
- port: 8511
- spring:
- application:
- name: spring-cloud-consul-producer
- cloud:
- consul:
- host: localhost
- port: 8500
- discovery:
- serviceName: service-producer # 注册到consul的服务名称
修改启动类如下:
- @EnableDiscoveryClient
- @EnableAutoConfiguration
- @ComponentScan(basePackages = "jypay.com.springcloud.consul.controller")/*注意要把controller扫描进项目的路径,不然不能加载你的controller*/
- @SpringBootApplication
- public class ConsulProducerApplication extends SpringBootServletInitializer{
-
- @Override
- protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
- return builder.sources(ConsulProducerApplication.class);
- }
-
-
- public static void main(String[] args) {
- SpringApplication.run(ConsulProducerApplication.class, args);
- }
-
- }
添加服务,新建 HelloController,提供 hello 接口, 返回 hello consul 字符串。
- package jypay.com.springcloud.consul.controller;
-
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- @RestController
- public class HelloController {
-
- @RequestMapping("/hello")
- public String hello() {
- return "hello consul.";
- }
-
- }
2、打war包部署
方式一:
项目右键--->run as--->maven install 完成打包如下图:
方式二:
项目右键--->run as--->maven build 弹出如下图:
按标红1、2、3操作可完成打包。
其他打包方式
比如使用mvn的命令可自行搜下就知道了。
3、部署
把第2步打成war文件放到tomcat8.5版本(以上)的webapps目录下,如果在windows下面启动startup.bat。如在linux则时行tomcat的bin目录输入./startup.sh。注意:如果tomcat版本为6.x或7.x是运行不起来的。我已实测了,如果大家想看具体的报错请自测了解下。
4、访问
在浏览器访问:http://localhost:8080/war包名/@RequestMapping.value
在我的为例子:http://localhost:8180/springCloudConsulProducer/hello
下载项目的链接:https://download.csdn.net/download/developerFBI/12016147。
如大家按上面的操作有报错或其他问题请留言。谢谢!