获取mysql规则流

import com.flinkRisk.config.FlinkConfig;
import com.flinkRisk.model.VehicleGroup;
import com.flinkRisk.rule.*;

import lombok.extern.slf4j.Slf4j;
import org.apache.flink.api.java.utils.ParameterTool;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.functions.source.RichSourceFunction;

import java.sql.Connection;
import java.sql.DriverManager;
/**
 * 自定义Mysql Source,每隔 secondInterval 秒从Mysql中获取一次配置
 */
@Slf4j
public class MysqlRuleSource extends RichSourceFunction<BaseRule> {
	private String user;
    private String passwd;
    private String url;
    private volatile boolean isRunning = true;
    private Connection connection;
    private ParameterTool parameterTool;
    /**
     * 开始时, 在open()方法中建立连接
     *
     * @param parameters
     * @throws Exception
     */
    @Override
    public void open(Configuration parameters) throws Exception {
         parameterTool = (ParameterTool) getRuntimeContext().getExecutionConfig().getGlobalJobParameters();

        url = parameterTool.getRequired("mysql.url");
        user = parameterTool.getRequired("mysql.user");
        passwd =  parameterTool.getRequired("mysql.password");
        connection = getConnection();
        super.open(parameters);
    }
/**
     * 执行完,调用close()方法关系连接,释放资源
     *
     * @throws Exception
     */
    @Override
    public void close() throws Exception {
        super.close();
        //关闭连接和释放资源
        if (connection != null) {
            connection.close();
        }
        super.close();
    }
/**
     * 调用run()方法定时获取报警规则,报警配置等信息
     *
     * @param ctx
     */
    @Override
    public void run(SourceContext<BaseRule> ctx) {
		try {
			while (isRunning) {
				//定时获取报警规则
                log.info("每隔{}秒定时获取报警规则信息", 600);
                UpdateAllRuleOpt startUpdate=new UpdateAllRuleOpt();
                startUpdate.setRuleTheme(555);
                ctx.collect(startUpdate);

                //更新普通规则
                FlinkConfig.updateGeneralRule(connection,ctx,null,null);
                //更新线路和区域规则
                FlinkConfig.updatePathAndAreaRule(connection,ctx,null,null);
                //更新道路规则
                FlinkConfig.updateRoadRule(connection,ctx,null,null);
                // 粤标规则
                FlinkConfig.updateGeneralRuleYb(connection, ctx, null, null);
                 UpdateAllRuleOpt finishUpdate=new UpdateAllRuleOpt();
                finishUpdate.setRuleTheme(666);
                // 更新第三方超速报警规则
                FlinkConfig.initThirdPartyRule(false,parameterTool,null,new ThirdPartyOverSpeedRule(),null,null ,null, null, ctx);
                // 更新车组缓存
                FlinkConfig.initGroupCache(false,parameterTool,ctx);
                VehicleGroup updateGroup = new VehicleGroup();
                updateGroup.setRuleTheme(888);
                updateGroup.setUpdateFlag(1);
                ctx.collect(finishUpdate);
                //每隔多少秒执行一次查询
                Thread.sleep(600 * 1000);
			   }
			}catch{
			 log.error("从Mysql获取配置异常...", ex);
		}
	}
/**
     * 取消时,会调用此方法
     */
    @Override
    public void cancel() {
        isRunning = false;
    }

    private Connection getConnection() {
        Connection con = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            //注意,替换成自己本地的 mysql 数据库地址和用户名、密码
            con = DriverManager.getConnection(url, user, passwd);
        } catch (Exception e) {
            log.error("-----------mysql get connection has exception , msg = {}", e.getMessage());
        }
        return con;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值