saiku数据库的表和用户默认创建是在启动项目的时候,通过初始化 saiku-beans.xml 中的 h2database 这个 bean

执行org.saiku.service.Database类的init方法来初始化数据表和默认用户的。

具体修改如下:

1/修改web.xml 中 数据连接配置信息

将数据库链接修改为本地mysql配置信息:

  <context-param><param-name>db.url</param-name><param-value>jdbc:mysql://localhost:3306/saiku</param-value></context-param><context-param><param-name>db.user</param-name><param-value>root</param-value></context-param><context-param><param-name>db.password</param-name><param-value>root</param-value></context-param>

2/修改saiku-beans.xml中h2database配置信息

新增mysql数据源适配:

    <bean id="h2database" class="org.saiku.database.Database" init-method="init"><property name="datasourceManager" ref="repositoryDsManager"/><property name="datasourcetype" value="mysql" /></bean>

3/修改Database中获取的数据源为mysql

修改Database类:

private String datasourcetype = "mysql";

private void initDB() {String url = servletContext.getInitParameter("db.url");String user = servletContext.getInitParameter("db.user");String pword = servletContext.getInitParameter("db.password");if (this.datasourcetype.equals("mysql")) {ds = new MysqlDataSource();((MysqlDataSource) ds).setUrl(url);((MysqlDataSource) ds).setUser(user);((MysqlDataSource) ds).setPassword(pword);} else if (this.datasourcetype.equals("h2")) {ds = new JdbcDataSource();((JdbcDataSource) ds).setUrl(url);((JdbcDataSource) ds).setUser(user);((JdbcDataSource) ds).setPassword(pword);}}

4/因为h2建表sql和mysql的还是有差异的,所以将创建表和用户信息的代码替换如下:

mysql数据表和用户的创建代码为:

    private void loadUsers() throws SQLException {Connection c = ds.getConnection();Statement statement = c.createStatement();statement.execute(" CREATE TABLE IF NOT EXISTS log ( time  TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, log  TEXT); ");statement.execute(" CREATE TABLE IF NOT EXISTS users(user_id INT(11) NOT NULL AUTO_INCREMENT, " + " username VARCHAR(45) NOT NULL UNIQUE, password VARCHAR(100) NOT NULL, email VARCHAR(100), " + " enabled TINYINT NOT NULL DEFAULT 1, PRIMARY KEY(user_id)); ");statement.execute(" CREATE TABLE IF NOT EXISTS user_roles ( " + " user_role_id INT(11) NOT NULL AUTO_INCREMENT,username VARCHAR(45), "  + " user_id INT(11) NOT NULL REFERENCES users(user_id), " + " ROLE VARCHAR(45) NOT NULL, " + " PRIMARY KEY (user_role_id)); ");ResultSet result = statement.executeQuery("select count(*) as c from log where log = 'insert users'");result.next();if (result.getInt("c") == 0) {statement.execute("INSERT INTO users (username,password,email, enabled) VALUES ('admin','admin', 'test@admin.com',TRUE);");statement.execute("INSERT INTO users (username,password,enabled) VALUES ('smith','smith', TRUE);");statement.execute("INSERT INTO user_roles (user_id, username, ROLE) VALUES (1, 'admin', 'ROLE_USER');");statement.execute("INSERT INTO user_roles (user_id, username, ROLE) VALUES (1, 'admin', 'ROLE_ADMIN');");statement.execute("INSERT INTO user_roles (user_id, username, ROLE) VALUES (2, 'smith', 'ROLE_USER');");statement.execute("INSERT INTO log (log) VALUES('insert users');");}
String encrypt = servletContext.getInitParameter("db.encryptpassword");if (encrypt.equals("true") && !checkUpdatedEncyption()) {updateForEncyption();}}public boolean checkUpdatedEncyption() throws SQLException{Connection c = ds.getConnection();Statement statement = c.createStatement();ResultSet result = statement.executeQuery("select count(*) as c from log where log = 'update passwords'");result.next();return result.getInt("c") != 0;}public void updateForEncyption() throws SQLException {Connection c = ds.getConnection();Statement statement = c.createStatement();statement.execute("ALTER TABLE users MODIFY COLUMN PASSWORD VARCHAR(100) DEFAULT NULL");ResultSet result = statement.executeQuery("select username, password from users");while (result.next()) {statement = c.createStatement();String pword = result.getString("password");String hashedPassword = passwordEncoder.encode(pword);String sql = "UPDATE users " + "SET password = '" + hashedPassword+ "' WHERE username = '" + result.getString("username")+ "'";statement.executeUpdate(sql);}statement = c.createStatement();statement.execute("INSERT INTO log (log) VALUES('update passwords');");}

以上的信息修改完毕后,在本地mysql创建url中指定的database->saikuBase,此时db中无任何表

运行saiku项目成功后,刷新db,可以看见db中多出了三张表user/user_roles/log,说明初始化表和默认数据已经成功。

但是,此时只是创建了表结构和默认的登陆账户,并没有修改登录的用户认证数据源。

当我们使用admin登陆时还是会访问到jdbc中配置的h2数据库数据源。

其实这时候还是通过访问h2内嵌数据库的db文件登陆的,在管理端新建的用户也会保存在h2数据源中,mysql数据源中查询不到新建的用户

所以,接下来要修改认证数据源为本地的mysql

5/修改用户认证数据源

将 bean id 为 datasource 的 数据源的配置信息改为我们本地mysql的配置信息,重新部署服务并启动

这时,我们在管理端创建一个用户saiku,点击保存。

查看本地mysql数据库的user表,能看见saiku已经存在user表中了,并且使用saiku用户登录也能登录成功。

