文档章节

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

强子大叔的码田
 强子大叔的码田
发布于 2016/04/07 10:20
字数 451
阅读 608
收藏 0

很好,到目前为止,一切都很顺利!

下面分析ExecutorManager的初始化过程

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

public class JdbcExecutorLoader extends AbstractJdbcLoader implements

    ExecutorLoader {

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

 public AbstractJdbcLoader(Props props) {

    dataSource = DataSourceUtils.getDataSource(props);

  }

其实是生成了一个MysqlBasicDataSource

public static AzkabanDataSource getDataSource(Props props) {//看到这里了

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

 

    AzkabanDataSource dataSource = null;

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

      int port = 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");

      int numConnections = props.getInt("mysql.numconnections");

 

      dataSource =

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

              numConnections);

    } else if (databaseType.equals("h2")) {

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

      dataSource = getH2DataSource(path);

    }

 

    return dataSource;

  }

---

  /**

   * Create a MySQL DataSource

   *

   * @param host

   * @param port

   * @param dbName

   * @param user

   * @param password

   * @param numConnections

   * @return

   */

  public static AzkabanDataSource getMySQLDataSource(String host, Integer port,

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

    return new MySQLBasicDataSource(host, port, dbName, user, password,

        numConnections);

  }

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

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

关注下这个类的结构

 public static class MySQLBasicDataSource extends AzkabanDataSource {

public abstract class AzkabanDataSource extends BasicDataSource {

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

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



最后要强调的是:在

  public static class MySQLBasicDataSource extends AzkabanDataSource {

 

    private static MonitorThread monitorThread = null;//有一个监听线程

代码如下:

private class MonitorThread extends Thread {

      private static final long MONITOR_THREAD_WAIT_INTERVAL_MS = 30 * 1000;

      private boolean shutdown = false;

      MySQLBasicDataSource dataSource;

 

      public MonitorThread(MySQLBasicDataSource mysqlSource) {

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

        dataSource = mysqlSource;

      }

 

      @SuppressWarnings("unused")

      public void shutdown() {

        shutdown = true;

        this.interrupt();

      }

 

      public void run() {

        while (!shutdown) {

          synchronized (this) {

            try {

              pingDB();

              wait(MONITOR_THREAD_WAIT_INTERVAL_MS);

            } catch (InterruptedException e) {

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

            }

          }

        }

      }

 

      private void pingDB() {

        Connection connection = null;

        try {

          connection = dataSource.getConnection();

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

          query.execute();

        } catch (SQLException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

          logger

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

        } finally {

          DbUtils.closeQuietly(connection);

        }

      }

    }

 

  }

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

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

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


© 著作权归作者所有

强子大叔的码田

强子大叔的码田

粉丝 910
博文 1439
码字总数 1221048
作品 9
南京
架构师
私信 提问
Azkaban的Web Server源码探究系列24: 一次性执行execute任务取出处理

提交之后,很不幸,有个问题如下: 抓包分析: 请求和响应分别如下: 所以接下来需要对这个URL进行debug ============================================================================== ...

强子哥哥
2016/04/10
331
0
Azkaban的Web Server源码探究系列23: 一次性执行execute的正式提交

下面正式提交 String message = executorManager.submitExecutableFlow(exflow, user.getUserId()); 那么,到底executorManager是如何处理的呢? ========================================......

强子哥哥
2016/04/10
349
0
Azkaban的线程系列 37:QueueProcessor线程的任务处理&executor存活监控

有个线程,AzkabanWebServer-QueueProcessor-Thread. 下面分析下这个线程到底干嘛的!!! ==================================================================================== stop in......

强子哥哥
2016/04/13
555
0
Azkaban的Web Server源码探究系列22: 一次性执行execute的提交准备

首先,触发按钮 会弹出一个页面 可以看到有个exec id 1 为什么会发生这一切? 通过抓包,我们得知 所以需要研究 stop in azkaban.webapp.servlet.ExecutorServlet.doGet stop in azkaban.web...

强子哥哥
2016/04/10
345
0
azkaban配置插件问题,跪求解答

配置web插件:hdfs、jobsummary、reportal,出现同样的问题某个类,但是在我的azkaban-web-server/plugins/viewer/hdfs/src/azkaban/viewer/hdfs在这个包下我是有HdfsBrowserServlet文件的,...

你我他有个梦
2017/08/11
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

华为手机翻译功能怎么使用?这三种方法请务必收藏

华为手机翻译功能怎么使用?在我们的生活中会经常遇到翻译问题,许多外语不好的朋友该怎么办呢?华为手机已经为我们解决了这个问题,今天小编就教大家学会使用华为手机中的三种翻译技巧,需要...

翻译小天才
15分钟前
2
0
企业服务软件开发中需要注意的三个问题

在开发企业服务软件时,我们需要分为:业务需求、用户需求、产品需求,三大需求层次,三个层次互相关联,企业服务软件开发首先要服务业务,需要满足业务的需求,再关注用户体验,也就是用户需...

积木创意科技
18分钟前
2
0
C++容器底层数据结构

内置数组: int arr[10][10];memset(arr,0,10*10*sizeof(int)); //初始化int tmp[10][10];memcpy(arr, tmp, 10 * 10 * sizeof(int));//拷贝 void *memcpy(void *destin, void *source,......

SibylY
18分钟前
2
0
Dubbo-自适应拓展机制

背景 在 Dubbo 中,很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等,这些都是Dubbo的基础组件。这些基础组件的拓展不是在系统框架启动阶段被加载,而是拓展方...

rock-man
46分钟前
6
0
Kali安装fcitx输入法(五笔)

安装fcitx > sudo apt-get install fcitx-rime fcitx-config-gtk3 重启 > sudo reboot fcitx配置 效果就是这样 配置输入法切换 系统设置...

yeahlife
48分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部