Polish "Add database initializer for Spring Integration"
Closes gh-8881
This commit is contained in:
parent
48bc29c77a
commit
3e60ec6cb4
|
|
@ -23,8 +23,6 @@ import org.springframework.beans.BeansException;
|
|||
import org.springframework.beans.factory.BeanFactory;
|
||||
import org.springframework.beans.factory.BeanFactoryAware;
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
|
|
@ -35,7 +33,6 @@ import org.springframework.boot.bind.RelaxedPropertyResolver;
|
|||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||
import org.springframework.context.EnvironmentAware;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.core.env.Environment;
|
||||
|
|
@ -43,8 +40,6 @@ import org.springframework.core.io.ResourceLoader;
|
|||
import org.springframework.integration.config.EnableIntegration;
|
||||
import org.springframework.integration.config.EnableIntegrationManagement;
|
||||
import org.springframework.integration.gateway.GatewayProxyFactoryBean;
|
||||
import org.springframework.integration.jdbc.lock.DefaultLockRepository;
|
||||
import org.springframework.integration.jdbc.store.JdbcChannelMessageStore;
|
||||
import org.springframework.integration.jdbc.store.JdbcMessageStore;
|
||||
import org.springframework.integration.jmx.config.EnableIntegrationMBeanExport;
|
||||
import org.springframework.integration.monitor.IntegrationMBeanExporter;
|
||||
|
|
@ -153,35 +148,12 @@ public class IntegrationAutoConfiguration {
|
|||
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
@Conditional(IntegrationSchemaCondition.class)
|
||||
@ConditionalOnProperty(prefix = "spring.integration.jdbc.initializer", name = "enabled")
|
||||
public IntegrationDatabaseInitializer integrationDatabaseInitializer(
|
||||
DataSource dataSource, ResourceLoader resourceLoader,
|
||||
IntegrationProperties properties) {
|
||||
DataSource dataSource, ResourceLoader resourceLoader,
|
||||
IntegrationProperties properties) {
|
||||
return new IntegrationDatabaseInitializer(dataSource, resourceLoader,
|
||||
properties);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static class IntegrationSchemaCondition extends AnyNestedCondition {
|
||||
|
||||
IntegrationSchemaCondition() {
|
||||
super(ConfigurationPhase.REGISTER_BEAN);
|
||||
}
|
||||
|
||||
@ConditionalOnBean(JdbcMessageStore.class)
|
||||
static class JdbcMessageStoreUsed {
|
||||
|
||||
}
|
||||
|
||||
@ConditionalOnBean(JdbcChannelMessageStore.class)
|
||||
static class JdbcChannelMessageStoreUsed {
|
||||
|
||||
}
|
||||
|
||||
@ConditionalOnBean(DefaultLockRepository.class)
|
||||
static class DefaultLockRepositoryUsed {
|
||||
|
||||
properties);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
|
|||
* Configuration properties for Spring Integration.
|
||||
*
|
||||
* @author Vedran Pavic
|
||||
* @author Stephane Nicoll
|
||||
* @since 2.0.0
|
||||
*/
|
||||
@ConfigurationProperties(prefix = "spring.integration")
|
||||
|
|
@ -36,7 +37,7 @@ public class IntegrationProperties {
|
|||
public static class Jdbc {
|
||||
|
||||
private static final String DEFAULT_SCHEMA_LOCATION = "classpath:org/springframework/"
|
||||
+ "integration/jdbc/schema-@@platform@@.sql";
|
||||
+ "integration/jdbc/schema-@@platform@@.sql";
|
||||
|
||||
/**
|
||||
* Path to the SQL file to use to initialize the database schema.
|
||||
|
|
@ -60,9 +61,9 @@ public class IntegrationProperties {
|
|||
public class Initializer {
|
||||
|
||||
/**
|
||||
* Create the required integration tables on startup if necessary.
|
||||
* Create the required integration tables on startup.
|
||||
*/
|
||||
private boolean enabled = true;
|
||||
private boolean enabled = false;
|
||||
|
||||
public boolean isEnabled() {
|
||||
return this.enabled;
|
||||
|
|
|
|||
|
|
@ -20,7 +20,6 @@ import java.util.Arrays;
|
|||
import java.util.List;
|
||||
|
||||
import javax.management.MBeanServer;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Rule;
|
||||
|
|
@ -41,7 +40,6 @@ import org.springframework.context.annotation.Primary;
|
|||
import org.springframework.integration.annotation.IntegrationComponentScan;
|
||||
import org.springframework.integration.annotation.MessagingGateway;
|
||||
import org.springframework.integration.gateway.RequestReplyExchanger;
|
||||
import org.springframework.integration.jdbc.store.JdbcMessageStore;
|
||||
import org.springframework.integration.support.channel.HeaderChannelRegistry;
|
||||
import org.springframework.integration.support.management.IntegrationManagementConfigurer;
|
||||
import org.springframework.jdbc.BadSqlGrammarException;
|
||||
|
|
@ -147,11 +145,13 @@ public class IntegrationAutoConfigurationTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void integrationJdbcDatabaseInitializerEnabledWithRequiredBeans() {
|
||||
public void integrationJdbcDatabaseInitializerEnabled() {
|
||||
load(new Class[] { EmbeddedDataSourceConfiguration.class,
|
||||
DataSourceTransactionManagerAutoConfiguration.class,
|
||||
JdbcTemplateAutoConfiguration.class,
|
||||
IntergrationJdbcConfiguration.class });
|
||||
DataSourceTransactionManagerAutoConfiguration.class,
|
||||
JdbcTemplateAutoConfiguration.class,
|
||||
IntegrationAutoConfiguration.class},
|
||||
"spring.datasource.generate-unique-name=true",
|
||||
"spring.integration.jdbc.initializer.enabled=true");
|
||||
assertThat(this.context.getBean(IntegrationProperties.class).getJdbc()
|
||||
.getInitializer().isEnabled()).isTrue();
|
||||
JdbcOperations jdbcOperations = this.context.getBean(JdbcOperations.class);
|
||||
|
|
@ -166,44 +166,32 @@ public class IntegrationAutoConfigurationTests {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void integrationJdbcDatabaseInitializerDisableWithoutRequiredBeans() {
|
||||
public void integrationJdbcDatabaseInitializerDisabled() {
|
||||
load(new Class[] { EmbeddedDataSourceConfiguration.class,
|
||||
DataSourceTransactionManagerAutoConfiguration.class,
|
||||
JdbcTemplateAutoConfiguration.class });
|
||||
assertThat(this.context.getBean(IntegrationProperties.class).getJdbc()
|
||||
.getInitializer().isEnabled()).isTrue();
|
||||
JdbcOperations jdbcOperations = this.context.getBean(JdbcOperations.class);
|
||||
this.thrown.expect(BadSqlGrammarException.class);
|
||||
jdbcOperations.queryForList("select * from INT_MESSAGE");
|
||||
this.thrown.expect(BadSqlGrammarException.class);
|
||||
jdbcOperations.queryForList("select * from INT_GROUP_TO_MESSAGE");
|
||||
this.thrown.expect(BadSqlGrammarException.class);
|
||||
jdbcOperations.queryForList("select * from INT_MESSAGE_GROUP");
|
||||
this.thrown.expect(BadSqlGrammarException.class);
|
||||
jdbcOperations.queryForList("select * from INT_LOCK");
|
||||
this.thrown.expect(BadSqlGrammarException.class);
|
||||
jdbcOperations.queryForList("select * from INT_CHANNEL_MESSAGE");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void integrationJdbcDisableDatabaseInitializer() {
|
||||
load(new Class[] { EmbeddedDataSourceConfiguration.class,
|
||||
DataSourceTransactionManagerAutoConfiguration.class,
|
||||
JdbcTemplateAutoConfiguration.class },
|
||||
DataSourceTransactionManagerAutoConfiguration.class,
|
||||
JdbcTemplateAutoConfiguration.class,
|
||||
IntegrationAutoConfiguration.class },
|
||||
"spring.datasource.generate-unique-name=true",
|
||||
"spring.integration.jdbc.initializer.enabled=false");
|
||||
assertThat(this.context.getBean(IntegrationProperties.class).getJdbc()
|
||||
.getInitializer().isEnabled()).isFalse();
|
||||
JdbcOperations jdbcOperations = this.context.getBean(JdbcOperations.class);
|
||||
this.thrown.expect(BadSqlGrammarException.class);
|
||||
jdbcOperations.queryForList("select * from INT_MESSAGE");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void integrationJdbcDatabaseInitializerDisabledByDefault() {
|
||||
load(new Class[] { EmbeddedDataSourceConfiguration.class,
|
||||
DataSourceTransactionManagerAutoConfiguration.class,
|
||||
JdbcTemplateAutoConfiguration.class,
|
||||
IntegrationAutoConfiguration.class },
|
||||
"spring.datasource.generate-unique-name=true");
|
||||
assertThat(this.context.getBean(IntegrationProperties.class).getJdbc()
|
||||
.getInitializer().isEnabled()).isFalse();
|
||||
JdbcOperations jdbcOperations = this.context.getBean(JdbcOperations.class);
|
||||
this.thrown.expect(BadSqlGrammarException.class);
|
||||
jdbcOperations.queryForList("select * from INT_GROUP_TO_MESSAGE");
|
||||
this.thrown.expect(BadSqlGrammarException.class);
|
||||
jdbcOperations.queryForList("select * from INT_MESSAGE_GROUP");
|
||||
this.thrown.expect(BadSqlGrammarException.class);
|
||||
jdbcOperations.queryForList("select * from INT_LOCK");
|
||||
this.thrown.expect(BadSqlGrammarException.class);
|
||||
jdbcOperations.queryForList("select * from INT_CHANNEL_MESSAGE");
|
||||
jdbcOperations.queryForList("select * from INT_MESSAGE");
|
||||
}
|
||||
|
||||
private static void assertDomains(MBeanServer mBeanServer, boolean expected,
|
||||
|
|
@ -246,16 +234,6 @@ public class IntegrationAutoConfigurationTests {
|
|||
|
||||
}
|
||||
|
||||
@Configuration
|
||||
static class IntergrationJdbcConfiguration {
|
||||
|
||||
@Bean
|
||||
public JdbcMessageStore messageStore(DataSource dataSource) {
|
||||
return new JdbcMessageStore(dataSource);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@MessagingGateway
|
||||
public interface TestGateway extends RequestReplyExchanger {
|
||||
|
||||
|
|
|
|||
|
|
@ -891,7 +891,7 @@ content into your application; rather pick only the properties that you need.
|
|||
spring.batch.table-prefix= # Table prefix for all the batch meta-data tables.
|
||||
|
||||
# SPRING INTEGRATION ({sc-spring-boot-autoconfigure}/integration/IntegrationProperties.{sc-ext}[IntegrationProperties])
|
||||
spring.integration.jdbc.initializer.enabled=true # Create the required integration tables on startup if necessary.
|
||||
spring.integration.jdbc.initializer.enabled=false # Create the required integration tables on startup.
|
||||
spring.integration.jdbc.schema=classpath:org/springframework/integration/jdbc/schema-@@platform@@.sql # Path to the SQL file to use to initialize the database schema.
|
||||
|
||||
# JMS ({sc-spring-boot-autoconfigure}/jms/JmsProperties.{sc-ext}[JmsProperties])
|
||||
|
|
|
|||
|
|
@ -5118,9 +5118,13 @@ Integration is available on your classpath it will be initialized through the
|
|||
Spring Boot will also configure some features that are triggered by the presence of
|
||||
additional Spring Integration modules. Message processing statistics will be published
|
||||
over JMX if `'spring-integration-jmx'` is also on the classpath. If
|
||||
`'spring-integration-jdbc'` is available on the classpath default database schema will be
|
||||
initialized using `'IntegrationDatabaseInitializer'`, which can be further customized
|
||||
using configuration properties.
|
||||
`'spring-integration-jdbc'` is available, the default database schema can be created
|
||||
on startup:
|
||||
|
||||
[source,properties,indent=0]
|
||||
----
|
||||
spring.integration.jdbc.initializer.enabled=true
|
||||
----
|
||||
|
||||
See the
|
||||
{sc-spring-boot-autoconfigure}/integration/IntegrationAutoConfiguration.{sc-ext}[`IntegrationAutoConfiguration`]
|
||||
|
|
|
|||
Loading…
Reference in New Issue