Browse Source
* add druid connection provider in order to change quartz default connection pool * remove c3p0 in escheduler-api and escheduler-dao * change method name queryByIdAndIp to queryBySessionId and queryByUserIdAndIp to queryByUserId * change connectionProvider.class from c3p0 to druid * change connectionProvider.class from c3p0 to druidpull/2/head
lgcareer
5 years ago
committed by
bao liang
5 changed files with 220 additions and 5 deletions
@ -0,0 +1,203 @@
|
||||
/* |
||||
* 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. |
||||
*/ |
||||
package cn.escheduler.server.quartz; |
||||
|
||||
import com.alibaba.druid.pool.DruidDataSource; |
||||
import org.quartz.SchedulerException; |
||||
import java.sql.Connection; |
||||
import java.sql.SQLException; |
||||
import org.quartz.utils.ConnectionProvider; |
||||
|
||||
/** |
||||
* druid connection provider |
||||
*/ |
||||
public class DruidConnectionProvider implements ConnectionProvider { |
||||
|
||||
/** |
||||
* JDBC driver |
||||
*/ |
||||
public String driver; |
||||
|
||||
/** |
||||
* JDBC URL |
||||
*/ |
||||
public String URL; |
||||
|
||||
/** |
||||
* Database user name |
||||
*/ |
||||
public String user; |
||||
|
||||
/** |
||||
* Database password |
||||
*/ |
||||
public String password; |
||||
|
||||
/** |
||||
* Maximum number of database connections |
||||
*/ |
||||
public int maxConnections; |
||||
|
||||
/** |
||||
* The query that validates the database connection |
||||
*/ |
||||
public String validationQuery; |
||||
|
||||
/** |
||||
* Whether the database sql query to validate connections should be executed every time |
||||
* a connection is retrieved from the pool to ensure that it is still valid. If false, |
||||
* then validation will occur on check-in. Default is false. |
||||
*/ |
||||
private boolean validateOnCheckout; |
||||
|
||||
/** |
||||
* The number of seconds between tests of idle connections - only enabled |
||||
* if the validation query property is set. Default is 50 seconds. |
||||
*/ |
||||
private int idleConnectionValidationSeconds; |
||||
|
||||
/** |
||||
* The maximum number of prepared statements that will be cached per connection in the pool. |
||||
* Depending upon your JDBC Driver this may significantly help performance, or may slightly |
||||
* hinder performance. |
||||
* Default is 120, as Quartz uses over 100 unique statements. 0 disables the feature. |
||||
*/ |
||||
public String maxCachedStatementsPerConnection; |
||||
|
||||
/** |
||||
* Discard connections after they have been idle this many seconds. 0 disables the feature. Default is 0. |
||||
*/ |
||||
private String discardIdleConnectionsSeconds; |
||||
|
||||
/** |
||||
* Default maximum number of database connections in the pool. |
||||
*/ |
||||
public static final int DEFAULT_DB_MAX_CONNECTIONS = 10; |
||||
|
||||
/** |
||||
* The maximum number of prepared statements that will be cached per connection in the pool. |
||||
*/ |
||||
public static final int DEFAULT_DB_MAX_CACHED_STATEMENTS_PER_CONNECTION = 120; |
||||
|
||||
/** |
||||
* Druid connection pool |
||||
*/ |
||||
private DruidDataSource datasource; |
||||
|
||||
public Connection getConnection() throws SQLException { |
||||
return datasource.getConnection(); |
||||
} |
||||
public void shutdown() throws SQLException { |
||||
datasource.close(); |
||||
} |
||||
public void initialize() throws SQLException{ |
||||
if (this.URL == null) { |
||||
throw new SQLException("DBPool could not be created: DB URL cannot be null"); |
||||
} |
||||
if (this.driver == null) { |
||||
throw new SQLException("DBPool driver could not be created: DB driver class name cannot be null!"); |
||||
} |
||||
if (this.maxConnections < 0) { |
||||
throw new SQLException("DBPool maxConnectins could not be created: Max connections must be greater than zero!"); |
||||
} |
||||
datasource = new DruidDataSource(); |
||||
try{ |
||||
datasource.setDriverClassName(this.driver); |
||||
} catch (Exception e) { |
||||
try { |
||||
throw new SchedulerException("Problem setting driver class name on datasource: " + e.getMessage(), e); |
||||
} catch (SchedulerException e1) { |
||||
} |
||||
} |
||||
datasource.setUrl(this.URL); |
||||
datasource.setUsername(this.user); |
||||
datasource.setPassword(this.password); |
||||
datasource.setMaxActive(this.maxConnections); |
||||
datasource.setMinIdle(1); |
||||
datasource.setMaxWait(0); |
||||
datasource.setMaxPoolPreparedStatementPerConnectionSize(DEFAULT_DB_MAX_CONNECTIONS); |
||||
if (this.validationQuery != null) { |
||||
datasource.setValidationQuery(this.validationQuery); |
||||
if(!this.validateOnCheckout) |
||||
datasource.setTestOnReturn(true); |
||||
else |
||||
datasource.setTestOnBorrow(true); |
||||
datasource.setValidationQueryTimeout(this.idleConnectionValidationSeconds); |
||||
} |
||||
} |
||||
|
||||
public String getDriver() { |
||||
return driver; |
||||
} |
||||
public void setDriver(String driver) { |
||||
this.driver = driver; |
||||
} |
||||
public String getURL() { |
||||
return URL; |
||||
} |
||||
public void setURL(String URL) { |
||||
this.URL = URL; |
||||
} |
||||
public String getUser() { |
||||
return user; |
||||
} |
||||
public void setUser(String user) { |
||||
this.user = user; |
||||
} |
||||
public String getPassword() { |
||||
return password; |
||||
} |
||||
public void setPassword(String password) { |
||||
this.password = password; |
||||
} |
||||
public int getMaxConnections() { |
||||
return maxConnections; |
||||
} |
||||
public void setMaxConnections(int maxConnections) { |
||||
this.maxConnections = maxConnections; |
||||
} |
||||
public String getValidationQuery() { |
||||
return validationQuery; |
||||
} |
||||
public void setValidationQuery(String validationQuery) { |
||||
this.validationQuery = validationQuery; |
||||
} |
||||
public boolean isValidateOnCheckout() { |
||||
return validateOnCheckout; |
||||
} |
||||
public void setValidateOnCheckout(boolean validateOnCheckout) { |
||||
this.validateOnCheckout = validateOnCheckout; |
||||
} |
||||
public int getIdleConnectionValidationSeconds() { |
||||
return idleConnectionValidationSeconds; |
||||
} |
||||
public void setIdleConnectionValidationSeconds(int idleConnectionValidationSeconds) { |
||||
this.idleConnectionValidationSeconds = idleConnectionValidationSeconds; |
||||
} |
||||
public DruidDataSource getDatasource() { |
||||
return datasource; |
||||
} |
||||
public void setDatasource(DruidDataSource datasource) { |
||||
this.datasource = datasource; |
||||
} |
||||
public String getDiscardIdleConnectionsSeconds() { |
||||
return discardIdleConnectionsSeconds; |
||||
} |
||||
public void setDiscardIdleConnectionsSeconds(String discardIdleConnectionsSeconds) { |
||||
this.discardIdleConnectionsSeconds = discardIdleConnectionsSeconds; |
||||
} |
||||
} |
Loading…
Reference in new issue