详解如何将已有项目改造为Spring Boot项目

快速创建一个springboot web工程

以IntelliJ IDEA为例:

1、首先创建一个项目,创建时选择Spring Initializr,然后Next,如下图:

2、填写项目信息,如下图:

3、勾选web

4、最后一步,填写工程名字点击finish

第一次创建时系统会去下载需要的依赖,耗时稍长,请耐心等待。

创建成功后,目录结构如下:项目的根目录下会有一个artifactId+Application命名规则的入口类,SpringbootLearningApplication

SpringbootLearningApplication这个类有一个@SpringBootApplication注解,这是整个Spring Boot的核心注解,它的目的就是开启Spring Boot的自动配置。

@RestController注解,使之变为一个Controller,然后再在里边提供一个地址转换方法,如下:

main方法中,右击选择run,项目启动完成后,就可以在浏览器中直接访问了。

访问路径是http://localhost:8080。

Tip:

如果是第一次创建会发现,文件上带有红圈,文件内容不可更改,如下进行设置:

如何将已有项目改造为Spring Boot项目

1创建可部署的war文件

生成可部署war文件的第一步是创建一个 SpringBootServletInitializer的子类并重写它的configure方法。这样就可以利用Spring Servlet 3.0的支持,并允许在servlet容器启动时配置你的应用程序。通常,main方法所在的类需要继承

SpringBootServletInitializer:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(Application.class);
  }
  public static void main(String[] args) throws Exception {
    SpringApplication.run(Application.class, args);
  }
}

下一步是更新构建配置,以便您的项目生成war文件而不是jar文件。如果你使用Maven并使用spring-boot-starter-parent(它为你配置Maven的war插件),你所需要做的就是修改pom.xml文件把工程更改为war工程:

<packaging> war </ packaging>

如果你使用Gradle,你需要修改build.gradle以将war插件用到项目中:

apply plugin:'war'

最后一步是确保内置servlet容器不会干扰要部署war文件的servlet容器。为此,您需要按给定方式声明内置servlet容器依赖关系。

Maven:

<dependencies>
  <!-- … -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
  </dependency>
  <!-- … -->
</dependencies>

Gradle:

dependencies {
   // ...
  providedRuntime'org.springframework.boot :spring-boot-starter-tomcat'
  // ...
}

[注意]

如果您使用的Gradle版本仅支持仅编译依赖项(2.12或更高版本),则应继续使用providedRuntime。在其他某些限制条件内, 如果compileOnly依赖不在测试类的路径中,这将导致任何基于Web的集成测试将失败。

如果您使用Spring Boot构建工具,那么将内置Servlet容器依赖关系标记为已提供将产生一个可执行文件,并在目录中打包提供的依赖lib-provided关系。这意味着,除了被部署到一个servlet容器,也可以使用运行应用程序java -jar的命令行上。

看一下Spring Boot的示例应用程序,用于上述配置的基于Maven的示例 。

2为旧的servlet容器创建可部署的war文件

较旧的Servlet容器不支持Servlet 3.0中使用的ServletContextInitializer引导进程。 但你仍可以在这些容器中使用Spring和Spring Boot,只是需要添加一个web.xml到应用程序中,并配置它通过DispatcherServlet加载一个ApplicationContext。

3将现有应用程序转换为Spring Boot

对于非web应用程序应该很容易(ApplicationContext通过调用替换为SpringApplication或 SpringApplicationBuilder)。Spring MVC应用程序通常需要先创建可部署的war应用程序,然后将其迁移到可执行的war或jar。jar转war指南

创建一个继承自SpringBootServletInitializer(例如,在一个叫做类Application)的可部署war包,并添加Spring Boot的

@SpringBootApplication注解。例:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
     //自定义应用程序或调用application.sources(...)添加源
    //因为我们的例子本身是一个@Configuration类(通过@SpringBootApplication)
    //我们实际上不需要重写这个方法。
    return application;
  }
}

记住,无论你放在什么sources只是一个Spring ApplicationContext,通常已经运行东西都继续在这里运行。可能有一些bean你可以以后删除,让Spring Boot为它们提供自己的默认值,但某些工作应优先进行。

静态资源可以移动到/public(或/static或)/resources或 /META-INF/resources)在类路径根目录中。messages.properties(Spring Boot在类路径的根目录中自动检测到这一点)也是如此。

