From 39908d6b79039184e713f8a49e19a89ffb453de5 Mon Sep 17 00:00:00 2001 From: Kelvin Date: Thu, 28 Nov 2024 10:23:50 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20sqlserver=20=E9=80=82=E9=85=8D?= =?UTF-8?q?=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ktg-admin/pom.xml | 7 +- .../src/main/resources/application-druid.yml | 61 ++++--- .../com/ktg/framework/config/DruidConfig.java | 7 +- .../config/properties/DmDruidProperties.java | 77 +++++++++ .../config/properties/DruidProperties.java | 154 +++++++++--------- .../properties/SqlserverDruidProperties.java | 77 +++++++++ 6 files changed, 281 insertions(+), 102 deletions(-) create mode 100644 ktg-framework/src/main/java/com/ktg/framework/config/properties/DmDruidProperties.java create mode 100644 ktg-framework/src/main/java/com/ktg/framework/config/properties/SqlserverDruidProperties.java diff --git a/ktg-admin/pom.xml b/ktg-admin/pom.xml index 8d2da14..246b229 100644 --- a/ktg-admin/pom.xml +++ b/ktg-admin/pom.xml @@ -117,7 +117,12 @@ com.microsoft.sqlserver mssql-jdbc - 12.4.2.jre8 + 7.4.1.jre8 + + + net.sourceforge.jtds + jtds + 1.3.1 diff --git a/ktg-admin/src/main/resources/application-druid.yml b/ktg-admin/src/main/resources/application-druid.yml index b09205e..de103ae 100644 --- a/ktg-admin/src/main/resources/application-druid.yml +++ b/ktg-admin/src/main/resources/application-druid.yml @@ -11,33 +11,52 @@ spring: url: jdbc:dm://192.168.8.60:5236/WMS_DJ?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: SYSDBA password: SYSDBA + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 FROM DUAL + testWhileIdle: true + testOnBorrow: false + testOnReturn: false # 从库数据源 sqlserver: # 从数据源开关/默认关闭 enabled: true - driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver - url: jdbc:sqlserver://192.168.8.68:1433;DatabaseName=DPG_RH_YQ_20240711;encrypt=false;trustServerCertificate=true; + driverClassName: net.sourceforge.jtds.jdbc.Driver + url: jdbc:jtds:sqlserver://192.168.8.68:1433/DPG_RH_YQ_20240711 username: sa password: rh123456 - # 初始连接数 - initialSize: 5 - # 最小连接池数量 - minIdle: 10 - # 最大连接池数量 - maxActive: 20 - # 配置获取连接等待超时的时间 - maxWait: 60000 - # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 - timeBetweenEvictionRunsMillis: 60000 - # 配置一个连接在池中最小生存的时间,单位是毫秒 - minEvictableIdleTimeMillis: 300000 - # 配置一个连接在池中最大生存的时间,单位是毫秒 - maxEvictableIdleTimeMillis: 900000 - # 配置检测连接是否有效 - validationQuery: SELECT 1 FROM DUAL - testWhileIdle: true - testOnBorrow: false - testOnReturn: false + # 初始连接数 + initialSize: 5 + # 最小连接池数量 + minIdle: 10 + # 最大连接池数量 + maxActive: 20 + # 配置获取连接等待超时的时间 + maxWait: 60000 + # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 + timeBetweenEvictionRunsMillis: 60000 + # 配置一个连接在池中最小生存的时间,单位是毫秒 + minEvictableIdleTimeMillis: 300000 + # 配置一个连接在池中最大生存的时间,单位是毫秒 + maxEvictableIdleTimeMillis: 900000 + # 配置检测连接是否有效 + validationQuery: SELECT 1 + testWhileIdle: true + testOnBorrow: false + testOnReturn: false webStatFilter: enabled: true statViewServlet: diff --git a/ktg-framework/src/main/java/com/ktg/framework/config/DruidConfig.java b/ktg-framework/src/main/java/com/ktg/framework/config/DruidConfig.java index fc5705c..5205a59 100644 --- a/ktg-framework/src/main/java/com/ktg/framework/config/DruidConfig.java +++ b/ktg-framework/src/main/java/com/ktg/framework/config/DruidConfig.java @@ -10,6 +10,8 @@ import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.sql.DataSource; +import com.ktg.framework.config.properties.DmDruidProperties; +import com.ktg.framework.config.properties.SqlserverDruidProperties; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -23,7 +25,6 @@ import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatPropertie import com.alibaba.druid.util.Utils; import com.ktg.common.enums.DataSourceType; import com.ktg.common.utils.spring.SpringUtils; -import com.ktg.framework.config.properties.DruidProperties; import com.ktg.framework.datasource.DynamicDataSource; /** @@ -36,7 +37,7 @@ public class DruidConfig { @Bean @ConfigurationProperties("spring.datasource.druid.dm") - public DataSource dmDataSource(DruidProperties druidProperties) + public DataSource dmDataSource(DmDruidProperties druidProperties) { DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); return druidProperties.dataSource(dataSource); @@ -45,7 +46,7 @@ public class DruidConfig @Bean @ConfigurationProperties("spring.datasource.druid.sqlserver") @ConditionalOnProperty(prefix = "spring.datasource.druid.sqlserver", name = "enabled", havingValue = "true") - public DataSource sqlServerDataSource(DruidProperties druidProperties) + public DataSource sqlServerDataSource(SqlserverDruidProperties druidProperties) { DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); return druidProperties.dataSource(dataSource); diff --git a/ktg-framework/src/main/java/com/ktg/framework/config/properties/DmDruidProperties.java b/ktg-framework/src/main/java/com/ktg/framework/config/properties/DmDruidProperties.java new file mode 100644 index 0000000..d7ce166 --- /dev/null +++ b/ktg-framework/src/main/java/com/ktg/framework/config/properties/DmDruidProperties.java @@ -0,0 +1,77 @@ +package com.ktg.framework.config.properties; + +import com.alibaba.druid.pool.DruidDataSource; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +/** + * druid 配置属性 + * + * @author ruoyi + */ +@Configuration +public class DmDruidProperties +{ + @Value("${spring.datasource.druid.dm.initialSize}") + private int initialSize; + + @Value("${spring.datasource.druid.dm.minIdle}") + private int minIdle; + + @Value("${spring.datasource.druid.dm.maxActive}") + private int maxActive; + + @Value("${spring.datasource.druid.dm.maxWait}") + private int maxWait; + + @Value("${spring.datasource.druid.dm.timeBetweenEvictionRunsMillis}") + private int timeBetweenEvictionRunsMillis; + + @Value("${spring.datasource.druid.dm.minEvictableIdleTimeMillis}") + private int minEvictableIdleTimeMillis; + + @Value("${spring.datasource.druid.dm.maxEvictableIdleTimeMillis}") + private int maxEvictableIdleTimeMillis; + + @Value("${spring.datasource.druid.dm.validationQuery}") + private String validationQuery; + + @Value("${spring.datasource.druid.dm.testWhileIdle}") + private boolean testWhileIdle; + + @Value("${spring.datasource.druid.dm.testOnBorrow}") + private boolean testOnBorrow; + + @Value("${spring.datasource.druid.dm.testOnReturn}") + private boolean testOnReturn; + + public DruidDataSource dataSource(DruidDataSource datasource) + { + /** 配置初始化大小、最小、最大 */ + datasource.setInitialSize(initialSize); + datasource.setMaxActive(maxActive); + datasource.setMinIdle(minIdle); + + /** 配置获取连接等待超时的时间 */ + datasource.setMaxWait(maxWait); + + /** 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 */ + datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); + + /** 配置一个连接在池中最小、最大生存的时间,单位是毫秒 */ + datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); + datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis); + + /** + * 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。 + */ + datasource.setValidationQuery(validationQuery); + /** 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 */ + datasource.setTestWhileIdle(testWhileIdle); + /** 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */ + datasource.setTestOnBorrow(testOnBorrow); + /** 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */ + datasource.setTestOnReturn(testOnReturn); + return datasource; + } +} diff --git a/ktg-framework/src/main/java/com/ktg/framework/config/properties/DruidProperties.java b/ktg-framework/src/main/java/com/ktg/framework/config/properties/DruidProperties.java index 298a7e7..aa2ffb6 100644 --- a/ktg-framework/src/main/java/com/ktg/framework/config/properties/DruidProperties.java +++ b/ktg-framework/src/main/java/com/ktg/framework/config/properties/DruidProperties.java @@ -1,77 +1,77 @@ -package com.ktg.framework.config.properties; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Configuration; -import com.alibaba.druid.pool.DruidDataSource; - -/** - * druid 配置属性 - * - * @author ruoyi - */ -@Configuration -public class DruidProperties -{ - @Value("${spring.datasource.druid.initialSize}") - private int initialSize; - - @Value("${spring.datasource.druid.minIdle}") - private int minIdle; - - @Value("${spring.datasource.druid.maxActive}") - private int maxActive; - - @Value("${spring.datasource.druid.maxWait}") - private int maxWait; - - @Value("${spring.datasource.druid.timeBetweenEvictionRunsMillis}") - private int timeBetweenEvictionRunsMillis; - - @Value("${spring.datasource.druid.minEvictableIdleTimeMillis}") - private int minEvictableIdleTimeMillis; - - @Value("${spring.datasource.druid.maxEvictableIdleTimeMillis}") - private int maxEvictableIdleTimeMillis; - - @Value("${spring.datasource.druid.validationQuery}") - private String validationQuery; - - @Value("${spring.datasource.druid.testWhileIdle}") - private boolean testWhileIdle; - - @Value("${spring.datasource.druid.testOnBorrow}") - private boolean testOnBorrow; - - @Value("${spring.datasource.druid.testOnReturn}") - private boolean testOnReturn; - - public DruidDataSource dataSource(DruidDataSource datasource) - { - /** 配置初始化大小、最小、最大 */ - datasource.setInitialSize(initialSize); - datasource.setMaxActive(maxActive); - datasource.setMinIdle(minIdle); - - /** 配置获取连接等待超时的时间 */ - datasource.setMaxWait(maxWait); - - /** 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 */ - datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); - - /** 配置一个连接在池中最小、最大生存的时间,单位是毫秒 */ - datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); - datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis); - - /** - * 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。 - */ - datasource.setValidationQuery(validationQuery); - /** 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 */ - datasource.setTestWhileIdle(testWhileIdle); - /** 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */ - datasource.setTestOnBorrow(testOnBorrow); - /** 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */ - datasource.setTestOnReturn(testOnReturn); - return datasource; - } -} +//package com.ktg.framework.config.properties; +// +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.context.annotation.Configuration; +//import com.alibaba.druid.pool.DruidDataSource; +// +///** +// * druid 配置属性 +// * +// * @author ruoyi +// */ +//@Configuration +//public class DruidProperties +//{ +// @Value("${spring.datasource.druid.initialSize}") +// private int initialSize; +// +// @Value("${spring.datasource.druid.minIdle}") +// private int minIdle; +// +// @Value("${spring.datasource.druid.maxActive}") +// private int maxActive; +// +// @Value("${spring.datasource.druid.maxWait}") +// private int maxWait; +// +// @Value("${spring.datasource.druid.timeBetweenEvictionRunsMillis}") +// private int timeBetweenEvictionRunsMillis; +// +// @Value("${spring.datasource.druid.minEvictableIdleTimeMillis}") +// private int minEvictableIdleTimeMillis; +// +// @Value("${spring.datasource.druid.maxEvictableIdleTimeMillis}") +// private int maxEvictableIdleTimeMillis; +// +// @Value("${spring.datasource.druid.validationQuery}") +// private String validationQuery; +// +// @Value("${spring.datasource.druid.testWhileIdle}") +// private boolean testWhileIdle; +// +// @Value("${spring.datasource.druid.testOnBorrow}") +// private boolean testOnBorrow; +// +// @Value("${spring.datasource.druid.testOnReturn}") +// private boolean testOnReturn; +// +// public DruidDataSource dataSource(DruidDataSource datasource) +// { +// /** 配置初始化大小、最小、最大 */ +// datasource.setInitialSize(initialSize); +// datasource.setMaxActive(maxActive); +// datasource.setMinIdle(minIdle); +// +// /** 配置获取连接等待超时的时间 */ +// datasource.setMaxWait(maxWait); +// +// /** 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 */ +// datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); +// +// /** 配置一个连接在池中最小、最大生存的时间,单位是毫秒 */ +// datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); +// datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis); +// +// /** +// * 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。 +// */ +// datasource.setValidationQuery(validationQuery); +// /** 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 */ +// datasource.setTestWhileIdle(testWhileIdle); +// /** 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */ +// datasource.setTestOnBorrow(testOnBorrow); +// /** 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */ +// datasource.setTestOnReturn(testOnReturn); +// return datasource; +// } +//} diff --git a/ktg-framework/src/main/java/com/ktg/framework/config/properties/SqlserverDruidProperties.java b/ktg-framework/src/main/java/com/ktg/framework/config/properties/SqlserverDruidProperties.java new file mode 100644 index 0000000..b848de3 --- /dev/null +++ b/ktg-framework/src/main/java/com/ktg/framework/config/properties/SqlserverDruidProperties.java @@ -0,0 +1,77 @@ +package com.ktg.framework.config.properties; + +import com.alibaba.druid.pool.DruidDataSource; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +/** + * druid 配置属性 + * + * @author ruoyi + */ +@Configuration +public class SqlserverDruidProperties +{ + @Value("${spring.datasource.druid.sqlserver.initialSize}") + private int initialSize; + + @Value("${spring.datasource.druid.sqlserver.minIdle}") + private int minIdle; + + @Value("${spring.datasource.druid.sqlserver.maxActive}") + private int maxActive; + + @Value("${spring.datasource.druid.sqlserver.maxWait}") + private int maxWait; + + @Value("${spring.datasource.druid.sqlserver.timeBetweenEvictionRunsMillis}") + private int timeBetweenEvictionRunsMillis; + + @Value("${spring.datasource.druid.sqlserver.minEvictableIdleTimeMillis}") + private int minEvictableIdleTimeMillis; + + @Value("${spring.datasource.druid.sqlserver.maxEvictableIdleTimeMillis}") + private int maxEvictableIdleTimeMillis; + + @Value("${spring.datasource.druid.sqlserver.validationQuery}") + private String validationQuery; + + @Value("${spring.datasource.druid.sqlserver.testWhileIdle}") + private boolean testWhileIdle; + + @Value("${spring.datasource.druid.sqlserver.testOnBorrow}") + private boolean testOnBorrow; + + @Value("${spring.datasource.druid.sqlserver.testOnReturn}") + private boolean testOnReturn; + + public DruidDataSource dataSource(DruidDataSource datasource) + { + /** 配置初始化大小、最小、最大 */ + datasource.setInitialSize(initialSize); + datasource.setMaxActive(maxActive); + datasource.setMinIdle(minIdle); + + /** 配置获取连接等待超时的时间 */ + datasource.setMaxWait(maxWait); + + /** 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 */ + datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); + + /** 配置一个连接在池中最小、最大生存的时间,单位是毫秒 */ + datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); + datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis); + + /** + * 用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。 + */ + datasource.setValidationQuery(validationQuery); + /** 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。 */ + datasource.setTestWhileIdle(testWhileIdle); + /** 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */ + datasource.setTestOnBorrow(testOnBorrow); + /** 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 */ + datasource.setTestOnReturn(testOnReturn); + return datasource; + } +}