【问题标题】:Springboot: Spring JPA - How to get datasource properties from server containerSpringboot:Spring JPA - 如何从服务器容器获取数据源属性
【发布时间】:2022-01-09 05:20:29
【问题描述】:

我使用 WAS Liberty Server 容器,它提供 server.xml 和 server.env 文件来配置许多东西,除了配置 URL、用户名、密码等 DataSource 属性。

出于安全原因,生产 Liberty 服务器的开发人员不知道这些属性。但是,开发人员使用相同的 server.xml/server.evn 文件,但具有不同的 DataSource 属性,因此他们可以完成工作。

所以,我可能有两个 server.env 文件,例如:

PRODUCTION server.env: dataSourceUrl="server-A-URL" (this URL is not known to developers)
DEVELOPMENT server.env: dataSourceUrl="server-B-URL" (this URL is known to developers)

,那么dataSourceUrl在生产和开发中的server.xml文件中使用,以设置相应的url。

所以,server.xml/server.env 文件的结构对于开发者和生产者来说是相同的,只是DataSource url、用户名、密码不同。这样,开发人员可以使用他们自己的 DataSource 属性工作,一旦准备好部署他们的应用程序,它就会交给其他团队,然后他们只需将 DataSource 属性更改为生产值并将应用程序部署到生产服务器。

使用 Springboot JPA,我知道我们可以使用 application.properties 文件来设置这些 DataSource 值。但是,我们希望能够将这些设置为 server.env 文件中的值。基本上在 application.properties 文件中有这样的东西:

spring.datasource.url=dataSourceUrl //dataSourceUrl is set in server.env

,然后可以使用@Value 注入在 Java 代码中使用该值,例如:

public class MyClass {
   @Value("${spring.datasource.url}")
   String dsUrl;
   ...
}

我一直在阅读有关外部化属性的信息,但我无法弄清楚如何做到这一点

【问题讨论】:

    标签: spring-boot spring-data-jpa websphere-liberty open-liberty


    【解决方案1】:

    您可以使用 Liberty 的 jndiEntry 元素使配置的值在 JNDI 中可用。您将需要jndi-1.0 功能,之后您可以进行配置,

    <jndiEntry jndiName="spring/datasource/url" value="${dataSourceUrl}"/>
    

    并在您的应用程序中访问它:

    String dsUrl = InitialContext.doLookup("spring/datasource/url");
    

    或者,从 web 或 ejb 组件作为:

    @Resource(lookup = "spring/datasource/url")
    String dsUrl;
    

    【讨论】:

    • 谢谢@njr 但这意味着dataSourceUrl 根本不会在application.properties 中定义,只能在server.xml 中的jndiEntry 元素中定义,然后应用程序将通过上下文查找或@Resource注解?我说的对吗?
    • 正确,以上假设您在 server.env 中定义 dataSourceUrl(或作为 server.xml 中的变量),而不是 application.properties。看起来我从你的问题中误解了这个细节。对此感到抱歉。
    • 没问题,我之所以这么重要是因为我使用了 JPA。所以我不需要通过上下文或'@Resource'注释来获取它并初始化dataSource等,因为JPA通过从application.properties文件中读取这些值来自动完成所有这些
    猜你喜欢
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-03
    • 2018-04-18
    • 1970-01-01
    • 2021-01-10
    • 2017-07-22
    相关资源
    最近更新 更多