是否可以将变量传递给Spring中的@Qualifier注释?
例如,
@Autowried
@Qualifier("datasource_" + "#{jobParameters['datasource.number']}")
private DataSource ds;
我有10个不同的数据库,我的Spring批处理作业每天运行。数据库号作为作业参数传递。我想根据作业参数定义要连接的数据源。
谢谢!
答案 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中的任何注释。它与春天无关。
使用解决方法。创建并传递一个服务,每次需要时都会选择正确的数据库