소스 검색

调整DDL自动注入.

1.当不使用mybatis-plus-extension依赖时不注入
2.当没有注入IDdl对象时,不注入DdlApplicationRunner
nieqiurong 11 달 전
부모
커밋
694bc4d223

+ 2 - 3
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/DdlHelper.java

@@ -16,7 +16,6 @@
 package com.baomidou.mybatisplus.extension.ddl;
 
 import com.baomidou.mybatisplus.annotation.DbType;
-import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.extension.ddl.history.IDdlGenerator;
 import com.baomidou.mybatisplus.extension.ddl.history.MysqlDdlGenerator;
@@ -32,7 +31,7 @@ import org.springframework.core.io.ClassPathResource;
 
 import javax.sql.DataSource;
 import java.io.*;
-import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.sql.Connection;
 import java.sql.SQLException;
 import java.time.LocalDateTime;
@@ -136,7 +135,7 @@ public class DdlHelper {
 
     public static ScriptRunner getScriptRunner(Connection connection, boolean autoCommit) {
         ScriptRunner scriptRunner = new ScriptRunner(connection);
-        Resources.setCharset(Charset.forName(StringPool.UTF_8));
+        Resources.setCharset(StandardCharsets.UTF_8);
         scriptRunner.setAutoCommit(autoCommit);
         scriptRunner.setEscapeProcessing(false);
         scriptRunner.setRemoveCRs(true);

+ 5 - 9
spring-boot-starter/mybatis-plus-spring-boot-autoconfigure/src/main/java/com/baomidou/mybatisplus/autoconfigure/DdlApplicationRunner.java

@@ -15,7 +15,7 @@
  */
 package com.baomidou.mybatisplus.autoconfigure;
 
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.ddl.DdlHelper;
 import com.baomidou.mybatisplus.extension.ddl.IDdl;
 import lombok.extern.slf4j.Slf4j;
@@ -41,16 +41,12 @@ public class DdlApplicationRunner implements ApplicationRunner {
 
     @Override
     public void run(ApplicationArguments args) throws Exception {
-        log.debug("  ...  DDL start create  ...  ");
-        if (ObjectUtils.isNotEmpty(ddlList)) {
-            /**
-             * 执行 SQL 脚本
-             * <p>多数据源情况可按需初始化</p>
-             */
+        if (CollectionUtils.isNotEmpty(ddlList)) {
+            log.debug("  ...  DDL start create  ...  ");
             ddlList.forEach(ddl -> ddl.runScript(dataSource -> DdlHelper.runScript(ddl.getDdlGenerator(),
-                    dataSource, ddl.getSqlFiles(), true)));
+                dataSource, ddl.getSqlFiles(), true)));
+            log.debug("  ...  DDL end create  ...  ");
         }
-        log.debug("  ...  DDL end create  ...  ");
     }
 
 }

+ 44 - 0
spring-boot-starter/mybatis-plus-spring-boot-autoconfigure/src/main/java/com/baomidou/mybatisplus/autoconfigure/DdlAutoConfiguration.java

@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2011-2024, baomidou (jobob@qq.com).
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.baomidou.mybatisplus.autoconfigure;
+
+import com.baomidou.mybatisplus.extension.ddl.IDdl;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+
+import java.util.List;
+
+/**
+ * @author nieqiurong
+ * @since 3.5.7
+ */
+@ConditionalOnClass(IDdl.class)
+@Configuration(proxyBeanMethods = false)
+public class DdlAutoConfiguration {
+
+    @Bean
+    @Order
+    @ConditionalOnBean({IDdl.class})
+    @ConditionalOnMissingBean({DdlApplicationRunner.class})
+    public DdlApplicationRunner ddlApplicationRunner(List<IDdl> ddlList) {
+        return new DdlApplicationRunner(ddlList);
+    }
+
+}

+ 0 - 9
spring-boot-starter/mybatis-plus-spring-boot-autoconfigure/src/main/java/com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.java

@@ -24,7 +24,6 @@ import com.baomidou.mybatisplus.core.handlers.PostInitTableInfoHandler;
 import com.baomidou.mybatisplus.core.incrementer.IKeyGenerator;
 import com.baomidou.mybatisplus.core.incrementer.IdentifierGenerator;
 import com.baomidou.mybatisplus.core.injector.ISqlInjector;
-import com.baomidou.mybatisplus.extension.ddl.IDdl;
 import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.mapping.DatabaseIdProvider;
@@ -47,7 +46,6 @@ import org.springframework.beans.factory.BeanFactoryAware;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.ListableBeanFactory;
 import org.springframework.beans.factory.ObjectProvider;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.config.BeanDefinition;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.support.BeanDefinitionRegistry;
@@ -65,7 +63,6 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
-import org.springframework.core.annotation.Order;
 import org.springframework.core.env.Environment;
 import org.springframework.core.io.Resource;
 import org.springframework.core.io.ResourceLoader;
@@ -386,10 +383,4 @@ public class MybatisPlusAutoConfiguration implements InitializingBean {
         }
     }
 
-    @Order
-    @Bean
-    @ConditionalOnMissingBean
-    public DdlApplicationRunner ddlApplicationRunner(@Autowired(required = false) List<IDdl> ddlList) {
-        return new DdlApplicationRunner(ddlList);
-    }
 }

+ 2 - 1
spring-boot-starter/mybatis-plus-spring-boot-autoconfigure/src/main/resources/META-INF/spring.factories

@@ -5,7 +5,8 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
   com.baomidou.mybatisplus.autoconfigure.MybatisPlusInnerInterceptorAutoConfiguration,\
   com.baomidou.mybatisplus.autoconfigure.IdentifierGeneratorAutoConfiguration,\
   com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration,\
-  com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration
+  com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration,\
+  com.baomidou.mybatisplus.autoconfigure.DdlAutoConfiguration
 # Depends On Database Initialization Detectors
 org.springframework.boot.sql.init.dependency.DependsOnDatabaseInitializationDetector=\
 com.baomidou.mybatisplus.autoconfigure.MybatisDependsOnDatabaseInitializationDetector

+ 1 - 0
spring-boot-starter/mybatis-plus-spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -2,3 +2,4 @@ com.baomidou.mybatisplus.autoconfigure.MybatisPlusInnerInterceptorAutoConfigurat
 com.baomidou.mybatisplus.autoconfigure.IdentifierGeneratorAutoConfiguration
 com.baomidou.mybatisplus.autoconfigure.MybatisPlusLanguageDriverAutoConfiguration
 com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration
+com.baomidou.mybatisplus.autoconfigure.DdlAutoConfiguration