如何在生产Spring BOOT中提供Angular数据?

时间:2018-11-16 01:11:48

标签: java spring angular spring-boot

在我发现的所有有关使用Angular的Spring / BOOT的集成教程中(也尝试过搜索文档)(并且经常使用gradle),都在谈论如何编译Angular以进行生产以及如何在开发中使用它。

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

因此,基本上在开发中,这意味着您有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)提供内容?不再有2台服务器,只有1台。

最后我的问题是:

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

1 个答案:

答案 0 :(得分: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")批注对其进行批注。