=================================
SpringBoot 标准项目创建步骤
=================================
使用 Spring IDE(Eclipse), 可以新建一个 Spring starter project项目, 是一个项目向导, 在向导提示下可以按需添加 SpringBoot的常用依赖项目, 该向导生成一个非常规范的 pom.xml, 非常规范的目录结构, 值得推荐.

=================================
创建极简SpringBoot tomcatsample程序的步骤
=================================
1. 准备 JDK8
2. Eclipse 中创建 Maven Project, archetype 选择 quickstart那个即可.
groupid 为: com.springbootsample
artifactId 为: tomcatsample
3. 配置 pom.xml 文件, 包括:
a) 增加 spring-boot-starter-parent parent节点
b) 增加 spring-boot-starter-we 依赖项
c) 增加 spring-boot-devtools 依赖项(开发辅助包)
d) 增加 spring-boot-maven-plugin build 插件
4. 手工增加 resources 目录, controller/entity/service等java 目录,
手工添加 application.properties 文件, 设置端口号和url根, 内容如下:
server.port=8888
server.servlet.context-path=/tomcatsample
#server.context-path=/tomcatsample #SpringBoot V1 property, not works in SB2
5. 最终的项目结构如下:

└─src
│ └─main
│ ├─java
│ │ └─com
│ │ └─springbootsample
│ │ └─tomcatsample
│ │ ├─controller <dir>
│ │ ├─entity <dir>
│ │ └─service <dir>
│ │ └─App.java <主程序文件>
│ └─resources
│ └─templates <dir>
│ └─application.properties <配置文件>
├─pom.xml <Maven 主文件>
├─.project <Eclipse 项目文件>
└─.classpath <classpath 文件>
6. App.java 中, 使用 @SpringBootApplication 注解
7. 在 controller 目录下增加一个 IndexController, 用来做 url mapping.

=================================
将 SpringBoot 部署到外置的Tomcat中
=================================
SpringBoot 2需要servlet V3的支持, 所以需要使用Tomcat 7或8, 我使用的是tomcat 8. 
系统开发时一般都是使用SpringBoot 内置tomcat运行的, 很方便. 而在生产环境中, 通常需要将SpringBoot部署在外置Tomcat server上. 网上很多示例都只能运行在内置tomcat中, 这里提供一个兼容内置/外置Tomcat的样例, 代码和配置需要做一些调整.

步骤有:
1. 修改 pom.xml, 这包括:
a) 修改为 war 打包形式
b) 使用 spring-boot-maven-plugin 编译插件, 目标包将是fat war或fat jar, 可以直接运行.
c) 将依赖项 spring-boot-starter-tomcat 标示为 provided.
d) 在 properties tag 下, 增加 start-class tag, 指定SpringBoot程序的真正入口
e) 在 build tag 下, 增加 finalName tag, 缩短war包的文件名, 否则url地址将包含版本信息, 比如url包含: tomcatsample-0.0.1-SNAPSHOT , 非常不友好.
2. 修改主程序入口类
主程序类需要继承SpringBootServletInitializer, 并重写configure()方法.
3. 使用 maven package 打包成 war 包, 并复制到 tomcat安装目录的webapps子目录下.
4. 修改 tomcat 的 conf\server.xml 文件, 搜索 8080 并用新端口替换, 比如换成 8888 .
5. 使用 tomcat 的 bin\startup.bat启动
6. 访问 web url,
比如: http://127.0.0.1:8888/tomcatsample/index

=================================
其他说明
=================================
1. 这种 war 包是一个 fat 的 executable 压缩包, 包含所有的资源文件和依赖jar包.
2. 使用这种 war 包可以简化了程序部署, 只需部署一个文件即可. 启动Tomcat时, tomcat会自动解压war包到webapps目录, 并启动我们的SpringBoot应用. 将来升级程序, 也仅仅需要覆盖war包即可, tomcat会自动使用新的war包.
3. SpringBoot参数解析器非常智能, 不管参数名是按照驼峰写法, 还是按照下划线写法, 还是按照连接符写法, 都能自动和Bean中的属性关联起来. 即参数中 server.servlet.contextPath 和 server.servlet.context_path 和 server.servlet.context-path 写法其实都是等价的.

