资源环境
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
恭喜你服务启动成功了!