diff --git a/docker/build/conf/dolphinscheduler/quartz.properties.tpl b/docker/build/conf/dolphinscheduler/quartz.properties.tpl index 10f18122bf..45c61a653f 100644 --- a/docker/build/conf/dolphinscheduler/quartz.properties.tpl +++ b/docker/build/conf/dolphinscheduler/quartz.properties.tpl @@ -51,4 +51,4 @@ #============================================================================ # Configure Datasources #============================================================================ -#org.quartz.dataSource.myDs.connectionProvider.class = org.apache.dolphinscheduler.service.quartz.DruidConnectionProvider +#org.quartz.dataSource.myDs.connectionProvider.class = org.apache.dolphinscheduler.service.quartz.HikariConnectionProvider diff --git a/dolphinscheduler-api/src/main/resources/application.properties b/dolphinscheduler-api/src/main/resources/application-api.properties similarity index 100% rename from dolphinscheduler-api/src/main/resources/application.properties rename to dolphinscheduler-api/src/main/resources/application-api.properties diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java index a4742739a2..b34fed50cb 100644 --- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java +++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java @@ -467,39 +467,37 @@ public final class Constants { public static final String SPRING_DATASOURCE_PASSWORD = "spring.datasource.password"; - public static final String SPRING_DATASOURCE_VALIDATION_QUERY_TIMEOUT = "spring.datasource.validationQueryTimeout"; - - public static final String SPRING_DATASOURCE_INITIAL_SIZE = "spring.datasource.initialSize"; + public static final String SPRING_DATASOURCE_CONNECTION_TIMEOUT = "spring.datasource.connectionTimeout"; public static final String SPRING_DATASOURCE_MIN_IDLE = "spring.datasource.minIdle"; public static final String SPRING_DATASOURCE_MAX_ACTIVE = "spring.datasource.maxActive"; - public static final String SPRING_DATASOURCE_MAX_WAIT = "spring.datasource.maxWait"; - - public static final String SPRING_DATASOURCE_TIME_BETWEEN_EVICTION_RUNS_MILLIS = "spring.datasource.timeBetweenEvictionRunsMillis"; + public static final String SPRING_DATASOURCE_IDLE_TIMEOUT = "spring.datasource.idleTimeout"; - public static final String SPRING_DATASOURCE_TIME_BETWEEN_CONNECT_ERROR_MILLIS = "spring.datasource.timeBetweenConnectErrorMillis"; + public static final String SPRING_DATASOURCE_MAX_LIFE_TIME = "spring.datasource.maxLifetime"; - public static final String SPRING_DATASOURCE_MIN_EVICTABLE_IDLE_TIME_MILLIS = "spring.datasource.minEvictableIdleTimeMillis"; + public static final String SPRING_DATASOURCE_VALIDATION_TIMEOUT = "spring.datasource.validationTimeout"; public static final String SPRING_DATASOURCE_VALIDATION_QUERY = "spring.datasource.validationQuery"; - public static final String SPRING_DATASOURCE_TEST_WHILE_IDLE = "spring.datasource.testWhileIdle"; + public static final String SPRING_DATASOURCE_LEAK_DETECTION_THRESHOLD = "spring.datasource.leakDetectionThreshold"; + + public static final String SPRING_DATASOURCE_INITIALIZATION_FAIL_TIMEOUT = "spring.datasource.initializationFailTimeout"; - public static final String SPRING_DATASOURCE_TEST_ON_BORROW = "spring.datasource.testOnBorrow"; + public static final String SPRING_DATASOURCE_IS_AUTOCOMMIT = "spring.datasource.isAutoCommit"; - public static final String SPRING_DATASOURCE_TEST_ON_RETURN = "spring.datasource.testOnReturn"; + public static final String SPRING_DATASOURCE_CACHE_PREP_STMTS = "spring.datasource.cachePrepStmts"; - public static final String SPRING_DATASOURCE_POOL_PREPARED_STATEMENTS = "spring.datasource.poolPreparedStatements"; + public static final String SPRING_DATASOURCE_PREP_STMT_CACHE_SIZE = "spring.datasource.prepStmtCacheSize"; - public static final String SPRING_DATASOURCE_DEFAULT_AUTO_COMMIT = "spring.datasource.defaultAutoCommit"; + public static final String SPRING_DATASOURCE_PREP_STMT_CACHE_SQL_LIMIT = "spring.datasource.prepStmtCacheSqlLimit"; - public static final String SPRING_DATASOURCE_KEEP_ALIVE = "spring.datasource.keepAlive"; + public static final String CACHE_PREP_STMTS = "cachePrepStmts"; - public static final String SPRING_DATASOURCE_MAX_POOL_PREPARED_STATEMENT_PER_CONNECTION_SIZE = "spring.datasource.maxPoolPreparedStatementPerConnectionSize"; + public static final String PREP_STMT_CACHE_SIZE = "prepStmtCacheSize"; - public static final String DEVELOPMENT = "development"; + public static final String PREP_STMT_CACHE_SQL_LIMIT = "prepStmtCacheSqlLimit"; public static final String QUARTZ_PROPERTIES_PATH = "quartz.properties"; diff --git a/dolphinscheduler-dao/pom.xml b/dolphinscheduler-dao/pom.xml index 21939f3243..0228bb8a4a 100644 --- a/dolphinscheduler-dao/pom.xml +++ b/dolphinscheduler-dao/pom.xml @@ -106,10 +106,6 @@ com.h2database h2 - - com.alibaba - druid - ch.qos.logback diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/MonitorDBDao.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/MonitorDBDao.java index 69ffdedd60..21945ba52d 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/MonitorDBDao.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/MonitorDBDao.java @@ -31,7 +31,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.alibaba.druid.pool.DruidDataSource; +import com.zaxxer.hikari.HikariDataSource; /** @@ -45,7 +45,7 @@ public class MonitorDBDao { public static final String VARIABLE_NAME = "variable_name"; @Autowired - private DruidDataSource dataSource; + private HikariDataSource dataSource; /** * get current db performance diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/ConnectionFactory.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/ConnectionFactory.java index f6f910020f..f573c7f427 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/ConnectionFactory.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/ConnectionFactory.java @@ -82,7 +82,7 @@ public class ConnectionFactory extends SpringConnectionFactory { /** * get the data source * - * @return druid dataSource + * @return dataSource */ private DataSource buildDataSource() throws SQLException { diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/SpringConnectionFactory.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/SpringConnectionFactory.java index ae238cabd2..31fb36ff67 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/SpringConnectionFactory.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/datasource/SpringConnectionFactory.java @@ -56,13 +56,13 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; -import com.alibaba.druid.pool.DruidDataSource; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.core.MybatisConfiguration; import com.baomidou.mybatisplus.core.config.GlobalConfig; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import com.google.common.collect.Lists; +import com.zaxxer.hikari.HikariDataSource; /** * data source connection factory @@ -106,7 +106,7 @@ public class SpringConnectionFactory { /** * get the data source * - * @return druid dataSource + * @return dataSource */ @Bean(destroyMethod = "", name = "datasource") public DataSource dataSource() throws SQLException { @@ -115,34 +115,31 @@ public class SpringConnectionFactory { initializeH2Datasource(); } - DruidDataSource druidDataSource = new DruidDataSource(); - - druidDataSource.setDriverClassName(driverClassName); - druidDataSource.setUrl(PropertyUtils.getString(Constants.SPRING_DATASOURCE_URL)); - druidDataSource.setUsername(PropertyUtils.getString(Constants.SPRING_DATASOURCE_USERNAME)); - druidDataSource.setPassword(PropertyUtils.getString(Constants.SPRING_DATASOURCE_PASSWORD)); - druidDataSource.setValidationQuery(PropertyUtils.getString(Constants.SPRING_DATASOURCE_VALIDATION_QUERY, "SELECT 1")); - - druidDataSource.setPoolPreparedStatements(PropertyUtils.getBoolean(Constants.SPRING_DATASOURCE_POOL_PREPARED_STATEMENTS, true)); - druidDataSource.setTestWhileIdle(PropertyUtils.getBoolean(Constants.SPRING_DATASOURCE_TEST_WHILE_IDLE, true)); - druidDataSource.setTestOnBorrow(PropertyUtils.getBoolean(Constants.SPRING_DATASOURCE_TEST_ON_BORROW, true)); - druidDataSource.setTestOnReturn(PropertyUtils.getBoolean(Constants.SPRING_DATASOURCE_TEST_ON_RETURN, false)); - druidDataSource.setKeepAlive(PropertyUtils.getBoolean(Constants.SPRING_DATASOURCE_KEEP_ALIVE, true)); - - druidDataSource.setMinIdle(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MIN_IDLE, 5)); - druidDataSource.setMaxActive(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MAX_ACTIVE, 50)); - druidDataSource.setMaxWait(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MAX_WAIT, 60000)); - druidDataSource.setMaxPoolPreparedStatementPerConnectionSize(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MAX_POOL_PREPARED_STATEMENT_PER_CONNECTION_SIZE, 20)); - druidDataSource.setInitialSize(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_INITIAL_SIZE, 5)); - druidDataSource.setTimeBetweenEvictionRunsMillis(PropertyUtils.getLong(Constants.SPRING_DATASOURCE_TIME_BETWEEN_EVICTION_RUNS_MILLIS, 60000)); - druidDataSource.setTimeBetweenConnectErrorMillis(PropertyUtils.getLong(Constants.SPRING_DATASOURCE_TIME_BETWEEN_CONNECT_ERROR_MILLIS, 60000)); - druidDataSource.setMinEvictableIdleTimeMillis(PropertyUtils.getLong(Constants.SPRING_DATASOURCE_MIN_EVICTABLE_IDLE_TIME_MILLIS, 300000)); - druidDataSource.setValidationQueryTimeout(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_VALIDATION_QUERY_TIMEOUT, 3)); - //auto commit - druidDataSource.setDefaultAutoCommit(PropertyUtils.getBoolean(Constants.SPRING_DATASOURCE_DEFAULT_AUTO_COMMIT, true)); - druidDataSource.init(); - logger.info("Initialize Druid DataSource success"); - return druidDataSource; + HikariDataSource dataSource = new HikariDataSource(); + + dataSource.setDriverClassName(driverClassName); + dataSource.setJdbcUrl(PropertyUtils.getString(Constants.SPRING_DATASOURCE_URL)); + dataSource.setUsername(PropertyUtils.getString(Constants.SPRING_DATASOURCE_USERNAME)); + dataSource.setPassword(PropertyUtils.getString(Constants.SPRING_DATASOURCE_PASSWORD)); + dataSource.setConnectionTestQuery(PropertyUtils.getString(Constants.SPRING_DATASOURCE_VALIDATION_QUERY, "SELECT 1")); + + dataSource.setMinimumIdle(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MIN_IDLE, 5)); + dataSource.setMaximumPoolSize(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MAX_ACTIVE, 50)); + dataSource.setConnectionTimeout(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_CONNECTION_TIMEOUT, 30000)); + dataSource.setIdleTimeout(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_IDLE_TIMEOUT, 600000)); + dataSource.setMaxLifetime(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MAX_LIFE_TIME, 1800000)); + dataSource.setValidationTimeout(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_VALIDATION_TIMEOUT, 5000)); + dataSource.setLeakDetectionThreshold(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_LEAK_DETECTION_THRESHOLD, 0)); + dataSource.setInitializationFailTimeout(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_INITIALIZATION_FAIL_TIMEOUT, 1)); + + dataSource.setAutoCommit(PropertyUtils.getBoolean(Constants.SPRING_DATASOURCE_IS_AUTOCOMMIT, true)); + + dataSource.addDataSourceProperty(Constants.CACHE_PREP_STMTS, PropertyUtils.getBoolean(Constants.SPRING_DATASOURCE_CACHE_PREP_STMTS, true)); + dataSource.addDataSourceProperty(Constants.PREP_STMT_CACHE_SIZE, PropertyUtils.getInt(Constants.SPRING_DATASOURCE_PREP_STMT_CACHE_SIZE, 250)); + dataSource.addDataSourceProperty(Constants.PREP_STMT_CACHE_SQL_LIMIT, PropertyUtils.getInt(Constants.SPRING_DATASOURCE_PREP_STMT_CACHE_SQL_LIMIT, 2048)); + + logger.info("Initialize DataSource DataSource success"); + return dataSource; } private void initializeH2Datasource() { diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/UpgradeDao.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/UpgradeDao.java index d232cf9826..2a064c68df 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/UpgradeDao.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/upgrade/UpgradeDao.java @@ -81,7 +81,7 @@ public abstract class UpgradeDao { /** * get datasource - * @return DruidDataSource + * @return DataSource */ public static DataSource getDataSource(){ return ConnectionFactory.getInstance().getDataSource(); diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/pom.xml b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/pom.xml index 50878f0e00..35ddb8912a 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/pom.xml +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/pom.xml @@ -69,11 +69,6 @@ provided - - com.alibaba - druid - - org.springframework spring-jdbc @@ -161,5 +156,10 @@ + + + com.zaxxer + HikariCP + diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/client/CommonDataSourceClient.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/client/CommonDataSourceClient.java index ecf51908a1..ca7adfdb76 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/client/CommonDataSourceClient.java +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/client/CommonDataSourceClient.java @@ -30,8 +30,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.JdbcTemplate; -import com.alibaba.druid.pool.DruidDataSource; import com.google.common.base.Stopwatch; +import com.zaxxer.hikari.HikariDataSource; public class CommonDataSourceClient implements DataSourceClient { @@ -42,7 +42,7 @@ public class CommonDataSourceClient implements DataSourceClient { public static final String COMMON_VALIDATION_QUERY = "select 1"; protected final BaseConnectionParam baseConnectionParam; - protected DruidDataSource druidDataSource; + protected HikariDataSource dataSource; protected JdbcTemplate jdbcTemplate; public CommonDataSourceClient(BaseConnectionParam baseConnectionParam) { @@ -63,8 +63,8 @@ public class CommonDataSourceClient implements DataSourceClient { } protected void initClient(BaseConnectionParam baseConnectionParam) { - this.druidDataSource = JdbcDataSourceProvider.createJdbcDataSource(baseConnectionParam); - this.jdbcTemplate = new JdbcTemplate(druidDataSource); + this.dataSource = JdbcDataSourceProvider.createJdbcDataSource(baseConnectionParam); + this.jdbcTemplate = new JdbcTemplate(dataSource); } protected void checkUser(BaseConnectionParam baseConnectionParam) { @@ -110,9 +110,9 @@ public class CommonDataSourceClient implements DataSourceClient { @Override public Connection getConnection() { try { - return this.druidDataSource.getConnection(); + return this.dataSource.getConnection(); } catch (SQLException e) { - logger.error("get druidDataSource Connection fail SQLException: {}", e.getMessage(), e); + logger.error("get DataSource Connection fail SQLException: {}", e.getMessage(), e); return null; } } @@ -120,8 +120,8 @@ public class CommonDataSourceClient implements DataSourceClient { @Override public void close() { logger.info("do close dataSource."); - this.druidDataSource.close(); - this.druidDataSource = null; + this.dataSource.close(); + this.dataSource = null; this.jdbcTemplate = null; } diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/provider/JdbcDataSourceProvider.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/provider/JdbcDataSourceProvider.java index d84db4478e..b4a37fecfc 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/provider/JdbcDataSourceProvider.java +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/main/java/org/apache/dolphinscheduler/plugin/datasource/api/provider/JdbcDataSourceProvider.java @@ -25,7 +25,7 @@ import org.apache.dolphinscheduler.spi.utils.PropertyUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.alibaba.druid.pool.DruidDataSource; +import com.zaxxer.hikari.HikariDataSource; /** * Jdbc Data Source Provider @@ -34,51 +34,50 @@ public class JdbcDataSourceProvider { private static final Logger logger = LoggerFactory.getLogger(JdbcDataSourceProvider.class); - public static DruidDataSource createJdbcDataSource(BaseConnectionParam properties) { - logger.info("Creating DruidDataSource pool for maxActive:{}", PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MAX_ACTIVE, 50)); + public static HikariDataSource createJdbcDataSource(BaseConnectionParam properties) { + logger.info("Creating HikariDataSource pool for maxActive:{}", PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MAX_ACTIVE, 50)); + HikariDataSource dataSource = new HikariDataSource(); - DruidDataSource druidDataSource = new DruidDataSource(); + dataSource.setDriverClassName(properties.getDriverClassName()); + dataSource.setJdbcUrl(properties.getJdbcUrl()); + dataSource.setUsername(properties.getUser()); + dataSource.setPassword(PasswordUtils.decodePassword(properties.getPassword())); - druidDataSource.setDriverClassName(properties.getDriverClassName()); - druidDataSource.setUrl(properties.getJdbcUrl()); - druidDataSource.setUsername(properties.getUser()); - druidDataSource.setPassword(PasswordUtils.decodePassword(properties.getPassword())); - - druidDataSource.setMinIdle(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MIN_IDLE, 5)); - druidDataSource.setMaxActive(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MAX_ACTIVE, 50)); - druidDataSource.setTestOnBorrow(PropertyUtils.getBoolean(Constants.SPRING_DATASOURCE_TEST_ON_BORROW, false)); + dataSource.setMinimumIdle(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MIN_IDLE, 5)); + dataSource.setMaximumPoolSize(PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MAX_ACTIVE, 50)); + dataSource.setConnectionTestQuery(properties.getValidationQuery()); if (properties.getProps() != null) { - properties.getProps().forEach(druidDataSource::addConnectionProperty); + properties.getProps().forEach(dataSource::addDataSourceProperty); } - logger.info("Creating DruidDataSource pool success."); - return druidDataSource; + logger.info("Creating HikariDataSource pool success."); + return dataSource; } /** * @return One Session Jdbc DataSource */ - public static DruidDataSource createOneSessionJdbcDataSource(BaseConnectionParam properties) { - logger.info("Creating OneSession DruidDataSource pool for maxActive:{}", PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MAX_ACTIVE, 50)); + public static HikariDataSource createOneSessionJdbcDataSource(BaseConnectionParam properties) { + logger.info("Creating OneSession HikariDataSource pool for maxActive:{}", PropertyUtils.getInt(Constants.SPRING_DATASOURCE_MAX_ACTIVE, 50)); - DruidDataSource druidDataSource = new DruidDataSource(); + HikariDataSource dataSource = new HikariDataSource(); - druidDataSource.setDriverClassName(properties.getDriverClassName()); - druidDataSource.setUrl(properties.getJdbcUrl()); - druidDataSource.setUsername(properties.getUser()); - druidDataSource.setPassword(PasswordUtils.decodePassword(properties.getPassword())); + dataSource.setDriverClassName(properties.getDriverClassName()); + dataSource.setJdbcUrl(properties.getJdbcUrl()); + dataSource.setUsername(properties.getUser()); + dataSource.setPassword(PasswordUtils.decodePassword(properties.getPassword())); - druidDataSource.setMinIdle(1); - druidDataSource.setMaxActive(1); - druidDataSource.setTestOnBorrow(true); + dataSource.setMinimumIdle(1); + dataSource.setMaximumPoolSize(1); + dataSource.setConnectionTestQuery(properties.getValidationQuery()); if (properties.getProps() != null) { - properties.getProps().forEach(druidDataSource::addConnectionProperty); + properties.getProps().forEach(dataSource::addDataSourceProperty); } - logger.info("Creating OneSession DruidDataSource pool success."); - return druidDataSource; + logger.info("Creating OneSession HikariDataSource pool success."); + return dataSource; } } diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/client/CommonDataSourceClientTest.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/client/CommonDataSourceClientTest.java index 7bb5a3c8e5..56c4327d1e 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/client/CommonDataSourceClientTest.java +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/client/CommonDataSourceClientTest.java @@ -34,11 +34,11 @@ import org.powermock.core.classloader.annotations.SuppressStaticInitializationFo import org.powermock.modules.junit4.PowerMockRunner; import org.springframework.jdbc.core.JdbcTemplate; -import com.alibaba.druid.pool.DruidDataSource; +import com.zaxxer.hikari.HikariDataSource; @RunWith(PowerMockRunner.class) @SuppressStaticInitializationFor("org.apache.dolphinscheduler.plugin.datasource.api.client.CommonDataSourceClient") -@PrepareForTest(value = {DruidDataSource.class, CommonDataSourceClient.class, JdbcDataSourceProvider.class, JdbcTemplate.class, Connection.class}) +@PrepareForTest(value = {HikariDataSource.class, CommonDataSourceClient.class, JdbcDataSourceProvider.class, JdbcTemplate.class, Connection.class}) public class CommonDataSourceClientTest { @Mock diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/provider/JdbcDataSourceProviderTest.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/provider/JdbcDataSourceProviderTest.java index 02df95a362..82bc257ee8 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/provider/JdbcDataSourceProviderTest.java +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-api/src/test/java/org/apache/dolphinscheduler/plugin/datasource/api/provider/JdbcDataSourceProviderTest.java @@ -27,25 +27,25 @@ import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; -import com.alibaba.druid.pool.DruidDataSource; +import com.zaxxer.hikari.HikariDataSource; @RunWith(PowerMockRunner.class) -@PrepareForTest(value = {DruidDataSource.class, JdbcDataSourceProvider.class}) +@PrepareForTest(value = {HikariDataSource.class, JdbcDataSourceProvider.class}) public class JdbcDataSourceProviderTest { @Test public void testCreateJdbcDataSource() { PowerMockito.mockStatic(JdbcDataSourceProvider.class); - DruidDataSource druidDataSource = PowerMockito.mock(DruidDataSource.class); - PowerMockito.when(JdbcDataSourceProvider.createJdbcDataSource(Mockito.any())).thenReturn(druidDataSource); + HikariDataSource dataSource = PowerMockito.mock(HikariDataSource.class); + PowerMockito.when(JdbcDataSourceProvider.createJdbcDataSource(Mockito.any())).thenReturn(dataSource); Assert.assertNotNull(JdbcDataSourceProvider.createJdbcDataSource(new MysqlConnectionParam())); } @Test public void testCreateOneSessionJdbcDataSource() { PowerMockito.mockStatic(JdbcDataSourceProvider.class); - DruidDataSource druidDataSource = PowerMockito.mock(DruidDataSource.class); - PowerMockito.when(JdbcDataSourceProvider.createOneSessionJdbcDataSource(Mockito.any())).thenReturn(druidDataSource); + HikariDataSource dataSource = PowerMockito.mock(HikariDataSource.class); + PowerMockito.when(JdbcDataSourceProvider.createOneSessionJdbcDataSource(Mockito.any())).thenReturn(dataSource); Assert.assertNotNull(JdbcDataSourceProvider.createOneSessionJdbcDataSource(new MysqlConnectionParam())); } diff --git a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-hive/src/main/java/org/apache/dolphinscheduler/plugin/datasource/hive/HiveDataSourceClient.java b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-hive/src/main/java/org/apache/dolphinscheduler/plugin/datasource/hive/HiveDataSourceClient.java index f9dfeb53b0..83dd8a5c4f 100644 --- a/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-hive/src/main/java/org/apache/dolphinscheduler/plugin/datasource/hive/HiveDataSourceClient.java +++ b/dolphinscheduler-datasource-plugin/dolphinscheduler-datasource-hive/src/main/java/org/apache/dolphinscheduler/plugin/datasource/hive/HiveDataSourceClient.java @@ -39,13 +39,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.jdbc.core.JdbcTemplate; -import com.alibaba.druid.pool.DruidDataSource; +import com.zaxxer.hikari.HikariDataSource; public class HiveDataSourceClient extends CommonDataSourceClient { private static final Logger logger = LoggerFactory.getLogger(HiveDataSourceClient.class); - protected DruidDataSource oneSessionDataSource; + protected HikariDataSource oneSessionDataSource; private JdbcTemplate oneSessionJdbcTemplate; private UserGroupInformation ugi; diff --git a/dolphinscheduler-python/src/main/java/org/apache/dolphinscheduler/server/PythonGatewayServer.java b/dolphinscheduler-python/src/main/java/org/apache/dolphinscheduler/server/PythonGatewayServer.java index 4131e8da93..64a94e0170 100644 --- a/dolphinscheduler-python/src/main/java/org/apache/dolphinscheduler/server/PythonGatewayServer.java +++ b/dolphinscheduler-python/src/main/java/org/apache/dolphinscheduler/server/PythonGatewayServer.java @@ -71,7 +71,8 @@ import py4j.GatewayServer; "org.apache.dolphinscheduler.server.master.*", "org.apache.dolphinscheduler.server.worker.*", "org.apache.dolphinscheduler.server.monitor.*", - "org.apache.dolphinscheduler.server.log.*" + "org.apache.dolphinscheduler.server.log.*", + "org.apache.dolphinscheduler.alert.*" }) }) public class PythonGatewayServer extends SpringBootServletInitializer { diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/quartz/DruidConnectionProvider.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/quartz/HikariConnectionProvider.java similarity index 78% rename from dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/quartz/DruidConnectionProvider.java rename to dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/quartz/HikariConnectionProvider.java index 3ac6ccaedc..ec064538a1 100644 --- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/quartz/DruidConnectionProvider.java +++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/quartz/HikariConnectionProvider.java @@ -14,24 +14,27 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.apache.dolphinscheduler.service.quartz; -import com.alibaba.druid.pool.DruidDataSource; import org.apache.dolphinscheduler.service.bean.SpringApplicationContext; -import org.quartz.utils.ConnectionProvider; import java.sql.Connection; import java.sql.SQLException; +import org.quartz.utils.ConnectionProvider; + +import com.zaxxer.hikari.HikariDataSource; + /** - * druid connection provider + * hikari connection provider */ -public class DruidConnectionProvider implements ConnectionProvider { +public class HikariConnectionProvider implements ConnectionProvider { - private final DruidDataSource dataSource; + private final HikariDataSource dataSource; - public DruidConnectionProvider(){ - this.dataSource = SpringApplicationContext.getBean(DruidDataSource.class); + public HikariConnectionProvider() { + this.dataSource = SpringApplicationContext.getBean(HikariDataSource.class); } @Override @@ -40,7 +43,7 @@ public class DruidConnectionProvider implements ConnectionProvider { } @Override - public void shutdown() throws SQLException { + public void shutdown() { dataSource.close(); } diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/quartz/QuartzExecutors.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/quartz/QuartzExecutors.java index 695920c2a7..9f49dd7939 100644 --- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/quartz/QuartzExecutors.java +++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/quartz/QuartzExecutors.java @@ -173,7 +173,7 @@ public class QuartzExecutors { properties.setProperty(ORG_QUARTZ_JOBSTORE_CLUSTERCHECKININTERVAL, conf.getString(ORG_QUARTZ_JOBSTORE_CLUSTERCHECKININTERVAL, QUARTZ_CLUSTERCHECKININTERVAL)); properties.setProperty(ORG_QUARTZ_JOBSTORE_ACQUIRETRIGGERSWITHINLOCK, conf.getString(ORG_QUARTZ_JOBSTORE_ACQUIRETRIGGERSWITHINLOCK, QUARTZ_ACQUIRETRIGGERSWITHINLOCK)); properties.setProperty(ORG_QUARTZ_JOBSTORE_DATASOURCE, conf.getString(ORG_QUARTZ_JOBSTORE_DATASOURCE, QUARTZ_DATASOURCE)); - properties.setProperty(ORG_QUARTZ_DATASOURCE_MYDS_CONNECTIONPROVIDER_CLASS, conf.getString(ORG_QUARTZ_DATASOURCE_MYDS_CONNECTIONPROVIDER_CLASS, DruidConnectionProvider.class.getName())); + properties.setProperty(ORG_QUARTZ_DATASOURCE_MYDS_CONNECTIONPROVIDER_CLASS, conf.getString(ORG_QUARTZ_DATASOURCE_MYDS_CONNECTIONPROVIDER_CLASS, HikariConnectionProvider.class.getName())); schedulerFactory.initialize(properties); scheduler = schedulerFactory.getScheduler(); diff --git a/dolphinscheduler-service/src/main/resources/quartz.properties b/dolphinscheduler-service/src/main/resources/quartz.properties index 93ee71c6a3..5420755fe7 100644 --- a/dolphinscheduler-service/src/main/resources/quartz.properties +++ b/dolphinscheduler-service/src/main/resources/quartz.properties @@ -51,4 +51,4 @@ #============================================================================ # Configure Datasources #============================================================================ -#org.quartz.dataSource.myDs.connectionProvider.class = org.apache.dolphinscheduler.service.quartz.DruidConnectionProvider +#org.quartz.dataSource.myDs.connectionProvider.class = org.apache.dolphinscheduler.service.quartz.HikariConnectionProvider diff --git a/dolphinscheduler-standalone-server/src/main/java/org/apache/dolphinscheduler/server/StandaloneServer.java b/dolphinscheduler-standalone-server/src/main/java/org/apache/dolphinscheduler/server/StandaloneServer.java index 3c688e9f79..3dfde101d6 100644 --- a/dolphinscheduler-standalone-server/src/main/java/org/apache/dolphinscheduler/server/StandaloneServer.java +++ b/dolphinscheduler-standalone-server/src/main/java/org/apache/dolphinscheduler/server/StandaloneServer.java @@ -41,6 +41,6 @@ public class StandaloneServer { WorkerServer.class, AlertServer.class, PythonGatewayServer.class - ).profiles("h2").run(args); + ).profiles("h2", "api").run(args); } } diff --git a/dolphinscheduler-standalone-server/src/main/resources/application-h2.properties b/dolphinscheduler-standalone-server/src/main/resources/application-h2.properties new file mode 100644 index 0000000000..a9fd83fea0 --- /dev/null +++ b/dolphinscheduler-standalone-server/src/main/resources/application-h2.properties @@ -0,0 +1,16 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# \ No newline at end of file diff --git a/script/dolphinscheduler-daemon.sh b/script/dolphinscheduler-daemon.sh index 86c680d3e1..e8074bfd4b 100755 --- a/script/dolphinscheduler-daemon.sh +++ b/script/dolphinscheduler-daemon.sh @@ -67,12 +67,12 @@ if [ "$command" = "api-server" ]; then HEAP_OPTS="-Xms1g -Xmx1g -Xmn512m" export DOLPHINSCHEDULER_OPTS="$HEAP_OPTS $DOLPHINSCHEDULER_OPTS $API_SERVER_OPTS" elif [ "$command" = "master-server" ]; then - LOG_FILE="-Dlogging.config=classpath:logback-master.xml -Ddruid.mysql.usePingMethod=false" + LOG_FILE="-Dlogging.config=classpath:logback-master.xml" CLASS=org.apache.dolphinscheduler.server.master.MasterServer HEAP_OPTS="-Xms4g -Xmx4g -Xmn2g" export DOLPHINSCHEDULER_OPTS="$HEAP_OPTS $DOLPHINSCHEDULER_OPTS $MASTER_SERVER_OPTS" elif [ "$command" = "worker-server" ]; then - LOG_FILE="-Dlogging.config=classpath:logback-worker.xml -Ddruid.mysql.usePingMethod=false" + LOG_FILE="-Dlogging.config=classpath:logback-worker.xml" CLASS=org.apache.dolphinscheduler.server.worker.WorkerServer HEAP_OPTS="-Xms2g -Xmx2g -Xmn1g" export DOLPHINSCHEDULER_OPTS="$HEAP_OPTS $DOLPHINSCHEDULER_OPTS $WORKER_SERVER_OPTS"