=================================
SpringBoot程序的几种启动方式:
=================================
1. [内置tomcat]在Eclipse 以 Java Application 的形式
2. [内置tomcat]使用 mvn spring-boot:run 启动
3. [外置tomcat]使用tomcat的 startup 脚本启动
4. [内置tomcat]使用 java jar tomcatsample.war 的形式.
针对第4种运行方式, 可以传入新参数来覆盖SpringBoot默认值或application.properties的设定值, 比如:
a) 最简启动形式
java -jar tomcatsample.war
b) 以 jvm 环境变量的形式传入 server.port 值
java -Dserver.port=5566 -jar tomcatsample.war
c) 以 application.properties的形式传入 server.port 值
java -jar tomcatsample.war --server.port=7788
java -jar tomcatsample.war server.servlet.context-path
相比 -D 环境变量的形式, 更推荐使用--传参, 因为该传参名称和 application.properties 中的配置项写法完全一致, 而-D的环境变量名称有时候和 application.properties 中的配置项名称不一致.

=================================
tomcatsample 代码
=================================

App.java

package com.springbootsample.tomcatsample;

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; //在内嵌Tomcat开发或部署, 下面写法最简单.
//@SpringBootApplication
//public class App
//{
// public static void main( String[] args )
// {
// SpringApplication.run(App.class, args);
// }
//} // 要在外置Tomcat上部署, 需要继承SpringBootServletInitializer, 并重写configure()方法.
// 需要说明的是, 这种写法对内置Tomcat也同样支持.
@SpringBootApplication
public class App extends SpringBootServletInitializer { @Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(App.class);
} public static void main(String[] args) throws Exception {
SpringApplication.run(App.class, args);
} }

IndexController.java

