Java EE7 : @DatasourceDefinition, 如何参数化值?

标签 java jakarta-ee jpa

我正在学习如何使用@DataSourceDefinitiondocumentation给出一个具体的例子

 @DataSourceDefinition(name="java:global/MyApp/MyDataSource",
      className="com.foobar.MyDataSource",
      portNumber=6689,
      serverName="myserver.com",
      user="lance",
      password="secret"
   )

问题
如何用这些值替换环境变量?如DB_HOSTDB_URL

原因是当我将应用程序部署到像 OPENSHIFT 这样的提供商时,我得到的都是用于连接数据库的值。

我不想在我的代码库中对它们进行硬编码。这增加了与特定数据库的耦合,并且无法在运行时切换

有什么想法吗?

最佳答案

如果您想在 OPENSHIFT 以及本地 JBoss 中部署 Java EE 应用程序,那么建议使用 JBoss 配置文件来配置数据源属性,并在 persistence.xml 中使用该数据源 JNDI 名称

引用:https://help.openshift.com/hc/en-us/articles/202964690-Default-database-connectivity-configurations-for-JBoss-Applications

如果您确实不想想要使用应用程序服务器(如 JBoss)特定配置。然后,您可以为 @DataSourceDefinition 注解类编写数据源包装器,并使用外部属性文件更改数据源的值。

引用:http://jdevelopment.nl/switching-data-sources-datasourcedefinition

关于Java EE7 : @DatasourceDefinition, 如何参数化值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26064437/

相关文章:

java - bean类[org.springframework.transaction.interceptor.TransactionInterceptor]的无效属性 'transactionManagerBeanName'

java - 父子类 StackOverflowError 异常

java - 我可以在 JpaRepository 的 saveAll 中混合更新和插入吗

java - Spring REST 从以下位置获取对象列表

java - 如何找出在Tomcat中运行的servlet的实例数?

java - session.invalidate() 的奇怪问题

java - Java Web 应用程序中的唯一序列号

java - EXT GWT + Java EE

java - 在 spring petclinic 中设置 hibernate.max_fetch_depth

java - JPA 查找方法持久化数据