Azkaban的Web Server源码探究系列7: ExecutorManager的初始化

本文详细解析Azkaban中ExecutorManager的初始化流程,包括JdbcExecutorLoader类的实现方式,MySQLBasicDataSource连接池的具体配置及监测线程的设计原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 摘要:很好,到目前为止,一切都很顺利!下面分析ExecutorManager的初始化过程======================================================================publicclassJdbcExecutorLoaderextendsAbstractJdbcLoaderimplementsExecutorLoader{小的就不说了,主要是看AbstractJdbcLoader,有个成员publicAbstractJd
  • 很好,到目前为止,一切都很顺利!


    下面分析ExecutorManager的初始化过程


    ======================================================================


    publicclassJdbcExecutorLoader extendsAbstractJdbcLoader implements


    ExecutorLoader {


    小的就不说了,主要是看AbstractJdbcLoader ,有个成员


    publicAbstractJdbcLoader(Props props) {


    dataSource= DataSourceUtils.getDataSource(props);


    }


    其实是生成了一个MysqlBasicDataSource


    publicstaticAzkabanDataSource getDataSource(Props props) {//看到这里了


    String databaseType= props.getString("database.type");



    AzkabanDataSource dataSource= null;


    if(databaseType.equals("mysql")) {//一般都是mysql


    intport= props.getInt("mysql.port");//下面都是获取参数


    String host= props.getString("mysql.host");


    String database= props.getString("mysql.database");


    String user= props.getString("mysql.user");


    String password= props.getString("mysql.password");


    intnumConnections= props.getInt("mysql.numconnections");



    dataSource=


    getMySQLDataSource(host, port, database, user, password,


    numConnections);


    } elseif(databaseType.equals("h2")) {


    String path= props.getString("h2.path");


    dataSource= getH2DataSource(path);


    }



    returndataSource;


    }


    ---



    /**


    * Create a MySQL DataSource


    *


    * @paramhost


    * @paramport


    * @paramdbName


    * @paramuser


    * @parampassword


    * @paramnumConnections


    * @return


    */


    publicstaticAzkabanDataSource getMySQLDataSource(String host, Integer port,


    String dbName, String user, String password, Integer numConnections) {


    returnnewMySQLBasicDataSource(host, port, dbName, user, password,


    numConnections);


    }


    所以,前面都是取属性,然后生成MySQLBasicDataSource


    ====================================================


    关注下这个类的结构


    publicstaticclassMySQLBasicDataSource extendsAzkabanDataSource {


    publicabstractclassAzkabanDataSource extendsBasicDataSource {


    所以说,最终还是用了dbcp的连接池,到这里,读者对这个类大概也就知道怎么回事了,


    其它细节其实都不用关心。




    最后要强调的是:在


    publicstaticclassMySQLBasicDataSource extendsAzkabanDataSource {



    privatestaticMonitorThread monitorThread= null;//有一个监听线程


    代码如下:



    privateclassMonitorThread extendsThread {


    privatestaticfinallongMONITOR_THREAD_WAIT_INTERVAL_MS= 30 * 1000;


    privatebooleanshutdown= false;


    MySQLBasicDataSource dataSource;



    publicMonitorThread(MySQLBasicDataSource mysqlSource) {


    this.setName("MySQL-DB-Monitor-Thread");


    dataSource= mysqlSource;


    }



    @SuppressWarnings("unused")


    publicvoidshutdown() {


    shutdown= true;


    this.interrupt();


    }



    publicvoidrun() {


    while(!shutdown) {


    synchronized(this) {


    try{


    pingDB();


    wait(MONITOR_THREAD_WAIT_INTERVAL_MS);


    } catch(InterruptedException e) {


    logger.info("Interrupted. Probably to shut down.");


    }


    }


    }


    }



    privatevoidpingDB() {


    Connection connection= null;


    try{


    connection= dataSource.getConnection();


    PreparedStatement query= connection.prepareStatement("SELECT 1");


    query.execute();


    } catch(SQLException e) {


    // TODOAuto-generated catch block


    e.printStackTrace();


    logger


    .error("MySQL connection test failed. Please check MySQL connection health!");


    } finally{


    DbUtils.closeQuietly(connection);


    }


    }


    }



    }


    有兴趣的可以研究下具体做啥的 :)


    那么到了这里, JDBC方面就初始化好了。


    真正的execManager的初始化就不说了,读者可以自己研究下 :)


以上是Azkaban的Web Server源码探究系列7: ExecutorManager的初始化的内容,更多 ExecutorManager 初始化 探究 源码 azkaban 系列 server web 的内容,请您使用右上方搜索功能获取相关信息。   1  2  3  4 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值