将*security-jdbc.xml 中的配置信息改成mysql的即可

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >  <property name="driverClassName" value="mysql的驱动"/>  <property name="url" value="mysql的url"/>  <property name="username" value="账户名"/>  <property name="password" value="密码"/>
</bean>

至此就完成了h2数据库迁移到本地mysql的操作了

原文地址:http://www.cnblogs.com/avivaye/p/4881106.html#3442020

[saiku] 将saiku自带的H2嵌入式数据库迁移到本地mysql数据库相关推荐

  1. h2 迁移到 mysql_[saiku] 将saiku自带的H2嵌入式数据库迁移到本地mysql数据库

    saiku数据库的表和用户默认创建是在启动项目的时候,通过初始化 saiku-beans.xml 中的 h2database 这个 bean 执行org.saiku.service.Database类 ...

  2. django 不用自带的mysql_python笔记二 django自带后台管理系统、模版渲染以及使用mysql数据库...

    上一篇简单的说了一下整体项目的搭建,但是这还不够,一般完整的项目还要有很多东西,比如前端页面有一些数据不是固定的,需要前后端交互,还需要后台管理系统,有可能我还不想用自带的sqlite,想用mysql ...

  3. 使用MySQL自带工具mysqlhotcopy快速备份MyISAM引擎的MySQL数据库

    2019独角兽企业重金招聘Python工程师标准>>> mysqlhotcopy是一个Perl脚本,最初由Tim Bunce编写并提供.它使用LOCK TABLES.FLUSH TA ...

  4. Gerrit 服务搭建和升级详解(包括 H2 数据库迁移 MySQL 步骤)

    推荐阅读 Helm3(K8S 资源对象管理工具)视频教程:https://edu.csdn.net/course/detail/32506 Helm3(K8S 资源对象管理工具)博客专栏:https: ...

  5. MySQL 系统自带的数据库有哪些?每个数据库的作用是什么?

    /********************************FileName: MySQL自带数据库说明*Author: weibo*Version: v1.0*Date: 2016.5.12* ...

  6. MySQL自带的数据库界面化工具MySQL Workbench的安装

    活动地址:CSDN21天学习挑战赛   目录 MySQL自带的数据库界面化工具MySQL Workbench的安装 安装MySQL Workbench ​找到mysql安装包 在选择产品页面选择MyS ...

  7. saiku添加mysql数据源_Saiku连接mysql数据库(二)

    Saiku连接Mysql数据库展示数据 前提:Saiku已安装好,mysql已安装好 1.添加Saiku的数据库驱动: mysql-connect-java-5.1.17.jar 下载相应的数据库驱动 ...

  8. 关于java嵌入式数据库的选择,强烈建议H2 嵌入式数据库

    2019独角兽企业重金招聘Python工程师标准>>> 不听红薯言,吃亏在眼前. 先发表个人意见,Derby是垃圾,H2王道. 这段时间开发movingLife合租记账软件过程中,开 ...

  9. saiku 连接 MySQL_Saiku连接mysql数据库(二)

    Saiku连接Mysql数据库展示数据 参考链接:https://www.cnblogs.com/shirui/p/8573491.html 前提:Saiku已安装好,mysql已安装好 1.添加Sa ...

  10. 嵌入式 db2 java_关于java嵌入式数据库的选择,强烈建议H2 嵌入式数据库

    不听红薯言,吃亏在眼前. 先发表个人意见,Derby是垃圾,H2王道. 这段时间开发movingLife合租记账软件过程中,开始是在MYSQL上做开发,要发布的时候,一直想找个好点的嵌入式数据库.最初 ...

最新文章

  1. 山东大学教授建议:让博士生先回学校
  2. 【问题】14500充电锂电池电量问题及测试方案
  3. Web文件上传方法总结大全
  4. com.sap.ui5.resource.ResourceServlet的工作原理介绍
  5. 搜索公网上所有使用了SAP BSP技术的网站
  6. 前凸后翘的步进电机调速算法~
  7. java string查找_查找输出程序(Java String类)
  8. Python tarfile模块(压缩解压tar)
  9. 动态规划 —— 状压 DP
  10. Android开发在路上:少去踩坑,多走捷径
  11. python hook_五分钟内用Python实现GitHook
  12. 深度学习TF—11.Auto-Encoders自编码器
  13. 用python做数学题_「文山玩Python做测试」用python做算术题,很简单
  14. linux ora03113,ora-03113 问题解决
  15. html打包成apk wex5,WeX5打包部署学习
  16. 初探NIVIDIA GPU+CUDA+pyTorch
  17. winedit 永久试用的办法
  18. win7亮度怎么调_win7设置双屏显示的方法
  19. 为什么我说,卖货直播平台开发的定位可以从这方面入手
  20. fastjson 属性大写问题

热门文章

  1. Atitit 提升稳定性 错误处理 全局错误捕获 1.2. 可以uncaughtException来全局捕获未捕获的Error, 使用uncaughtException 2 1.2.1. 使用 t
  2. Atitit 图像指纹识别匹配sift算法 atlks总结
  3. org.xml.sax.SAXParseException: 缺少文件根组件。
  4. C#:System.Data.SQLite数据库介绍
  5. 开源界也要封闭,OpenSource能否继续无国界 | 凌云时刻
  6. 一文读懂数据湖 | 凌云时刻
  7. ZStack GPU解决方案
  8. Linux宝库名人轶事栏目 | 云与我
  9. php7 imagick扩展,php7如何安装imagick扩展
  10. 【手写字母识别】基于matlab GUI ELMAN+BP神经网络手写大写字母(A-O)识别【含Matlab源码 785期】