From 95af9e09ea85eefe2af1c4ca8476a8aba24f6d51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johnny=20Miller=20=28=E9=94=BA=E4=BF=8A=29?= Date: Thu, 26 Aug 2021 19:02:41 +0800 Subject: [PATCH] perf($MyBatisPlus): update MyBatis-Plus version to 3.4.3.2 dynamic-datasource-spring-boot-starter 3.4.1 hutool-all 5.7.9 BREAKING CHANGE: unregister bean after processing Druid connection pool size --- pom.xml | 6 ++-- .../database/DataSourceConfiguration.java | 5 ++-- .../DruidDataSourceCreatorPostProcessor.java | 28 +++++++++++++++---- .../database/MyBatisPlusConfiguration.java | 2 +- 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/pom.xml b/pom.xml index 03065fa9..135d94f1 100644 --- a/pom.xml +++ b/pom.xml @@ -43,9 +43,9 @@ 2.4.3 2.4.3 1.2.6 - 3.4.3.1 - 3.4.0 - 5.7.7 + 3.4.3.2 + 3.4.1 + 5.7.9 30.1.1-jre 2.0.9 0.11.2 diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/database/DataSourceConfiguration.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/database/DataSourceConfiguration.java index 6e01a1a5..5855d0cf 100644 --- a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/database/DataSourceConfiguration.java +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/database/DataSourceConfiguration.java @@ -14,6 +14,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.quartz.QuartzDataSource; import org.springframework.boot.autoconfigure.quartz.QuartzTransactionManager; +import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; import org.springframework.jdbc.datasource.DataSourceTransactionManager; @@ -30,9 +31,9 @@ @ConditionalOnClass({MybatisPlusAutoConfiguration.class}) public class DataSourceConfiguration { @Bean - public DruidDataSourceCreatorPostProcessor druidDataSourceCreatorPostProcessor() { + public DruidDataSourceCreatorPostProcessor druidDataSourceCreatorPostProcessor(ApplicationContext applicationContext, DynamicDataSourceProperties dynamicDataSourceProperties) { log.warn("Initial bean: '{}'", DruidDataSourceCreatorPostProcessor.class.getSimpleName()); - return new DruidDataSourceCreatorPostProcessor(); + return new DruidDataSourceCreatorPostProcessor(applicationContext, dynamicDataSourceProperties); } /** diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/database/DruidDataSourceCreatorPostProcessor.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/database/DruidDataSourceCreatorPostProcessor.java index 44d8b243..db3cb614 100644 --- a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/database/DruidDataSourceCreatorPostProcessor.java +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/database/DruidDataSourceCreatorPostProcessor.java @@ -1,10 +1,15 @@ package com.jmsoftware.maf.springcloudstarter.database; import com.baomidou.dynamic.datasource.creator.DruidDataSourceCreator; +import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import lombok.val; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.beans.factory.support.DefaultListableBeanFactory; +import org.springframework.context.ApplicationContext; import org.springframework.lang.NonNull; import org.springframework.lang.Nullable; @@ -14,12 +19,16 @@ * @author Johnny Miller (锺俊), email: johnnysviva@outlook.com, date: 8/25/2021 11:27 AM **/ @Slf4j -public class DruidDataSourceCreatorPostProcessor implements BeanPostProcessor { +@RequiredArgsConstructor +public class DruidDataSourceCreatorPostProcessor implements BeanPostProcessor, DisposableBean { + private final ApplicationContext applicationContext; + private final DynamicDataSourceProperties dynamicDataSourceProperties; + @Nullable @Override - public Object postProcessAfterInitialization(@NonNull Object bean, @NonNull String beanName) throws BeansException { + public Object postProcessBeforeInitialization(@NonNull Object bean, @NonNull String beanName) throws BeansException { if (bean instanceof DruidDataSourceCreator) { - this.postProcessDynamicDataSourceProperties((DruidDataSourceCreator) bean); + this.enhanceConnectionPoolSize(); } return bean; } @@ -44,22 +53,29 @@ public Object postProcessAfterInitialization(@NonNull Object bean, @NonNull Stri * connections you enable in your connection pool. That way there are always a few slots available for direct * connections for system maintenance and monitoring.

* - * @param bean the bean * @see * How to Find the Optimal Database Connection Pool Size * @see * Sizing the Connection Pool */ - private void postProcessDynamicDataSourceProperties(DruidDataSourceCreator bean) { + private void enhanceConnectionPoolSize() { val cpuCoreCount = Runtime.getRuntime().availableProcessors(); val minConnectionPoolSize = cpuCoreCount * 2 + 1; val maxConnectionPoolSize = cpuCoreCount * 3; - bean.getGConfig() + this.dynamicDataSourceProperties.getDruid() .setInitialSize(minConnectionPoolSize) .setMinIdle(minConnectionPoolSize) .setMaxActive(maxConnectionPoolSize); log.warn("Druid connection pool enhanced by current cpuCoreCount: {}, initial size: {}, min idle: {}" + ", max active: {}", cpuCoreCount, minConnectionPoolSize, minConnectionPoolSize, maxConnectionPoolSize); + val defaultListableBeanFactory = + (DefaultListableBeanFactory) this.applicationContext.getAutowireCapableBeanFactory(); + defaultListableBeanFactory.destroyBean(this); + } + + @Override + public void destroy() { + log.warn("Destroyed bean {}", this.getClass().getSimpleName()); } } diff --git a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/database/MyBatisPlusConfiguration.java b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/database/MyBatisPlusConfiguration.java index 2bef11fc..dca0e939 100644 --- a/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/database/MyBatisPlusConfiguration.java +++ b/spring-cloud-starter/src/main/java/com/jmsoftware/maf/springcloudstarter/database/MyBatisPlusConfiguration.java @@ -70,7 +70,7 @@ public Interceptor masterSlaveAutoRoutingPlugin() { } @Bean - public CommonMetaObjectHandler myBatisPlusConfiguration() { + public CommonMetaObjectHandler commonMetaObjectHandler() { log.warn("Initial bean: '{}'", CommonMetaObjectHandler.class.getSimpleName()); return new CommonMetaObjectHandler(); }