Kaynağa Gözat

fix:网关的mybatis-plus版本升级

李亚非 2 ay önce
ebeveyn
işleme
4346be6147

+ 5 - 0
alien-gateway/pom.xml

@@ -57,19 +57,23 @@
             <artifactId>spring-boot-starter-data-redis</artifactId>
         </dependency>
 
+        <!-- 网关升级 MyBatis Plus 版本,解决 fat jar 中 Lambda 序列化问题 -->
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.3.1</version>
         </dependency>
 
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-annotation</artifactId>
+            <version>3.5.3.1</version>
         </dependency>
 
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-extension</artifactId>
+            <version>3.5.3.1</version>
         </dependency>
 
         <dependency>
@@ -85,6 +89,7 @@
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-core</artifactId>
+            <version>3.5.3.1</version>
         </dependency>
 
         <dependency>

+ 2 - 1
alien-gateway/src/main/java/shop/alien/gateway/AlienGatewayApplication.java

@@ -1,5 +1,6 @@
 package shop.alien.gateway;
 
+import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -20,7 +21,7 @@ import shop.alien.util.encryption.JasyptAutoConfiguration;
 @ComponentScan({"shop.alien.gateway.*", "shop.alien.util.common", "shop.alien.util.encryption.properties"}) 
 @MapperScan(basePackages = {"shop.alien.gateway.mapper", "shop.alien.mapper"})
 @EnableFeignClients(basePackages = "shop.alien.gateway.feign")
-@SpringBootApplication
+@SpringBootApplication(exclude = {MybatisPlusAutoConfiguration.class})
 public class AlienGatewayApplication {
 
     public static void main(String[] args) {

+ 70 - 0
alien-gateway/src/main/java/shop/alien/gateway/config/MybatisPlusConfig.java

@@ -0,0 +1,70 @@
+package shop.alien.gateway.config;
+
+import com.baomidou.mybatisplus.autoconfigure.MybatisPlusProperties;
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.mybatis.spring.SqlSessionTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
+
+import javax.sql.DataSource;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * MyBatis Plus 自定义配置
+ * 解决 fat jar 环境下 mapper XML 重复加载问题
+ */
+@Configuration
+public class MybatisPlusConfig {
+
+    @Autowired
+    private DataSource dataSource;
+
+    @Autowired(required = false)
+    private MybatisPlusProperties properties;
+
+    @Bean
+    @Primary
+    public SqlSessionFactory sqlSessionFactory() throws Exception {
+        MybatisSqlSessionFactoryBean factory = new MybatisSqlSessionFactoryBean();
+        factory.setDataSource(dataSource);
+
+        // 配置 MyBatis
+        MybatisConfiguration configuration = new MybatisConfiguration();
+        configuration.setMapUnderscoreToCamelCase(true);
+        configuration.setCacheEnabled(false);
+        configuration.setCallSettersOnNulls(true);
+        factory.setConfiguration(configuration);
+
+        // 去重加载 mapper XML 文件(按文件名去重,解决 fat jar 中的重复加载问题)
+        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
+        Map<String, Resource> resourceMap = new LinkedHashMap<>();
+        Resource[] resources = resolver.getResources("classpath*:mapper/**/*.xml");
+        for (Resource resource : resources) {
+            String filename = resource.getFilename();
+            if (filename != null && !resourceMap.containsKey(filename)) {
+                resourceMap.put(filename, resource);
+            }
+        }
+        factory.setMapperLocations(resourceMap.values().toArray(new Resource[0]));
+
+        // 设置类型别名包
+        if (properties != null && properties.getTypeAliasesPackage() != null) {
+            factory.setTypeAliasesPackage(properties.getTypeAliasesPackage());
+        }
+
+        return factory.getObject();
+    }
+
+    @Bean
+    @Primary
+    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
+        return new SqlSessionTemplate(sqlSessionFactory);
+    }
+}

+ 1 - 1
alien-gateway/src/main/java/shop/alien/gateway/service/impl/ActivityInviteConfigServiceImpl.java

@@ -77,7 +77,7 @@ public class ActivityInviteConfigServiceImpl extends ServiceImpl<ActivityInviteC
                         Date startDate = Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
                         Date endDate = Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
                         activityInviteLogLambdaQueryWrapper.between(ActivityInviteLog::getInviteTime, startDate, endDate);
-                        int todayInviteCount = activityInviteLogMapper.selectCount(activityInviteLogLambdaQueryWrapper);
+                        long todayInviteCount = activityInviteLogMapper.selectCount(activityInviteLogLambdaQueryWrapper);
                         if (todayInviteCount > maxInviteNum) {
                             return "绑定数量已超过当天最大绑定数量";
                         }