У меня есть приложение 3.2.14.RELEASE spring, и я использую java config для проводов и ввода компонентов.Spring Java Config - @DependsOn chaining
В моем случае мне нужно
- настроить SSH туннель
- создать DataSource так, что он использует тот же SSH туннель сессии
- создать класс Query, который выполняет запрос SQL с помощью JdbcTemplate
Я настроить мой ApplicationContext связывают это с @DependsOn аннотациями связать три фасоли
package com.b.e.kpireport;
@Configuration
@ComponentScan(basePackages = {"com.b.e.kpireport" })
public class ApplicationContext {
@Bean(name = "sshTunnel")
public SSHTunnel getSSHTunnel() {
return new SSHTunnel();
}
@Bean(name = "dataSource")
@DependsOn("sshTunnel")
public DataSource getDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(jdbcUrl);
dataSource.setUsername(username);
dataSource.setPassword(password);
logger.info("getDataSource():"+jdbcUrl+":"+username+"/"+password+":"+driver);
return dataSource;
}
@Bean
@DependsOn("dataSource")
public Query getQuery() {
return new Query();
}
}
Класс запроса выглядит
class Query {
private JdbcTemplate jdbcTemplate;
@Autowired
private DataSource dataSource;
@Autowired
private SSHTunnel sshTunnel;
public void runQuery() {
sshTunnel.openSession();
jdbcTemplate = new JdbcTemplate(dataSource);
jdbcTemplate.execute(sql);
}
Независимо то, что я пытался, я вижу, что DataSource инициализируется перед SSHTunnel
Aug 26, 2015 5:20:44 PM com.b.e.kpireport.ApplicationContext getDataSource
INFO: getDataSource():jdbc:mysql://localhost:3006/centstorage:davidobrien/MnBufeuwncv3eR:com.mysql.jdbc.Driver
Aug 26, 2015 5:20:44 PM com.b.e.kpireport.SSHTunnel openSession
INFO: openSession
Любые предложения о том, как я могу гарантировать, правильный порядок инициализации боба?
и когда вы пытаетесь использовать 'public DataSource getDataSource (SSHTunnel tunnel)' - даже если вам это не нужно - это помогает? – sodik
Кстати: вы открываете сессию ssh только при запуске запроса - так что это должно быть после создания источника данных. – sodik
@sodik - сеанс ssh в настоящее время открыт первым, и я могу исследовать это больше, но это все еще не затрагивает порядок создания bean-компонента в этом вопросе. Также в каком классе вы добавляете метод выше, я предполагаю, что это Query.class? – emeraldjava