在一个独立的jar

时间:2016-10-03 09:18:13

标签: java spring spring-mvc spring-boot

我有一个包含三个jar文件的项目结构。所有都加载到一个类路径中然后执行。我正在使用spring core,jpa和hibernate。 @Services / @Autowired工作正常,以及实体和存储库(全部在mysql数据库上)。

现在我希望项目可以通过网络/互联网发送和接收消息。所以我问了一些人如何在不破坏现有结构的情况下实现这一目标。我被告知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  
    

从我糟糕的英语结论来看,@EnableWebMvc错误似乎表明应用程序需要一个Web服务器(tomcat或glassfish)。
主要声明是错误的,我没有Web服务器就无法启动spring boot?

因为我没有为spring使用任何xml文件和/或属性文件(它们没有用),所以我只依赖于基于java代码的spring,jpa和hibernate配置。因此,只有很少的教程/线程可以提供帮助。大多数时候他们只是说add thi or add that to your xml,但因为我没有它们,所以屁股有点痛。

我也用aspectj编译,所以我不能使用spring compile parent。而且我也无法操纵主类/方法,因为主类位于外部jar文件中,而不是由我编程。

如此具体:

  1. 独立jar中的spring boot应用程序可以在没有Web服务器包装的情况下运行吗?
  2. 如果是的话,我做错了什么?我错过了依赖项,注释或配置吗?

2 个答案:

答案 0 :(得分:0)

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

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

要解决您的构建问题,我将首先使用spring initializr生成项目。

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

答案 1 :(得分:0)

改变:

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

到:

public static void main(String[] args) {
    new SpringApplicationBuilder(ActiveMqApplication.class)
       .web(WebApplicationType.NONE).run(args);
}