jeudi 2 avril 2015

Spring JUNIT datasource autowiring

I got Spring Java Config style configuration with 2 datasources:



@Configuration
@EnableTransactionManagement
public class DBConfig {

// main db
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.HSQL)
.addScript("classpath:schema.sql")
.addScript("classpath:data.sql")
.build();
}
//db for test
@Bean(name = "testDataSource")
public DataSource testDataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.HSQL)
.addScript("classpath:schema.sql")
.addScript("classpath:test-data.sql")
.build();
}


@Bean
public JdbcTemplate jdbcTemplate(){
return new JdbcTemplate(dataSource());
}


But when I autowire that datasources in my Test class and run him: i got the same result:



@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = DBConfig.class)
@Transactional
public class JdbcTest {

@Autowired
private JdbcTemplate jdbcTemplate;

@Autowired
@Qualifier("testDataSource")
private DataSource testDataSource;

@Test
public void findRealDb() {
String rowCount = jdbcTemplate.queryForObject("select message from messages", String.class);
System.out.println("real db " + rowCount);
}


@Test
public void findTestDb() {
String rowCount = (new JdbcTemplate(testDataSource).queryForObject("select message from messages", String.class));
System.out.println("test db " + rowCount);
}
}


So as result method findTestDb() logs same rowCount string as findRealDb() , but as you see them use different datasources to build jdbcTemplate.


enter image description here


Aucun commentaire:

Enregistrer un commentaire