diff --git a/pom.xml b/pom.xml
index 0b9528a1c..7cfaf135c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,6 +31,7 @@
2.7.1
5.1.46
+ 1.1.16
1.3.0.Final
2.13.0
@@ -84,6 +85,11 @@
mysql-connector-java
${mysql-connector-java.version}
+
+ com.alibaba
+ druid-spring-boot-starter
+ ${druid.version}
+
org.mapstruct
diff --git a/promotion/promotion-service-impl/pom.xml b/promotion/promotion-service-impl/pom.xml
index ed8ae8e00..a9f4293b5 100644
--- a/promotion/promotion-service-impl/pom.xml
+++ b/promotion/promotion-service-impl/pom.xml
@@ -41,6 +41,10 @@
mysql
mysql-connector-java
+
+ com.alibaba
+ druid-spring-boot-starter
+
@@ -109,12 +113,10 @@
org.springframework
spring-tx
- 5.1.3.RELEASE
org.springframework
spring-jdbc
- 5.1.3.RELEASE
diff --git a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/config/DatabaseConfiguration.java b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/config/DatabaseConfiguration.java
index a98fefa88..8c682c6d0 100644
--- a/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/config/DatabaseConfiguration.java
+++ b/promotion/promotion-service-impl/src/main/java/cn/iocoder/mall/promotion/biz/config/DatabaseConfiguration.java
@@ -1,16 +1,15 @@
package cn.iocoder.mall.promotion.biz.config;
import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import io.seata.rm.datasource.DataSourceProxy;
import io.seata.spring.annotation.GlobalTransactionScanner;
import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Primary;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@@ -19,7 +18,7 @@ import javax.sql.DataSource;
@Configuration
@MapperScan("cn.iocoder.mall.promotion.biz.dao") // 扫描对应的 Mapper 接口
@EnableTransactionManagement(proxyTargetClass = true) // 启动事务管理。为什么使用 proxyTargetClass 参数,参见 https://blog.csdn.net/huang_550/article/details/76492600
-@EnableConfigurationProperties(DataSourceProperties.class)
+//@EnableConfigurationProperties(DataSourceProperties.class)
public class DatabaseConfiguration {
// 数据源,使用 HikariCP
@@ -27,41 +26,47 @@ public class DatabaseConfiguration {
@Value("${spring.application.name}")
private String applicationId;
- @Autowired
- private DataSourceProperties dataSourceProperties;
-
-// @Bean // TODO 芋艿,加了就一直报错,后面在找原因。
+// @Autowired
+// private DataSourceProperties dataSourceProperties;
+//
+//// @Bean // TODO 芋艿,加了就一直报错,后面在找原因。
// @Primary
+// public DruidDataSource druidDataSource(){
+// DruidDataSource druidDataSource = new DruidDataSource();
+// druidDataSource.setUrl(dataSourceProperties.getUrl());
+// druidDataSource.setUsername(dataSourceProperties.getUsername());
+// druidDataSource.setPassword(dataSourceProperties.getPassword());
+// druidDataSource.setDriverClassName(dataSourceProperties.getDriverClassName());
+// druidDataSource.setInitialSize(0);
+// druidDataSource.setMaxActive(180);
+// druidDataSource.setMaxWait(60000);
+// druidDataSource.setMinIdle(0);
+// druidDataSource.setValidationQuery("Select 1 from DUAL");
+// druidDataSource.setTestOnBorrow(false);
+// druidDataSource.setTestOnReturn(false);
+// druidDataSource.setTestWhileIdle(true);
+// druidDataSource.setTimeBetweenEvictionRunsMillis(60000);
+// druidDataSource.setMinEvictableIdleTimeMillis(25200000);
+// druidDataSource.setRemoveAbandoned(true);
+// druidDataSource.setRemoveAbandonedTimeout(1800);
+// druidDataSource.setLogAbandoned(true);
+// return druidDataSource;
+// }
+
+ @Bean("druidDataSource")
+ @ConfigurationProperties("spring.datasource.druid")
public DruidDataSource druidDataSource(){
- DruidDataSource druidDataSource = new DruidDataSource();
- druidDataSource.setUrl(dataSourceProperties.getUrl());
- druidDataSource.setUsername(dataSourceProperties.getUsername());
- druidDataSource.setPassword(dataSourceProperties.getPassword());
- druidDataSource.setDriverClassName(dataSourceProperties.getDriverClassName());
- druidDataSource.setInitialSize(0);
- druidDataSource.setMaxActive(180);
- druidDataSource.setMaxWait(60000);
- druidDataSource.setMinIdle(0);
- druidDataSource.setValidationQuery("Select 1 from DUAL");
- druidDataSource.setTestOnBorrow(false);
- druidDataSource.setTestOnReturn(false);
- druidDataSource.setTestWhileIdle(true);
- druidDataSource.setTimeBetweenEvictionRunsMillis(60000);
- druidDataSource.setMinEvictableIdleTimeMillis(25200000);
- druidDataSource.setRemoveAbandoned(true);
- druidDataSource.setRemoveAbandonedTimeout(1800);
- druidDataSource.setLogAbandoned(true);
- return druidDataSource;
+ return DruidDataSourceBuilder.create().build();
}
@ConfigurationProperties(prefix = "spring.datasource")
@Primary
@Bean("dataSource")
// @Bean
+ @DependsOn("druidDataSource") // 解决多数据源,循环依赖的问题。主要发生点在 DataSourceInitializerInvoker
public DataSource dataSource() {
- DruidDataSource dataSource = druidDataSource();
-
- return new DataSourceProxy(dataSource);
+ DruidDataSource druidDataSource = druidDataSource();
+ return new DataSourceProxy(druidDataSource);
}
/**
diff --git a/promotion/promotion-service-impl/src/main/resources/config/application.yaml b/promotion/promotion-service-impl/src/main/resources/config/application.yaml
index 73ba7adc2..0d7dfd6e7 100644
--- a/promotion/promotion-service-impl/src/main/resources/config/application.yaml
+++ b/promotion/promotion-service-impl/src/main/resources/config/application.yaml
@@ -1,10 +1,16 @@
spring:
# datasource
datasource:
+ type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://180.167.213.26:13306/mall_promotion?useSSL=false&useUnicode=true&characterEncoding=UTF-8
driver-class-name: com.mysql.jdbc.Driver
username: root
password: ${MALL_MYSQL_PASSWORD}
+ # TODO 芋艿, 后续优化下 druid 参数
+ druid:
+ initial-size: 5
+ max-active: 5
+ max-wait: 10000
# mybatis
#mybatis: