我想要实现的是@Resource
带有动态name
参数。具体来说,我想使用DataSource
注入一个@Resource(name = "{JNDI_NAME_PARAM}")
对象,因为我们可以在应用程序服务器中配置许多数据源,并且应用程序使用的数据源在.xml或.config文件中定义。由于我在编译期间不知道数据源的名称,因此我需要能够在运行时获取它。现在我正在注入一个自定义@ApplicationScoped
bean,它使用@PostConstruct
在InitialContext().lookup()
方法中创建数据源。然而,我很好奇(主要是因为它更优雅)我如何使用@Resource
注释实现注射。
我可以在应用服务器中创建一个自定义的默认JNDI名称,并在需要时更改它指向的数据源,但这不能用于多个部署,并且很多时候我们将应用程序部署两次,一次在测试数据库中并且一次在生产数据库中,同时在两个不同的数据源上同时具有JNDI点。
答案 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)
})