keycloak源码分析系列-01-源码启动

资源环境

keycloak 10.0.2
mysql 5.7
idea 2020.1.2

keycloak是什么我就不赘述了,反正英文文档我也看不懂,下面直接进入日志,代码跑起来

代码运行起来

源码下载

https://github.com/keycloak/keycloak.git

  • 下载后切换分支,本文使用的代码为 10.0.2分支(怎么切换分支请自行百度),其他版本代码可能不适合本文。
  • 注意切换mavn setting.xml文件,我这里使用的keycloak提供的setting.xml(下载请到git仓库地址寻找)
  • 加载到IDEA后建议执行mvn 命令: mvn -Dmaven.test.skip clean install

配置数据库连接

下载代码在项目目录下面找到 testsuite/utils/src/resources/META-INF/keycloak-server.json文件。testsuite/utils 是keycloak提供的启动项目,后面的项目启动也在这个项目中

修改keycloak-server.json文件(65行开始)内容:

    "connectionsJpa": {
        "default": {
            "url": "${keycloak.connectionsJpa.url:jdbc:mysql://localhost:3306/mykeycloak1?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=UTF-8}",
            "driver": "${keycloak.connectionsJpa.driver:com.mysql.jdbc.Driver}",
            "driverDialect": "${keycloak.connectionsJpa.driverDialect:org.hibernate.dialect.MySQL5InnoDBDialect}",
            "user": "${keycloak.connectionsJpa.user:root}",
            "password": "${keycloak.connectionsJpa.password:******}",
            "showSql": "${keycloak.connectionsJpa.showSql:}",
            "formatSql": "${keycloak.connectionsJpa.formatSql:}",
            "globalStatsInterval": "${keycloak.connectionsJpa.globalStatsInterval:}"
        }
    },
  • 配置是不是很属性?对这就是 jpa 的配置,属性 jpa 朋友看到是不是很亲切
  • 注意数据库名、账号、密码、地址换测自己的

开始启动

现在我们来启动代码,进入testsuite/utils 项目下,在源码下找到 KeycloakServer 类,打开这个类找到main方法,这个就是启动的入口。
在这里插入图片描述
启动后看到直接调用了 bootstrapKeycloakServer 方法,这个方法执行就会解析配置文件,这些都不重要(反正我也看出来又重不重要)。我们要走主流程,我们来看看230行代码:
在这里插入图片描述

这段代码我们发现new了一个KeycloakServer对象,并且调用了start()方法。现在我们进入start()方法。
在这里插入图片描述
我们看到start()方法设置了KeycloakApplication,创建了UndertowJaxrServer对象,server对象又发布了服务,设置了ContextPath.
这段代码就是创建了一个jboss服务器,并且进行发布。jboss服务不熟,这儿就不掰扯了,反正都不重要(反正我也不知道)。
我们现在来看一下KeycloakApplication 类,首先看一下构造函数:
在这里插入图片描述
看样子是加载了配置文件,并且设置了onStartup()和onShutdown(),看名称是启动时调用的方法和服务终止时调用的方法,具体怎么实现,原理是啥都不重要(反正看不懂),在启动时调用startup()这个方法,这个很重要,我们接下来看看startup()这个方法:
在这里插入图片描述
其他的不重要,我们看一下框起来的这部分,看起来应该时初始化数据和建立数据库连接的,走完这一段呢我们可以看一下我们的数据库:在这里插入图片描述
没错,一下子多了95张表,初始化完成了。
** 注意,如果初始化库失败,请修改 **

在这里插入图片描述
修改这个文件的varchar(4000)为 varchar(255)
在这里插入图片描述

再来看一下控制台输出:
在这里插入图片描述
很好,服务器已经启动了。现在我们在浏览器访问一下 http://localhost:8081/auth
在这里插入图片描述
恭喜你服务启动成功了!


版权声明:本文为jkin_wan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。