【问题标题】:How to serve Angular data in production Spring BOOT?如何在生产 Spring BOOT 中提供 Angular 数据?
【发布时间】:2019-04-19 04:22:30
【问题描述】:

在我发现(也尝试搜索文档)关于 Spring/BOOT 与 Angular(通常是 gradle)的每个集成教程中,都在讨论如何编译 Angular 以用于生产以及如何在开发中使用它。

我认为我发现的所有内容都表明您在一个端口(默认 8080)上运行服务器(Spring BOOT)并在第二个端口(默认 4200)上运行客户端(Angular)作为开发“ng serve”。

所以基本上在开发中,这意味着您有 2 个独立的服务器,它们甚至不需要相互了解。在所有教程中,Angular 都使用 Spring 作为 REST JPA 存储库(与上一句一致)。

我的问题是 - 我希望让它们在开发中一起工作的任何地方都使用了一个技巧,看起来有点像这样:

@CrossOrigin(origins = "http://localhost:4200", maxAge = 3600)
@RestController
@RequestMapping({"/api"})
public class SomeController

所以为了让 Spring 允许 Angular 4200 服务器实际工作,我们将 CrossOrigin 设置为该端口。虽然在开发中它绝对没问题,但是当我们打包 Angular 客户端进行生产时,不需要该注释 - Spring 不应该负责从其端口(8080)提供内容吗?不再有两台服务器,只有一台。

最后我的问题是:

这里的正确方法是什么?我真的需要@CrossOrigin 政策才能让它在开发中工作吗?如果是这样,我可以在生产中删除它吗? Spring 是否有一些巧妙的技巧将其标记为“devOnly”?

【问题讨论】:

标签: java spring angular spring-boot


【解决方案1】:

Spring 确实有 @Profile 注释。 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Profile.html 例如,如果您在本地机器上使用“dev”配置文件,则可以使用@Profile("dev") 仅在使用 dev 配置文件时加载 bean。 您可能不想使用某些配置来注释每个控制器类。 因此,创建一个配置类,您可以在其中配置仅用于开发的东西并使用 @Profile("dev") 注释对其进行注释。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多