Java 如何在OpenLiberty中的server.xml配置属性文本/变量中使用自定义转换器?

Java 如何在OpenLiberty中的server.xml配置属性文本/变量中使用自定义转换器?,java,ibm-cloud,cloud-foundry,open-liberty,microprofile,Java,Ibm Cloud,Cloud Foundry,Open Liberty,Microprofile,我真的希望在JPA中使用容器管理的事务,因此可以采用简单的方法,在server.xml中创建数据源,然后在代码中使用@PersistenceContext 我目前面临的问题——也许我想的太复杂了——是这样一个事实:我在运行时在我的Cloud Foundry环境中作为VCAP_SERVICES系统环境变量获取凭据 这个VCAP_服务变量包含一个带有必要凭证的大JSON。因此,我必须首先提取此文件中相应的JSON,然后将其作为属性传递 我最初的想法是在这种情况下使用转换器返回JSON中的值,以便可以

我真的希望在JPA中使用容器管理的事务,因此可以采用简单的方法,在server.xml中创建数据源,然后在代码中使用@PersistenceContext

我目前面临的问题——也许我想的太复杂了——是这样一个事实:我在运行时在我的Cloud Foundry环境中作为VCAP_SERVICES系统环境变量获取凭据

这个VCAP_服务变量包含一个带有必要凭证的大JSON。因此,我必须首先提取此文件中相应的JSON,然后将其作为属性传递

我最初的想法是在这种情况下使用转换器返回JSON中的值,以便可以使用它们。但在定义的配置xml文件中,这似乎是不可能的

我确实想防止的是“注入”一些我自己做的事情,比如拥有一个属性文件并从不同的环境中复制值——DEV、TEST、PROD,因为Cloud Foundry环境已经在为我做这项工作了

因此,问题是: 如何将VCAP_SERVICES系统环境变量中的凭据获取到server.xml配置中?记住:我必须解析VCAP_SERVICES变量,因为这是JSON并提取值

<?xml version="1.0" encoding="UTF-8"?>
<server description="Config example">

    <featureManager>
        <feature>javaee-8.0</feature>
        <feature>mpMetrics-1.1</feature>
        <feature>monitor-1.0</feature>
    </featureManager>

    <!-- Postgres config-example-db definition -->
    <dataSource id="DefaultDataSource" jndiName="jdbc/config-example" jdbcDriverRef="postgresql-driver"
                type="javax.sql.ConnectionPoolDataSource" transactional="true">

        <properties serverName="config-example-db" portNumber="5432"
                    databaseName="postgres"
                    user="${config-example.db.username}"
                    password="${config-example.db.password}"/>

    </dataSource>

    <basicRegistry id="basic" realm="MicroProfileMetrics">
        <user name="admin" password="adminadmin"/>
        <user name="nonadmin" password="guest"/>
    </basicRegistry>

    <administrator-role>
        <user>admin</user>
    </administrator-role>

</server>

javaee-8.0
mpMetrics-1.1
监视器-1.0
管理

对于许多服务,liberty buildpack将自动配置server.xml。
postgresql就是其中之一。见:

此外,对于许多服务,buildpack将创建环境变量,然后应用程序可以访问这些变量

例如,将cloudantNoSQL服务绑定到应用程序会在VCAP_服务中产生以下凭据:

{
    "binding_name": null,
    "credentials": {
     "apikey": "<apikey>",
     "host": "<host>-bluemix.cloudantnosqldb.test.appdomain.cloud",
     "iam_apikey_description": "Auto-generated for binding <host>",
     "iam_apikey_name": "Cloudant-sd",
     "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer",
     "iam_serviceid_crn": "crn:v1:staging:public:iam-identity::<id>::serviceid:ServiceId-<serviceid>",
     "url": "https://<host>-bluemix.cloudantnosqldb.test.appdomain.cloud",
     "username": "<username>-bluemix"
    },
{
“绑定名称”:空,
“全权证书”:{

“apikey”:“

对于许多服务,liberty buildpack将自动配置server.xml。” postgresql就是其中之一。请参阅:

此外,对于许多服务,buildpack将创建环境变量,然后应用程序可以访问这些变量

例如,将cloudantNoSQL服务绑定到应用程序会在VCAP_服务中产生以下凭据:

{
    "binding_name": null,
    "credentials": {
     "apikey": "<apikey>",
     "host": "<host>-bluemix.cloudantnosqldb.test.appdomain.cloud",
     "iam_apikey_description": "Auto-generated for binding <host>",
     "iam_apikey_name": "Cloudant-sd",
     "iam_role_crn": "crn:v1:bluemix:public:iam::::serviceRole:Writer",
     "iam_serviceid_crn": "crn:v1:staging:public:iam-identity::<id>::serviceid:ServiceId-<serviceid>",
     "url": "https://<host>-bluemix.cloudantnosqldb.test.appdomain.cloud",
     "username": "<username>-bluemix"
    },
{
“绑定名称”:空,
“全权证书”:{

“apikey”:.

谢谢您提供的信息!当创建要推送到CF的JAR工件时,这种行为也起作用吗?取决于。默认情况下,liberty buildpack不会运行JAR。如果检测到springboot应用程序,那么它只需使用java-JAR运行)那么,您首选的CF推送方式是什么来从构建包生成变量?构建包已经将许多vcap服务解析为env.vars,但可能还没有完全解析。您可能会打印出环境,看看您得到了多少。如果不完整,可能会在上打开一个问题,感谢您提供的信息!在创建要推送到CF的JAR工件时,此行为也有效吗?取决于。默认情况下,liberty buildpack不会运行JAR。如果检测到springboot应用程序,那么它只是使用java-JAR运行)那么,您首选的cf推送方式是什么来从构建包中生成变量?构建包已经将大部分vcap服务解析为env.vars,但可能还没有完全解析。您可以打印出环境,并查看你有。如果它不完整,也许可以在