houzhongjian
10 天以前 152781b05131e48bf6e94d71cc72dd54af52a3fb
iailab-framework/iailab-common-test/src/main/java/com/iailab/framework/test/config/SqlInitializationTestConfiguration.java
对比新文件
@@ -0,0 +1,52 @@
package com.iailab.framework.test.config;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate;
import org.springframework.boot.autoconfigure.sql.init.SqlInitializationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.jdbc.init.DataSourceScriptDatabaseInitializer;
import org.springframework.boot.sql.init.AbstractScriptDatabaseInitializer;
import org.springframework.boot.sql.init.DatabaseInitializationSettings;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import javax.sql.DataSource;
/**
 * SQL 初始化的测试 Configuration
 *
 * 为什么不使用 org.springframework.boot.autoconfigure.sql.init.DataSourceInitializationConfiguration 呢?
 * 因为我们在单元测试会使用 spring.main.lazy-initialization 为 true,开启延迟加载。此时,会导致 DataSourceInitializationConfiguration 初始化
 * 不过呢,当前类的实现代码,基本是复制 DataSourceInitializationConfiguration 的哈!
 *
 * @author iailab
 */
@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean(AbstractScriptDatabaseInitializer.class)
@ConditionalOnSingleCandidate(DataSource.class)
@ConditionalOnClass(name = "org.springframework.jdbc.datasource.init.DatabasePopulator")
@Lazy(value = false) // 禁止延迟加载
@EnableConfigurationProperties(SqlInitializationProperties.class)
public class SqlInitializationTestConfiguration {
   @Bean
   public DataSourceScriptDatabaseInitializer dataSourceScriptDatabaseInitializer(DataSource dataSource,
                                                               SqlInitializationProperties initializationProperties) {
      DatabaseInitializationSettings settings = createFrom(initializationProperties);
      return new DataSourceScriptDatabaseInitializer(dataSource, settings);
   }
   static DatabaseInitializationSettings createFrom(SqlInitializationProperties properties) {
      DatabaseInitializationSettings settings = new DatabaseInitializationSettings();
      settings.setSchemaLocations(properties.getSchemaLocations());
      settings.setDataLocations(properties.getDataLocations());
      settings.setContinueOnError(properties.isContinueOnError());
      settings.setSeparator(properties.getSeparator());
      settings.setEncoding(properties.getEncoding());
      settings.setMode(properties.getMode());
      return settings;
   }
}