将现有的Spring应用程序迁移到Spring Boot,手动配置Spring Boot?

41

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

我想“包装”这个遗留应用程序,并使用spring-boot启动它。然而,我遇到了困难,因为所有的示例似乎都假定要创建一个“新”的应用程序。

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

2)我需要添加哪些最小的新bean配置到我的现有Spring applicationContext.xml文件中,以便使用spring-boot w/ tomcat启动并将所有现有bean加载到spring-boot包装的上下文中?

请问有人能帮我指点一下吗?


1
如果不是Web应用程序,为什么要使用Spring Boot和Tomcat?只需不使用Web依赖项,让Spring Boot为您创建上下文即可。Spring Boot并不要求是基于Web的应用程序。您也可以将其用于命令行应用程序。 - M. Deinum
1个回答

49

Spring Boot参考指南中有专门章节介绍如何将现有应用程序转换为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。你可能想要禁用某些自动配置。要排除DataSource和Hibernate JPA自动配置,请使用:

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

使用 starter-web 依赖项让我感到非常困扰,因为它需要一些我不需要的 DataSource,导致出现“无法确定嵌入式数据库驱动程序类别为 NONE”的错误。我想要一个正确配置的 Tomcat 嵌入式服务器,并将其连接到 WSSpringServlet,以便我可以注册一些自定义 SOAP 服务。 - bitsofinfo
Spring Boot的自动配置会检查(除其他事项外)可用类和已配置的bean。您可能有一个(已使用的)依赖项或(配置错误的)bean触发了某些需要数据源的自动配置。有关自动配置类的更多详细信息,请参见参考文档 - hzpz
2
答案是:@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class}) - bitsofinfo
很高兴我们能够帮到你!我已经相应地更新了我的答案。但是,你可能想要添加自己的答案来详细说明你的解决方案。无论哪种方式,请在问题得到解决后接受任何答案。 - hzpz
在我的情况下,找不到org.springframework.batch.core.configuration.annotation.BatchConfigurer;因此我排除了BatchAutoConfiguration;感谢这篇很棒的文章;S. - SanThee
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接