2015-02-18 4 views
1

Возможно ли передать переменную в аннотацию @Qualifier весной?Передача переменных в аннотация @Qualifier весной

Например,

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

У меня есть 10 различных баз данных, где моя весна пакетное задание выполняется каждый день. Номер базы данных передается как параметр задания. Я хочу определить источник данных для подключения на основе параметра задания.

Спасибо!

ответ

2

Вы можете использовать только постоянные выражения в аннотациях.

Итак, вы создаете 10 источников данных в своей конфигурации пружины - ваша работа должна использовать все десять за один проход? Если вам нужно только одно соединение для жизни вашего весеннего контекста, можете ли вы просто иметь 10 разных наборов файлов свойств?

Одна вещь, которую вы могли бы сделать, это создать все ваши источники данных в карте (шпонкой по «номеру базы данных», затем впрыснуть эту карту и ключ в вашем боба, например ...

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); 

     ... 
    } 
} 

Или я неправильно понял?

+0

Спасибо, Брет! Все задания должны выполняться параллельно, а задания запускаются с помощью аннотации @Scheduled, которая создает 10 заданий и запускает их (я использую SpringBoot). Основываясь на структуре моего приложения, я сделал что-то очень похожее на то, что вы предложили. Спасибо за помощь! –

2

нет, вы не можете передавать переменные в любые аннотации в Java. он не имеет ничего общего с весной.

использовать обходной путь. создать и передать услугу, которая будет выбрать правильную базу данных каждый раз, когда это необходимо

Смежные вопросы