我真的很想将容器管理的事务与 JPA 一起使用,因此将采用简单的方法在 server.xml 中创建数据源,然后在我的代码中使用 @PersistenceContext。
我目前面临的问题——也许我想得太复杂了——是我在运行时在我的 Cloud Foundry 环境中获取凭据作为 VCAP_SERVICES 系统环境变量。
这个 VCAP_SERVICES 变量包含一个带有必要凭据的大 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>