使用带有动态参数

时间:2016-01-11 09:38:13

标签: java datasource cdi jndi

我想要实现的是@Resource带有动态name参数。具体来说,我想使用DataSource注入一个@Resource(name = "{JNDI_NAME_PARAM}")对象,因为我们可以在应用程序服务器中配置许多数据源,并且应用程序使用的数据源在.xml或.config文件中定义。由于我在编译期间不知道数据源的名称,因此我需要能够在运行时获取它。现在我正在注入一个自定义@ApplicationScoped bean,它使用@PostConstructInitialContext().lookup()方法中创建数据源。然而,我很好奇(主要是因为它更优雅)我如何使用@Resource注释实现注射。

我可以在应用服务器中创建一个自定义的默认JNDI名称,并在需要时更改它指向的数据源,但这不能用于多个部署,并且很多时候我们将应用程序部署两次,一次在测试数据库中并且一次在生产数据库中,同时在两个不同的数据源上同时具有JNDI点。

1 个答案:

答案 0 :(得分:0)

您可以使用基于方法的注射。 它需要setter方法(setMyDB)。

public class Test {

  public javax.sql.DataSource myDB;

  @Resource(name="student")
  private void setMyDB(javax.sql.DataSource ds) {
      myDB = ds;
  }
}

如果名称已知,我们可以在

下拥有多个资源
@Resources({

 @Resource(your type)
 @Resource(your type)
})