package tech.powerjob.official.processors.impl.sql; import com.alibaba.fastjson.JSONObject; import org.apache.commons.lang3.StringUtils; import tech.powerjob.official.processors.util.CommonUtils; import tech.powerjob.official.processors.util.SecurityUtils; import tech.powerjob.worker.core.processor.TaskContext; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; /** * execute sql by dynamic datasource, which is very dangerous but can save your life at the critical moment * * @author tjq * @since 2021/3/14 */ public class DynamicDatasourceSqlProcessor extends AbstractSqlProcessor { @Override protected void validateParams(SqlParams sqlParams) { if (StringUtils.isEmpty(sqlParams.getJdbcUrl())) { throw new IllegalArgumentException("jdbcUrl can't be empty in DynamicDatasourceSqlProcessor!"); } } @Override Connection getConnection(SqlParams sqlParams, TaskContext taskContext) throws SQLException { JSONObject params = JSONObject.parseObject(CommonUtils.parseParams(taskContext)); Properties properties = new Properties(); // normally at least a "user" and "password" property should be included params.forEach((k, v) -> properties.setProperty(k, String.valueOf(v))); return DriverManager.getConnection(sqlParams.getJdbcUrl(), properties); } @Override protected String getSecurityDKey() { return SecurityUtils.ENABLE_DYNAMIC_SQL_PROCESSOR; } }