Java 如何阻止开发人员在生产环境中进行调试

Java 如何阻止开发人员在生产环境中进行调试,java,maven,intellij-idea,Java,Maven,Intellij Idea,最近,我的团队将我们的应用程序部署到生产环境中,现在我们有3个环境:开发环境、测试环境和生产环境。现在,我有一个配置文件,其中有一个DB的URL参数(当然有3个DB,每个环境一个) 使用maven,我在pom文件中有3个配置文件,每个环境一个,因此在dev中,maven会自动为dev创建一个配置文件。但问题是,如果开发人员不小心在配置文件中保存了生产数据库的URL,而不是dev DB,这将在生产中造成很多问题 如何阻止开发人员在开发时访问生产数据库 注: 1) 我希望开发人员通常能够访问生产数据

最近,我的团队将我们的应用程序部署到生产环境中,现在我们有3个环境:开发环境、测试环境和生产环境。现在,我有一个配置文件,其中有一个DB的URL参数(当然有3个DB,每个环境一个)

使用maven,我在pom文件中有3个配置文件,每个环境一个,因此在dev中,maven会自动为dev创建一个配置文件。但问题是,如果开发人员不小心在配置文件中保存了生产数据库的URL,而不是dev DB,这将在生产中造成很多问题

如何阻止开发人员在开发时访问生产数据库

注:

1) 我希望开发人员通常能够访问生产数据库,而不是在开发过程中

2) 我们使用的是java、intellij和maven,所以我认为maven可能有一个解决方案,或者intellij的插件


谢谢

对于配置服务器来说,这是一个非常好的用例

它将允许您控制对配置本身的访问,而不是将其混合到您的项目中。例如,可以阻止生产配置访问开发人员。和dev配置被生产用户阻止

如果SpringCloud配置可以包含在您的技术堆栈中,那么它就是一个很好的候选


这是集装箱化的经典用例。如果你能在docker环境中部署你的应用程序,那就太好了,你可以将config设置为环境变量。devops代码将使用单独的环境变量为dev、qa和prod构建docker映像

请看

如果你不接近集装箱化,那么你可以做类似的事情-

1) 在构建过程中,不要将配置包含在jar文件中

2) 在部署过程中,为给定环境和jar放置一个属性文件。您可以将源代码管理属性文件作为部署devops代码的一部分


在开发过程中,开发人员可以拥有开发人员属性文件的副本,而不需要提交给源代码管理。如果他们错误地提交了它,那么就没有问题了,因为构建过程忽略了它,部署将根据环境添加属性文件

您从未提到DBs的凭据是如何配置/控制的。我当然希望人们只要掌握了url就不能访问生产数据库,或者所有三个数据库都使用相同的用户id/密码?配置文件并不是用来区分环境,比如开发和产品。工件应该构建一次,然后测试,然后投入生产。您不应该为不同的阶段/环境重建工件。此外,我不理解开发人员为什么应该访问生产数据库。这可能会导致各种安全问题,而且可能是数据保护方面的问题。config server代码库的Git存储库仍然可以供开发人员访问,更新属性需要较长的项目过程。创建配置服务器会有什么帮助呢?我理解这个问题是在开发时“意外”使用了产品。配置服务器至少可以防止意外使用生产配置。GIT中配置文件更新的Pull请求可以控制开发人员意外地将生产数据库详细信息添加到开发人员配置中。