【发布时间】:2016-01-11 09:38:13
【问题描述】:
我想要实现的是拥有一个带有动态name 参数的@Resource。具体来说,我想使用@Resource(name = "{JNDI_NAME_PARAM}") 注入一个DataSource 对象,因为我们可以在应用程序服务器中配置许多数据源,并且应用程序使用的数据源在.xml 或.config 文件中定义。由于我在编译期间不知道数据源的名称,因此我需要能够在运行时获取它。现在我正在注入一个自定义的@ApplicationScoped bean,它使用InitialContext().lookup() 在其@PostConstruct 方法中创建一个数据源。但是我很好奇(主要是因为它更优雅)如何使用@Resource 注释实现注入。
我可以在应用服务器中创建一个自定义的默认 JNDI 名称,并在需要时更改它指向的数据源,但这不能用于多个部署,而且很多时候我们部署了两次应用程序,一次在测试数据库中一次在生产数据库中,因此 JNDI 同时指向两个不同的数据源。
【问题讨论】:
-
好吧,回答你标题中的“问题”:你绝对不能有一个在编译时不固定的注释值。但这并不意味着你使用的任何东西都没有非注解的方式来注入东西。
标签: java datasource cdi jndi