Spring Boot:spring boot 能否访问服务器容器配置文件以读取所需的变量而不是 application.properties 文件

Springboot: Can springboot access server container configuration files to read needed variables instaed from application.properties file

我知道 Springboot 应用程序可以使用 application.properties 或 application.yaml 文件来检索变量,例如数据库连接设置、用户名、密码等。

但是,由于信息敏感,我们的开发团队仅将这些用于测试环境,而不用于生产环境。这些对开发人员不可用。

这些由安全团队提供并直接在 Liberty 服务器上的服务器配置文件中设置(这些 server.xml 文件位于服务器安装目录中)。

开发人员拥有自己的 Liberty 服务器 运行 实例,其中他们拥有自己版本的 server.xml 文件。如果我们能让 Springboot 读取这些文件,那么我们就可以让它模拟生产服务器环境并使转换更容易,而不是读取本地 application.properties 文件。

这可能吗?

如果没有,有什么解决方法?

我将讨论替代解决方案。

首先,我不明白开发人员将如何访问生产服务器属性。 为了保护敏感属性,您可以使用 属性 加密工具。敏感属性在 application.properties 中将采用加密格式,在服务器启动期间它将解密加密属性并相应地使用。

这是 property encrytion library

的此类库

首先,通常 developer/application 不需要直接访问数据库连接设置、用户名、密码等道具,因为所有这些都在数据源配置中的服务器中配置,所以应用程序只需要数据源的 JNDI 名称连接到它。

其次,如果您使用无法在服务器中配置的技术,开发人员和安全团队应为此类道具使用环境变量。

Liberty 可以读取 env 变量,或者也可以通过 server.env 定义它们,然后在 server.xml 配置中使用,例如:

<dataSource  jndiName="jdbc/myDS">
   ...
        <properties.db2.jcc serverName="${JDBC_HOST}" portNumber="${JDBC_PORT}" databaseName="${JDBC_DB}" user="${JDBC_USER}" password="${JDBC_PASSWORD}"/> 
    </dataSource>

同样,您可以在 springboot 中使用 env vars,或者像这样在 application.properties 中配置它:

jdbc.user=${JDBC_USER}

或直接在代码中:

@Value("${JDBC_USER}")
private String jdbcUser;

使用 env 变量有额外的好处,例如,如果在容器中部署,您可以稍后覆盖它们。