Vanilla对Spring DispatcherServlet和Spring Security的使用不需要进一步的修改。如果你的应用程序还有其他特性,如使用其他servlet或过滤器,那么你需要添加一些配置到Application context。web.xml中替换的标签如下:

  1. 一个在容器中的Servlet或ServletRegistrationBean类型的带有@Bean注解的类会被构建安装,如果它在web.xml中被或中被配置的话。
  2. 一个Filter或FilterRegistrationBean类型的带有@Bean注解的类,其运行方式就像先前被和配置的类。
  3. 一个在XML文件中的ApplicationContext添加一个@Import注解就可以添加进Application。或者在已经大量使用注解配置的情况下在几行代码中重新定义@Bean注解。

为使war包运行,便需向应用程序中添加一个可执行的main方法,如

public static void main(String[] args) {
  SpringApplication.run(Application.class, args);
}

[注意]

如果打算将应用程序打为war或可执行应用程序,需要共享建设者的自定义中,可以执行SpringBootServletInitializer回调方法和main方法,就像这样:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

  @Override
  protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return configureApplication(builder);
  }

  public static void main(String[] args) {
    configureApplication(new SpringApplicationBuilder()).run(args);
  }

  private static SpringApplicationBuilder configureApplication(SpringApplicationBuilder builder) {
    return builder.sources(Application.class).bannerMode(Banner.Mode.OFF);
  }

}

应用程序可以分为多个类别:

  1. 没有web.xml的Servlet 3.0+应用程序。
  2. 带有web.xml的应用程序。
  3. 具有上下文层次结构的应用程序。
  4. 没有上下文层次结构的应用程序。

所有这些都应该适合转译,但每个可能需要略有不同的技巧。

如果已经使用Spring Servlet 3.0+初始化程序支持类,Servlet 3.0+应用程序就很容易转译。通常现存在 WebApplicationInitializer上的所有代码都可以迁移到SpringBootServletInitializer。如果现有的应用程序有多个ApplicationContext(例如,使用 AbstractDispatcherServletInitializer),那么可以将所有的上下文源合并为单个SpringApplication。其中可能遇到的问题是,如果程序运行失败,就需要维护上下文层次结构。请参阅 构建一个层次的条目的例子。包含Web特定功能的现有父上下文通常需要分解,以便所有ServletContextAware组件都在子上下文中。

非Spring应用程序的应用程序会更容易转换为Spring Boot应用程序,上述指导可能会有所帮助,但过程可能会有所不同。

4将WAR部署到WebLogic

要将Spring Boot应用程序部署到WebLogic,必须确保您的servlet初始化程序直接实现WebApplicationInitializer(即使您从已实现它的基类扩展)。

WebLogic的典型初始化方法:

import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.web.SpringBootServletInitializer;
import org.springframework.web.WebApplicationInitializer;

@SpringBootApplication
public class MyApplication extends SpringBootServletInitializer implements WebApplicationInitializer {

}

如果使用logback,您还需要告诉WebLogic更合适打包的版本,而不是预先安装的版本。您可以通过添加一个WEB-INF/weblogic.xml文件来做到这一点 ,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-web-app
  xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd
    http://xmlns.oracle.com/weblogic/weblogic-web-app
    http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd">
  <wls:container-descriptor>
    <wls:prefer-application-packages>
      <wls:package-name>org.slf4j</wls:package-name>
    </wls:prefer-application-packages>
  </wls:container-descriptor>
</wls:weblogic-web-app>

5在旧(Servlet 2.5)容器中部署WAR

Spring Boot使用Servlet 3.0 API来初始化ServletContext(寄存器Servlets 等),所以你不能在Servlet 2.5容器外使用相同的应用程序。但是,可以在旧容器上借助于特殊工具来运行Spring Boot。如果你添加org.springframework.boot:spring-boot-legacy作为依赖(单独维护 Spring Boot的核心,目前在1.0.2.RELEASE),你所需要做的是创建web.xml并声明一个context listener、 application context、filters 、servlets 。这个context listener对于Spring Boot是一个特殊的用例,但是对于Servlet 2.5中的Spring应用程序,其余部分是一般用法。例:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>demo.Application</param-value>
  </context-param>

  <listener>
    <listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener</listener-class>
  </listener>

  <filter>
    <filter-name>metricsFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>metricsFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextAttribute</param-name>
      <param-value>org.springframework.web.context.WebApplicationContext.ROOT</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

在这个例子中,我们使用的是单个应用程序上下文(由context listener创建的)并将其连接到DispatcherServlet用一个参数初始化。这在Spring Boot应用程序中是很常见的(一般只有一个application context)。

