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

标签 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。 后端 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 工件的“Path to Jar”并将 Maven 目标配置为“Maven Goal package”的配置。

这样当我运行这个配置时,前端就被编译和构建了。 但是无论我选择 Spring Boot 还是这个配置,我总是在运行控制台中看到以下日志

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

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

所以我的问题是:

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

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

提前致谢 最好的问候

最佳答案

1:如何在本地 Tomcat 而不是嵌入式中部署和运行 Intellij 中的应用程序。 您已经提供了范围,因此嵌入式 tomcat 将不会包含在您的工件中。 IntelliJ 有一个选项可以在运行时加载类路径上提供的依赖项。 (它被称为 Include dependencies with "Provided scope"并且可以在 Configuration 选项卡下找到,然后在 spring boot run config 的 Environment 部分找到。

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

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

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

我不能说它是否更好,但我有一个使用不同方法的类似设置。请随时在这里查看我的 repo 协议(protocol):https://github.com/phazebroek/tour-of-rockstars 客户端模块包含前端 Angular 应用程序,api 是 spring-boot 后端。客户端使用 frontend-maven-plugin 构建它并将输出放在目标路径中。然后我的 api 模块利用 maven-resources-plugin 插件在 maven 验证阶段将它们复制到我的 spring boot 目标目录的静态文件夹中。这样做的效果是我的 Angular 应用程序被打包并包含在静态文件夹中后端 spring 引导应用程序的 war 文件中,因此我可以使用 spring 提供它的内容。因此,例如,如果您在 :8080 上运行您的应用程序,您可以在同一端口上访问您的 Angular 应用程序。例如:8080/应用/富。

请注意,例如,您应该在 REST 端点前加上/api 以避免与 Angular View 发生冲突 :-) 例如,如果你有一个名为/foo 的 REST 端点,但你也有一个带有 url/foo 的 Angular 小部件,它将发生冲突。 (我还没有为那个存储库修复那个问题...)

额外注意:在不同端口上以独立模式从 Angular 应用程序调用后端 api

附带说明一下, Controller 包含注释 @CrossOrigin(origins = "*") 以允许来自 Angular 应用程序的请求,当它作为独立应用程序在不同的端口上运行时.当然,这应该只在开发模式下使用!

关于angular - 在 IntelliJ 中的本地 Tomcat 上部署 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52481504/

相关文章:

tomcat - 如何在没有 webapps 的情况下设置 tomcat 虚拟主机?

spring-mvc - 在 spring boot 中添加到 web-app 下后资源没有更新

html - 在 Angular html 模板中访问常量枚举

java - Spring Boot 和生成的 JavaScript/CSS 内容

java - Spring MVC 如何为 Controller 方法提供注入(inject)

spring-boot - 多模块Vaadin项目生成文件到父模块中

android - gradlew.bat assembleRelease 如果在 Apache Tomcat (Windows Server) 中执行则被卡住

node.js - 以 Angular 15 预加载 css

javascript - 数组 findIndex() 函数 - 无法读取未定义的属性 'id'

resize - 如何对 div 调整大小执行变化检测