在IntelliJ中的本地Tomcat上部署Spring Boot

时间:2018-09-24 14:24:49

标签: angular spring-boot tomcat intellij-idea

下午好

我是Spring和Spring Boot的新手,通常我会使用Eclipse IDE和JSF。 我在一个使用Angular到前端并使用Spring Boot到后端的项目中工作。我具有以下Maven结构

 PARENT
   FRONTEND
     pom.xml
   BACKEND
     pom.xml
pom.xml

FrontEnd产生一个webjar,它使用FrontEnd-Maven-PLugin来构建Angular应用程序,后端取决于此webJar。 BackEnd pom.xml具有以下配置:

<packaging>war</packaging>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

我不想使用嵌入式Tomcat服务器。 在Intellij中,我将项目导入为Maven项目, 在运行/调试配置中,除了默认的Spring Boot配置外,我还创建了另一个配置,该配置具有指向* .war工件的“通往Jar的路径”,并将Maven目标配置为“ Maven目标软件包”。

这样,当我运行此配置时,将编译并构建FrontEnd。 但是我选择了Spring Boot还是这种配置,我总是在运行控制台中看到以下日志

 o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''

我想这意味着我正在将应用程序部署在嵌入式服务器中。

所以我的问题是:

1:如何从本地Tomcat(而不是嵌入式Tomcat)中的Intellij部署和运行应用程序。  2:是否有更好的配置来构建前端并自动与Intellij一起在后端部署它?

在JSF项目的Eclipse IDE中,我只是将服务器添加到项目中,然后蚀构建并将其部署到应用程序并管理所有内容。

先谢谢了 最好的问候

1 个答案:

答案 0 :(得分:0)

1:如何从本地Tomcat(而不是嵌入式Tomcat)中的Intellij部署和运行应用程序。 您已经提供了作用域,因此嵌入式tomcat将不会包含在您的人工产品中。 IntelliJ可以选择在运行时在类路径上加载提供的依赖项。 (称为Include dependencies with "Provided作用域”,可以在“配置”标签下找到,然后在spring boot运行配置的“环境”部分中找到。

除了使用spring boot run config外,您还可以自己在本地安装tomcat,并使用应用程序服务器插件对其进行管理和部署。

为“ Tomcat”创建一个新的运行配置,然后选择“本地”。在这里,您将能够配置本地tomcat实例,以便它知道将其部署到何处。

2:是否有更好的配置来构建前端并自动将其与后端一起部署并在Intellij上开箱即用?

我不能说是否更好,但是我使用不同的方法进行了类似的设置。随时在这里查看我的仓库:https://github.com/phazebroek/tour-of-rockstars 客户端模块包含前端angular应用,而api是spring-boot后端。客户端使用frontend-maven-plugin来构建它,并将输出放置在目标路径中。然后,我的api模块在Maven验证阶段利用maven-resources-plugin插件将其复制到spring boot目标目录的静态文件夹中。这样做的结果是,我的角度应用程序已打包并包含在静态文件夹中的后端spring boot应用程序的war文件中,因此我可以在spring中使用它。因此,例如,如果您在:8080上运行您的应用,则可以在同一端口上访问角度应用。例如:8080 / app / foo。

请注意,例如,应在REST端点前面加上/ api前缀,以避免与角度视图发生冲突:-) 例如,如果您有一个称为/ foo的REST终结点,但是您也有一个带有URL / foo的角度小部件,它将碰撞。 (我尚未为该存储库解决该问题...)

附加说明:在独立端口上以独立模式从angular应用程序调用后端api

在旁注中,控制器包含注释@CrossOrigin(origins = "*"),以允许有角度的应用程序在独立端口上作为独立应用程序运行时来自其他应用程序的请求。当然,这仅应在开发模式下使用!