英文原版地址:http://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html#howto-convert-an-existing-application-to-spring-boot

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • spring boot+vue 的前后端分离与合并方案实例详解

    springboot和vue结合的方案网络上的主要有以下两种: 1. [不推荐]在html中直接使用script标签引入vue和一些常用的组件,这种方式和以前传统的开发是一样的,只是可以很爽的使用vue的双向数据绑定,这种方式只适合于普通的全栈开发. 2.[推荐]使用vue官方的脚手架创建单独的前端工程项目,做到和后端完全独立开发和部署,后端单独部署一个纯restful的服务,而前端直接采用nginx来部署,这种称为完全的前后端分离架构开发模式,但是在分离中有很多api权限的问题需要解决,包括部

  • 全面解析SpringBoot文件上传功能

    这些天忙着刷题,又怕遗忘了spring boot, 所以抽出一点时间折腾折腾,加深点印象. spring boot 的文件上传与 spring mvc 的文件上传基本一致,只需注意一些配置即可. 环境要求: Spring Boot v1.5.1.RELEASE + jdk1.7 + myeclipse 1).引入thymeleaf,支持页面跳转 <!-- 添加thymeleaf --> <dependency> <groupId>org.springframework.

  • SpringBoot快速构建应用程序方法介绍

    首先介绍一下SpringBoot在Coding上的使用场景.Coding中使用SpringBoot搭建的Email服务. 之所以选择SpringBoot,原因就是更加轻量级.在往常的Spring项目中,依赖的库太多,配置太繁杂,用在这只提供Email服务的程序上未免也小题大做了.而SpringBoot提供一些非功能性的常见的大型项目类特性(如内嵌服务器.安全.度量.健康检查.外部化配置)使得我们在部署上也更为方便,如可以直接地内嵌Tomcat/Jetty(不需要单独去部署war包) 1.Spri

  • 超详细的Spring Boot入门笔记(总结)

    1. Spring Boot 入门 Spring Boot是Spring社区较新的一个项目.该项目的目的是帮助开发者更容易的创建基于Spring的应用程序和服务,让更多人的人更快的对Spring进行入门体验,让Java开发也能够实现Ruby on Rails那样的生产效率.为Spring生态系统提供了一种固定的.约定优于配置风格的框架. Spring Boot具有如下特性: 为基于Spring的开发提供更快的入门体验 开箱即用,没有代码生成,也无需XML配置.同时也可以修改默认值来满足特定的需求

  • SpringBoot四大神器之Actuator的使用小结

    序 Spring Boot有四大神器,分别是auto-configuration.starters.cli.actuator,本文主要讲actuator.actuator是spring boot提供的对应用系统的自省和监控的集成功能,可以对应用系统进行配置查看.相关功能统计等. spring-boot-starter-actuator模块的实现对于实施微服务的中小团队来说,可以有效地减少监控系统在采集应用指标时的开发量.当然,它也并不是万能的,有时候我们也需要对其做一些简单的扩展来帮助我们实现自

  • spring-boot通过@Scheduled配置定时任务及定时任务@Scheduled注解的方法

    串行的定时任务 @Component public class ScheduledTimer { private Logger logger = Logger.getLogger(this.getClass()); /** * 定时任务,1分钟执行1次,更新潜在客户超时客户共享状态 */ @Scheduled(cron="0 0/1 8-20 * * ?") public void executeUpdateCuTask() { Thread current = Thread.curr

  • Spring Boot 配置大全(小结)

    Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置. SpringBoot的配置方式有很多,它们的优先级如下所示(优先级递减顺序): 1.命令行参数 2.来自java:comp/env的JNDI属性 3.Java系统属性(System.getProperties()) 4.操作系统环境变量 5.RandomValuePropertySource配置的random.*属性值 6.jar包外部的application

  • Spring Boot与RabbitMQ结合实现延迟队列的示例

    背景 何为延迟队列? 顾名思义,延迟队列就是进入该队列的消息会被延迟消费的队列.而一般的队列,消息一旦入队了之后就会被消费者马上消费. 场景一:在订单系统中,一个用户下单之后通常有30分钟的时间进行支付,如果30分钟之内没有支付成功,那么这个订单将进行一场处理.这是就可以使用延时队列将订单信息发送到延时队列. 场景二:用户希望通过手机远程遥控家里的智能设备在指定的时间进行工作.这时候就可以将用户指令发送到延时队列,当指令设定的时间到了再将指令推送到只能设备. 延迟队列能做什么? 延迟队列多用于需

  • 详解如何将已有项目改造为Spring Boot项目

    快速创建一个springboot web工程 以IntelliJ IDEA为例: 1.首先创建一个项目,创建时选择Spring Initializr,然后Next,如下图: 2.填写项目信息,如下图: 3.勾选web 4.最后一步,填写工程名字点击finish 第一次创建时系统会去下载需要的依赖,耗时稍长,请耐心等待. 创建成功后,目录结构如下:项目的根目录下会有一个artifactId+Application命名规则的入口类,SpringbootLearningApplication Spri

  • Maven项目改为spring boot项目的方法图解

    目录树 •新建Maven项目及步骤 •修改方法 •启动测试 新建Maven项目及步骤 我这里是从创建开始讲,使用的工具是Idea2017版本.如果是已经创建了Maven,想改为spring boot项目的请直接跳到[修改方法] 1.点击右上角的File,出来的列表选择New Object: 2.选择Maven,勾选Create from archetype,选择quickstart 3.输入GroupId与ArtifactId,Version版本号自己看着怎么顺眼怎么改:其中GroupId为包名

  • idea将maven项目改成Spring boot项目的方法步骤

    1.添加parent父级依赖 在pom.xml文件中,要首先添加parent父级依赖 <!-- 这个parent是springboot的父级依赖, 它提供相关的starter的maven管理以及版本号管理,还有相关maven插件的公共配置 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artif

  • Spring boot项目部署到云服务器小白教程详解

    本篇文章主要介绍了Spring boot项目部署到云服务器小白教程详解,分享给大家,具体如下: 测试地址:47.94.154.205:8084 一.Linux下应用Shell通过SSH连接云服务器 //ssh 用户名@公网IP ssh josiah@ip // 输入密码 二.开始搭建SpringBoot的运行环境 1.安装JDK并配置环境变量 1) 打开JDK官网 www.oracle.com 2) 找面最新对应的JDK版本,下载 这里要注意的一个问题是:云服务器下载JDK时一定要在本地去ora

  • Spring Boot项目中定制拦截器的方法详解

    这篇文章主要介绍了Spring Boot项目中定制拦截器的方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Servlet 过滤器属于Servlet API,和Spring关系不大.除了使用过滤器包装web请求,Spring MVC还提供HandlerInterceptor(拦截器)工具.根据文档,HandlerInterceptor的功能跟过滤器类似,但拦截器提供更精细的控制能力:在request被响应之前.request被响应之后.视

  • 详解Spring Boot 项目中的 parent

    前面和大伙聊了 Spring Boot 项目的三种创建方式,这三种创建方式,无论是哪一种,创建成功后,pom.xml 坐标文件中都有如下一段引用: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> &

  • 详解如何在code block创建一个C语言的项目

    有两种方法创建一个项目 1.在开始 界面 2.在菜单栏创建 接下来就是新建项目的步骤啦 1.在点了create 之后弹出来的窗口中 2.接下来就是c还是c++的问题 其实c和c++语法基本互通的(毕竟C++要兼容C),只是生成的后缀名不一样.anyway,如果是看的C语言语法书的话,还是选择C吧(其实C++中可以用到C语法,只是头文件要自己加,C就C吧) 3.填 写项目的基本资料 4. 5. 6.字好小怎么办?? 按照ctrl+鼠标向上滑轮(或者+号)(是小数字键盘上的+哦) 7. 那么这两个绿

  • 详解使用Jenkins部署Spring Boot项目

    jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为三个步骤: 第一步,jenkins安装 第二步,插件安装和配置 第三步,Push SSH 第四步,部署项目 第一步 ,jenkins安装 准备环境: JDK:1.8 Jenkins:2.83 Centos:7.3 maven 3.5' jdk默认已经安装完成 配置maven 版本要求maven3.5.0 软件下载 wget http://mirror.bit.ed

  • 详解eclipse下创建第一个spring boot项目

    spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者.也就是说,Spring Boot是为了简化Spring开发而生,主要思想是降低spring的入门,使得新手可以以最快的速度让程序在spring框架下跑起来. 今天我们就来创建

  • 详解如何在Spring Boot项目使用参数校验

    开发web项目有时候我们需要对controller层传过来的参数进行一些基本的校验,比如非空,非null,整数值的范围,字符串的个数,日期,邮箱等等.最常见的就是我们直接写代码校验,这样以后比较繁琐,而且不够灵活. Bean Validation 1.0(JSR-303)是一个校验规范,在spring Boot项目由于自带了hibernate validator 5(http://hibernate.org/validator/)实现,所以我们可以非常方便的使用这个特性 . 核心的pom依赖:

随机推荐