package org.springframework.issues; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.context.ApplicationContextInitializer; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; import org.springframework.transaction.PlatformTransactionManager; import javax.sql.DataSource; public class AppInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext applicationContext) { ConfigurableListableBeanFactory beanFactory = applicationContext.getBeanFactory(); DataSource dataSource = createDataSource(); beanFactory.registerSingleton("dataSource", dataSource); beanFactory.registerSingleton("myTransactionManager", createPlatformTransactionManager(dataSource)); } public DataSource createDataSource() { EmbeddedDatabase dataSource = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2).build(); return dataSource; } public PlatformTransactionManager createPlatformTransactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } }