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();
}