Be slightly more defensive in DataSource initialization

Adding an Order to the BeanPostProcessor and catching an exception
are enough to get a simple web app with @EnableGlobalMethodSecurity
and JDBC user details running. It actually doesn't solve an underlying
problem in Spring Security, but I'll deal with that separately.

See gh-1115
pull/1128/head
Dave Syer 11 years ago
parent af825fa439
commit c6175073ae

@ -26,8 +26,8 @@ import javax.sql.DataSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.init.DatabasePopulatorUtils;
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
@ -48,7 +48,7 @@ class DataSourceInitializer implements ApplicationListener<DataSourceInitialized
private static Log logger = LogFactory.getLog(DataSourceInitializer.class);
@Autowired
private ApplicationContext applicationContext;
private ConfigurableApplicationContext applicationContext;
@Autowired(required = false)
private DataSource dataSource;
@ -75,9 +75,15 @@ class DataSourceInitializer implements ApplicationListener<DataSourceInitialized
List<Resource> scripts = getScripts(this.properties.getSchema(), "schema");
if (!scripts.isEmpty()) {
runScripts(scripts);
try {
this.applicationContext.publishEvent(new DataSourceInitializedEvent(
this.dataSource));
}
catch (IllegalStateException e) {
logger.warn("Could not send event to complete DataSource initialization ("
+ e.getMessage() + ")");
}
}
}
@Override

@ -26,6 +26,7 @@ import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.GenericBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.Ordered;
import org.springframework.core.type.AnnotationMetadata;
/**
@ -35,7 +36,14 @@ import org.springframework.core.type.AnnotationMetadata;
* @author Dave Syer
* @since 1.1.2
*/
class DataSourceInitializerPostProcessor implements BeanPostProcessor {
class DataSourceInitializerPostProcessor implements BeanPostProcessor, Ordered {
private int order = Ordered.HIGHEST_PRECEDENCE;
@Override
public int getOrder() {
return this.order;
}
@Autowired
private BeanFactory beanFactory;

Loading…
Cancel
Save