在Spring中将变量传递给@Qualifier注释

时间:2015-02-18 17:05:50

标签: java spring

是否可以将变量传递给Spring中的@Qualifier注释?

例如,

@Autowried
@Qualifier("datasource_" + "#{jobParameters['datasource.number']}")
private DataSource ds;

我有10个不同的数据库,我的Spring批处理作业每天运行。数据库号作为作业参数传递。我想根据作业参数定义要连接的数据源。

谢谢!

2 个答案:

答案 0 :(得分:2)

只允许在注释中使用常量表达式。

因此,您在弹簧配置中创建了10个数据源 - 您的工作是否需要在一次运行中使用全部十个?如果您在spring上下文的生命周期中只需要一个连接,那么您可以只拥有10组不同的属性文件吗?

您可以做的一件事是在地图中创建所有数据源(键入"数据库编号"然后将此地图和密钥注入您的bean,例如...

public class MyBean {
    @Autowired @Qualifier("dataSourceMap")
    private Map<String, DataSource> dataSourceMap;

    @Value("#{jobParameters['datasource.number']}")
    private String dbKey;

    public void useTheDataSource() {
        DataSource ds = dataSourceMap.get(dbKey);

        ...
    }
}

或者我误解了?

答案 1 :(得分:2)

不,你不能将变量传递给java中的任何注释。它与春天无关。

使用解决方法。创建并传递一个服务,每次需要时都会选择正确的数据库