2016-10-03 38 views
0

我有一个三个jar文件的项目结构。所有被加载到一个类路径然后被执行。我正在使用spring core,jpa和hibernate。 @Services/@Autowired工作正常,以及实体和存储库(所有在MySQL数据库)。在独立的jar中没有tomcat的春季启动

现在我希望项目可以通过网络/互联网发送和接收消息。所以我问了一些人如何在不破坏我目前的结构的情况下实现这一目标。我被告知spring-boot是我的架构,因为我不需要Web服务器(tomcat或glassfish)。

但现在我不确定这是否正确,因为我没有发现任何消息来源表示同样的事情。正因为如此,我试图执行它,以便自己验证它。
我对项目做出的重大变化(所有pom.xml文件和我的配置类)可以在这里找到:http://84.141.90.123:9910/

从我读,我需要@SpringBootApplication注释春天开机。这相当于@Configuration,@ComponentScan,@EnableAutoConfiguration,@EnableWebMvc
前两个已经在我的结构中。但是,当我在最后两条注解,我得到不同的错误:

  • 当我添加@EnableAutoConfiguration我得到

    Caused by: java.lang.IllegalArgumentException: No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct. 
    
  • 当我添加@EnableWebMvc我得到

    Caused by: java.lang.IllegalArgumentException: A ServletContext is required to configure default servlet handling 
    

从我的坏英文knollage,@EnableWebMvc错误似乎说t应用程序需要一个web服务器(tomcat或glassfish)。
所以是主要声明错了,我无法启动没有Web服务器的春季启动?因为我没有使用Spring的任何xml文件和/或属性文件(他们没有工作),所以我只依赖基于java代码的spring,jpa和hibernate配置。因此,只有很少的教程/线程有帮助。大多数时候,他们只是说add thi or add that to your xml,但因为我没有他们,这是一个有点痛苦的屁股。

另外我用aspectj编译,所以我不能使用春季编译父。而且我也无法操作主类/方法,因为主类在外部的jar文件中,而这个文件不是由我编写的。

那么具体:

  1. 可以在独立运行罐子弹簧启动应用程序,而Web服务器包装呢?
  2. 如果是,我做错了什么?我是否缺少依赖项,注释或配置?
+1

1.是的,2.您正试图运行一个没有webserver的web应用程序,这是永远不会发生的。你对'@ SpringBootApplication'是什么的知识是错误的。它不包含'@ EnableWebMvc'。只有在检测到某些与Web相关的类时,才会通过自动配置添加@ EnableWebMvc。只需添加'@ SpringBootApplication'并确保你有适当的maven插件和依赖。如果你想公开端点你需要一个服务器,Spring Boot带有一个嵌入式的服务器,所以你不需要部署它。我想这是这里的主要误解。 –

+0

我很抱歉,但我想我不明白你的答案。所以你告诉我添加'@ SpringBootApplication'。但是从我读的内容来看,我必须把它添加到主类中。而且我无法更改该方法,因为它在另一个未由我编程的jar文件中。或者我可以将注释添加到我的JpaConfig类中吗?而且,进一步说,“揭露端点”是什么意思?春季引导是我正在寻找或不是?从我当前的jar项目接收和发送http GET/POST请求是我尝试实现的唯一目标。 – christopher2007

+0

如果您没有任何容器,您希望如何接收GET/POST请求?我建议阅读一些文档,并对Spring Boot是什么以及它能做什么有一个基本的了解。你可以简单地添加注释,但是需要引导Spring应用程序的东西,即没有它的'SpringApplication'什么都不会发生。 –

回答

0

如果你想通过HTTP接收消息(即运行REST API),那么你需要一个Web服务器。
如果你只是想通过HTTP发送消息,那么你只需要一个HTTP客户端。

Spring-boot可以选择运行嵌入式Web服务器(默认情况下为tomcat),您不需要运行单独的应用程序服务器。

要解决您的构建问题,我将从使用spring initializr生成一个项目开始。

你可以选择你想要的依赖项(尝试使用底部的高级版本链接),它将为你构建一个具有正确结构,构建文件和兼容依赖项的maven/gradle项目。