o2oa源码怎么跑起来

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了o2oa源码怎么跑起来相关的知识,希望对你有一定的参考价值。

您好,要跑起O2OA源码,首先您需要准备好一台支持Java环境的服务器,并安装JDK,Tomcat,mysql等环境。然后,您需要下载O2OA源码,并将其解压到您的服务器上。接下来,您需要修改O2OA源码中的配置文件,以便您的服务器可以正确连接到您的数据库,并且您的应用程序可以正确访问您的服务器。最后,您需要编译O2OA源码,并将其部署到您的服务器上,以便您的应用程序可以正常运行。经过以上步骤,您就可以跑起O2OA源码了。 参考技术A 您好,要运行O2OA源码,您需要先安装Java运行环境,然后下载O2OA源码,解压后,在命令行中输入“mvn clean package”,这会编译源码并生成一个war文件。接着,您需要安装一个Web容器,比如Tomcat,将war文件部署到Web容器中,然后访问相应的URL,就可以运行O2OA源码了。 参考技术B o2oa源码怎么跑起来
使用Eclipse导入o2oa源码
一、使用Eclipse导入o2oa源码
注意,当源码导入到eclipse项目后,maven会从mvn repository下载所依赖的项目jar包,可能需要一些时间,视情况在5-30分钟左右。

canal 源码解析系列-先把demo跑起来

写在前面

把demo跑起来,一个是对canal的功能有个整体的认识,还有就是阅读源码过程中如果有看不懂的地方可以debug下。

环境准备

  • zk,安装后启动开启2181端口,具体过程省略。

  • mysql,我本地自己装了一个,方便修改数据验证。另外就是需要确认mysql的binlog格式是ROW才可以。

编写demo

demo分为两部分,服务端和客户端。这两部分我都是根据源码包里单元测试修改的。

server端

服务端demo,参考了源码包里的 com.alibaba.otter.canal.server.CanalServerTest类,主要配置根据本地的情况做了一些修改。这里贴出来一些重要的部分。

public class CanalServerTestMain {

    protected static final String cluster1      = "127.0.0.1:2181";
    protected static final String DESTINATION   = "test";
    protected static final String DETECTING_SQL = "select 1"; //数据源心跳检测
    protected static final String MYSQL_ADDRESS = "127.0.0.1"; //mysql地址,端口默认用3306
    protected static final String USERNAME      = "root"; //连接mysql用户名
    protected static final String PASSWORD      = "11111111"; //连接mysql 密码
    protected static final String FILTER        = ".*"; //过滤器,这里表示不过滤

    private final ByteBuffer      header        = ByteBuffer.allocate(4);
    private CanalServerWithNetty  nettyServer;

    public static void main(String[] args) {

        CanalServerTestMain test = new CanalServerTestMain();
        try {
            test.setUp();
            System.out.println("start");
        } catch (Throwable e) {
            e.printStackTrace();
        } finally {
            System.out.println("running");
            try {
                Thread.sleep(TimeUnit.SECONDS.toMillis(60));//运行60s自动结束
            } catch (Throwable e2) {
            }
            test.tearDown();
            System.out.println("end");
        }

    }

private Canal buildCanal() {
        Canal canal = new Canal();
        canal.setId(1L);
        canal.setName(DESTINATION);
        canal.setDesc("test");

        CanalParameter parameter = new CanalParameter();

        parameter.setZkClusters(Arrays.asList(cluster1));
        parameter.setMetaMode(MetaMode.MEMORY);
        parameter.setHaMode(HAMode.HEARTBEAT);
        parameter.setIndexMode(IndexMode.MEMORY);

        parameter.setStorageMode(StorageMode.MEMORY);
        parameter.setMemoryStorageBufferSize(32 * 1024);

        parameter.setSourcingType(SourcingType.MYSQL);
        parameter.setDbAddresses(Arrays.asList(new InetSocketAddress(MYSQL_ADDRESS, 3306),
            new InetSocketAddress(MYSQL_ADDRESS, 3306)));
        parameter.setDbUsername(USERNAME);
        parameter.setDbPassword(PASSWORD);
//        parameter.setPositions(Arrays.asList("{\\"journalName\\":\\"mysql-bin.000013\\",\\"position\\":156L,\\"timestamp\\":1322803601000L}",
//            "{\\"journalName\\":\\"mysql-bin.000013\\",\\"position\\":156L,\\"timestamp\\":1322803601000L}"));

        parameter.setSlaveId(1234L);

        parameter.setDefaultConnectionTimeoutInSeconds(30);
        parameter.setConnectionCharset("UTF-8");
        parameter.setConnectionCharsetNumber((byte) 33);
        parameter.setReceiveBufferSize(8 * 1024);
        parameter.setSendBufferSize(8 * 1024);

        parameter.setDetectingEnable(false);
        parameter.setDetectingIntervalInSeconds(10);
        parameter.setDetectingRetryTimes(3);
        parameter.setDetectingSQL(DETECTING_SQL);

        canal.setCanalParameter(parameter);
        return canal;
    }

这段代码要特别注意我注释掉的部分,这里指定了binlog文件以及订阅的位置,这个不一定和我们本地的数据库是一致的,为了避免报错,这里不指定让canal自己去数据库获取。

client端

client部分的demo是参考com.alibaba.otter.canal.example.SimpleCanalClientTest这个类修改来的。

public static void main(String args[]) {
        // 根据ip,直接创建链接,无HA的功能
        String destination = "test";
        String ip = AddressUtils.getHostIp();
        CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(ip, 1088),
            destination,
            "",
            "");

        final SimpleCanalClientTest2 clientTest = new SimpleCanalClientTest2(destination);
        clientTest.setConnector(connector);
        clientTest.start();
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            try {
                logger.info("## stop the canal client");
                clientTest.stop();
            } catch (Throwable e) {
                logger.warn("##something goes wrong when stopping canal:", e);
            } finally {
                logger.info("## canal client is down.");
            }
        }));
    }

这里主要是确保ip和端口和server端保持一直。

验证

分别运行起来服务端的demo和客户端的demo,看日志确保没有报错。然后在mysql随便修改或者新增一条记录,在客户端的日志可以看到如下的输出:

这个输出的意思是说,我insert了一条记录,记录保护三个字段:dt,pv和uv,以及他们各自的值。输出的结果还是比较直观的。

以上是关于o2oa源码怎么跑起来的主要内容,如果未能解决你的问题,请参考以下文章

tomcat源码springboot搭建的跑包含websocket的项目

O2OA系统的开放性高不高的?

手把手教你把Tomcat源码跑起来!

怎么读 Tomcat 源码?

湖南房卡跑胡子棋牌源码,娄底跑胡子衡阳跑胡子怀化跑胡子湘乡跑胡子

如何快速阅读源码