package com.springbootsample.tomcatsample.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; @Controller
@RequestMapping("/")
public class IndexController {
@RequestMapping("/index")
@ResponseBody
public String index() {
return "index1";
}
}

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>com.springbootsample</groupId>
<artifactId>tomcatsample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 打包形式修改为 war -->
<packaging>war</packaging> <name>tomcatsample</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--optional, 如果项目代码包含多个main()函数, 需要告知SpringBoot真正的入口class-->
<start-class>com.springbootsample.tomcatsample.App</start-class>
</properties> <!-- 增加依赖 parent 项目spring-boot-starter-parent -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
</parent> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!-- marked the embedded tomcat servlet container as provided -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <!-- spring-boot-devtools, 在开发过程中支持Auto restart 和 auto reload, 打包为war/jar不会包含该依赖.-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要重新引入 -->
<optional>true</optional>
</dependency> <!--使用freemarker的starter,里面包含spring-boot-starter-web组件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency> <!--mybatis依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency> <!--druid连接池依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
</dependencies> <build>
<!-- 重命名打包 jar 的文件, 不含版本信息 -->
<finalName>tomcatsample</finalName>
<plugins>
<!--optional, 加上spring-boot-maven-plugin, 这样jar/war打包是可以 executable 的 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin> <!--optional, mybatis-generator-maven 插件基于数据table 生成 java code -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
<!--配置文件的路径-->
<configurationFile>${basedir}/src/main/resources/generatorConfig.xml</configurationFile>
</configuration>
</plugin>
</plugins> <resources>
<!-- 将 java 目录下的下面文件以资源文件的形式打包到jar输出文件中 -->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.sql</include>
<include>**/*.ddl</include>
<include>**/*.txt</include>
<include>**/*.md</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>

=================================
参考
=================================
https://www.jianshu.com/p/157eb1ab8524
https://www.mkyong.com/spring-boot/spring-boot-deploy-war-file-to-tomcat/
http://www.codesheep.cn/2018/06/05/SpringBoot%E5%BA%94%E7%94%A8%E9%83%A8%E7%BD%B2%E4%BA%8E%E5%A4%96%E7%BD%AETomcat%E5%AE%B9%E5%99%A8/

SpringBoot系列: 极简Demo程序和Tomcat war包部署的更多相关文章

  1. tomcat war包部署

    平常的开发我们都是通过IDE进行项目的部署,但有时候我们不得不进行手工部署(例如在Server上). 手工部署分为以下几步: 第1步: 用maven打war包 (假如得到的war包名为: appkit ...

  2. gitlab+jenkins+tomcat war包部署(此文有新版本)

    对本文进行格式整理,url: https://www.cnblogs.com/huandada/p/9969234.html 整个项目的框架为: 1.gitlab的安装(Centos7) 新建/etc ...

  3. SpringBoot之打成war包部署到Tomcat

    正常情况下SpringBoot项目是以jar包的形式,正常情况下SpringBoot项目是以jar包的形式,并且SpringBoot是内嵌Tomcat服务器,所以每次重新启动都是用的新的Tomcat服 ...

  4. springboot 学习之路 5(打成war包部署tomcat)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  5. SpringBoot项目war包部署

    服务部署 记录原因 将本地SpringBoot项目通过war包部署到虚拟机中,验证服务器部署. 使用war包是为了方便替换配置文件等. 工具 对象 版本 Spring Boot 2.4.0 VMwar ...

  6. Springboot War包部署下nacos无法注册问题

    目录 1. @EnableDiscoveryClient的使用 2. EnableDiscoveryClientImportSelector类的作用 3.AutoServiceRegistration ...

  7. springboot项目war包部署及出现的问题Failed to bind properties under 'mybatis.configuration.mapped-statements[0].

    1.修改pom文件 修改打包方式 为war: 添加tomcat使用范围,provided的意思即在发布的时候有外部提供,内置的tomcat就不会打包进去 <groupId>com.scho ...

  8. Windows下war包部署到Linux下Tomcat出现的问题

    最近,将Windows下开发的war包部署到Linux下的Tomcat时报了一个错误:tomcat error in opening zip file.按理说,如果正常,当把war包复制到webapp ...

  9. 将Web项目War包部署到Tomcat服务器

    1. 配置Java运行环境 1.1 下载并安装JDK 从官网上下载最新的JDK:http://java.sun.com/javase/downloads/index.jsp ,下载后安装,选择想把JD ...

随机推荐

  1. HAOI2016 简要题解

    「HAOI2016」食物链 题意 现在给你 \(n\) 个物种和 \(m\) 条能量流动关系,求其中的食物链条数. \(1 \leq n \leq 100000, 0 \leq m \leq 2000 ...

  2. ViewHolder模式的简洁写法

    大家通常怎么写ViewHolder呢? ViewHolder holder = null; if(convertView == null){ convertView = mInflater.infla ...

  3. [CF976E]Well played!

    题目描述 Recently Max has got himself into popular CCG "BrainStone". As "BrainStone" ...

  4. Python面试指南

    1.Python基本语法 1.@staticmethod 和 @classmethod Python中有三种方法,实例方法.类方法(@classmethod).静态方法(@staticmethod). ...

  5. 第一次使用cisco packet tracer

    搭建一个如图所示的网络,左边局域网是10.0.0.0网段,右边局域网是12.0.0.0网段,中间为广域网11.0.0.0网段 上面的成功了,但是不是很熟悉,下面重新来一遍 1.先用可视化界面建立一个如 ...

  6. 「SCOI2016」背单词 解题报告

    「SCOI2016」背单词 出题人sb 题意有毒 大概是告诉你,你给一堆n个单词安排顺序 如果当前位置为x 当前单词的后缀没在这堆单词出现过,代价x 这里的后缀是原意,但不算自己,举个例子比如abc的 ...

  7. 【linux】vim常用操作及vim插件的安装使用

    vim是linux下一个非常好用的文本编辑器,在linux下开发的人员要熟练掌握vim常用命令. 1.  打开在第n行 vim +143 filename.txt 2. 只读模式打开 vim -R / ...

  8. selenium js

    这几天的任务量比较大,还有一个挺棘手的网站cfda,不巧的是数据量还挺大,40W关于企业信息.上来就是debugger pause,调试中断,开始还是挺懵逼的,但这个还算简单毕竟google,百度,就 ...

  9. js 获取随机数 Math.random()

    js 获取随机数 Math.random() // 结果为0-1间的一个随机数(包括0,不包括1) var randomNum1 = Math.random(); //console.log(rand ...

  10. axios请求、返回拦截器

    1.http 请求拦截器 axios.interceptors.request.use(function(config){ //在发送请求之前做些什么 return config }), functi ...