=================================
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. Leetcode 345. 反转字符串中的元音字母 By Python

    编写一个函数,以字符串作为输入,反转该字符串中的元音字母. 示例 1: 输入: "hello" 输出: "holle" 示例 2: 输入: "leet ...

  2. 【BZOJ5315】[JSOI2018]防御网络(动态规划,仙人掌)

    [BZOJ5315][JSOI2018]防御网络(动态规划,仙人掌) 题面 BZOJ 洛谷 题解 显然图是仙人掌. 题目给了斯坦纳树就肯定不是斯坦纳树了,,,, 总不可能真让你\(2^n\)枚举点集再 ...

  3. 【WC2018】州区划分(FWT,动态规划)

    [WC2018]州区划分(FWT,动态规划) 题面 UOJ 洛谷 题解 首先有一个暴力做法(就有\(50\)分了) 先\(O(2^nn^2)\)预处理出每个子集是否合法,然后设\(f[S]\)表示当前 ...

  4. 【转】VMware 全屏显示

    首先解决一个问题:配置虚拟机,发现屏幕大小太小 需要安装vmware tools ,屏幕就会自适应 但是安装vmware tools 的按钮是灰的,所以我首先就是安装它     [来源]

  5. 加载样式TTFB waiting时间长

    1.谷歌浏览器64位 2.在调试网页的时候,每回修改一个,刷新时,速度很慢 3.结果很恼火.每调试一回等半天.效率低下.... 解决办法是: "在每个CSS规则的后面加一个空行". ...

  6. testng报告-extentsReports使用-klov

    extentreport部分参考: https://blog.csdn.net/Care_sQueendom/article/details/78651950 https://testerhome.c ...

  7. nginx根据cookie分流

    转载互联网 nginx根据cookie分流众所周知,nginx可以根据url path进行分流,殊不知对于cookie分流也很强大,同时这也是我上篇提到的小流量实验的基础. 二话不说,先看需求,两台服 ...

  8. MySQL_参数设置

    1.max_allowed_packet 描述:有时备份数据库时,将本地psc文件备份到数据库时,会遇见备份不成功的情况 分析:这时要考虑,是否由于max_allowed_packet这个参数过小,导 ...

  9. MySQL5.7延迟复制半同步复制

    MySQL5.7延迟复制半同步复制 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.延迟复制 1>.什么是延迟复制 延迟复制是指定从库对主库的延迟至少是指定的这个间隔时间 ...

  10. script weixin app / weixin xiao chen xu

    s 开发人员: 1.设置权限程序员管理人员-管理体验者-配置测试人员的真实微信号2.微信小程序的后台-上传体验版代码-生成体验码二维码测试人员: 1.你的台式机/笔记本申请内外网.有usb权限2.有W ...