将已有的spring app迁移到spring-boot,手动配置spring-boot?

Posted

技术标签:

【中文标题】将已有的spring app迁移到spring-boot,手动配置spring-boot?【英文标题】:Migrate existing spring app to spring-boot, manually configure spring-boot? 【发布时间】:2015-10-03 05:51:26 【问题描述】:

我有一个现有的 spring 3.1.4 应用程序,它可以正常工作并且可以自行启动。我目前在我自己的主类中手动启动 spring 上下文。这不是 spring-mvc 应用程序,它不包含任何 servlet、web.xml 也不生成 WAR。它只是为集成后端生成一个 JAR。

我想“包装”这个遗留应用程序并使用 spring-boot 启动它。但是,我无法弄清楚如何执行此操作,因为所有示例似乎都假设创建一个“新”应用程序。

1) 我有我现有的 applicationContext.xml 文件,其中包含我现有的 Spring 应用程序 bean 声明

2) 为了启动带有 tomcat 的 spring-boot 并将我现有的所有 bean 加载到 spring-boot 中,我需要添加到现有 Spring applicationContext.xml 文件中的最小新 bean 配置集是多少包装的上下文?

谁能指出我正确的方向?

【问题讨论】:

如果它不是一个 Web 应用程序,那么为什么要使用 Spring Boot 和 Tomcat?只是不要使用 web 依赖,让 spring boot 为你创建上下文。 Spring Boot 不需要是基于 Web 的应用程序。您也可以将它用于命令行应用程序。 【参考方案1】:

Spring Boot 参考指南中有一章专门介绍Converting an existing application to Spring Boot。

基本上你需要添加 Spring Boot 依赖,然后像这样实现主入口点:

@SpringBootApplication
@ImportResource("classpath:applicationContext.xml")
public class MySpringBootApplication 
    public static void main(String[] args) 
        SpringApplication.run(MySpringBootApplication.class, args);
    

然而,这也将触发 Spring Boot 的基于(除其他外)可用类和配置的 bean 的自动配置。您可能想disable certain auto-configurations。要排除 DataSource 和 Hibernate JPA 自动配置,请使用:

@SpringBootApplication(exclude =  DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class )

【讨论】:

使用 starter-web 依赖项,这让我抓狂,因为它需要一些我不需要的数据源,所以会出现“无法确定数据库类型 NONE 的嵌入式数据库驱动程序类”之类的错误。我想要一个嵌入并连接到 WSSpringServlet 的正确配置的 Tomcat,这样我就可以注册一些自定义 SOAP 服务。 所以跟着这个docs.spring.io/spring-boot/docs/current/reference/html/…,我得到这个“无法确定数据库类型NONE的嵌入式数据库驱动程序类”错误。除了我在现有 spring 上下文源中配置的数据库之外,我绝对不需要数据库,我将按照文档中的说明添加到应用程序中。 Spring Boot 的自动配置检查(除其他外)可用的类和配置的 bean。您可能有一个(使用过的)依赖项或一个(配置错误的)bean,它触发了一些需要数据源的自动配置。有关自动配置类的更多详细信息,请参阅reference。 排除tomcat-jdbc 包。 答案是:@SpringBootApplication(exclude = DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class)

以上是关于将已有的spring app迁移到spring-boot,手动配置spring-boot?的主要内容,如果未能解决你的问题,请参考以下文章

Vue项目迁移小程序,实操干货分享

将 Spring Web App 从 tomcat 5.5 迁移到 tomcat 6.0 的问题

java将已有的字符串保存到txt文件中

轻松上云系列之一:本地数据迁移上云

如何将 Spring Batch Cron 作业迁移到 Spring Cloud 任务

将 java spring-boot app *.jar 与根文件夹中的其他文件一起部署到 heroku