Liferay 6开发学习(二十六):数据库连接相关问题

2014年01月15日 Liferay 评论 4 条 阅读 10,780 views 次

Liferay中怎么更换数据库?

常碰到有人问Liferay怎么更换数据库,怎么修改数据库连接。在我们第一次启动Liferay的时候,会有一个配置向导,在此配置向导我们可以选择数据库,并配置数据库连接信息。如果我现在在向导里面选择了PostgreSQL数据库,但是我后面想要变更为Oracle怎么办呢?

在执行完配置向导后会在Liferay的目录下面生成一个文件portal-setup-wizard.properties。我们打开此文件,可以在里面看到如下的数据库连接信息。

jdbc.default.driverClassName=org.postgresql.Driver
jdbc.default.url=jdbc:postgresql://localhost:5432/liferay62
jdbc.default.username=postgres
jdbc.default.password=postgres

这几行我们一看就知道是数据库的连接信息了,配置的为JDBC连接的驱动名称、JDBC连接串、数据库的用户名、数据库的密码等几个信息,我们需要要更换数据库,在这里将数据库修改为我们想要的即可。

为什么看到有些教程或文章说是在ROOT/WEB-INF/classes/portal-ext.properties文件里面修改呢?请先参看《Liferay中Portal.properties常用配置参数》这篇博客的前面一小部分,在这两个文件里面修改都是可以的,看自己喜欢了。

Liferay用什么做的数据库连接?

Liferay底层是使用hibernate,Liferay中的数据库操作均是通过Hibernate来进行的。默认是使用C3PO这个连接池。我们也可以通过在portla-ext.properties、portal-setup-wizard.properties或其他的*.properties文件进行连接池的调整。

portal-setup-wizard.properties

jdbc.default.liferay.pool.provider=c3po
 #jdbc.default.liferay.pool.provider=dbcp
 #jdbc.default.liferay.pool.provider=tomcat

默认的配置如上,可以根据情况调整为我们需要的连接池。同时还有许多的关于连接池的配置参数如下(可以在源码的Portal.properties文件中找到)

jdbc.default.acquireIncrement=5
 jdbc.default.acquireRetryAttempts=3
 jdbc.default.acquireRetryDelay=1000
 jdbc.default.connectionCustomizerClassName=com.liferay.portal.dao.jdbc.pool.c3p0.PortalConnectionCustomizer
 jdbc.default.idleConnectionTestPeriod=60
 jdbc.default.maxIdleTime=3600
 jdbc.default.maxPoolSize=100
 jdbc.default.minPoolSize=10
 jdbc.default.numHelperThreads=10
 #jdbc.default.transactionIsolation=1
#jdbc.default.defaultTransactionIsolation=READ_UNCOMMITTED
 jdbc.default.maxActive=100
 jdbc.default.minIdle=10
 jdbc.default.removeAbandonedTimeout=3600
jdbc.default.jdbcInterceptors=org.apache.tomcat.jdbc.pool.interceptor.ConnectionState
 jdbc.default.jmxEnabled=true
 jdbc.default.fairQueue=true
 jdbc.default.timeBetweenEvictionRunsMillis=30000
 jdbc.default.useEquals=false

我们可以根据自己的实际情况进行以上参数的调整与优化。Liferay底层是使用的Hibernate,hibernate的相关配置也是可以使用的,比如我们想让在控制台中打印出执行的SQL语句。只需要配置如下参数:

hibernate.show_sql=true

默认时为false。更多的hibernate默认配置信息,可以在portal.properties里面搜索hibernate.找到。

让Liferay使用中间件的数据源

有时候我们并不想使用JDBC连接池来管理我们的数据库连接,想使用中间件的数据源,比如Tomcat的数据源,Weblogic的数据源。此时我们只需要在portla-ext.properties或portal-setup-wizard.properties中添加如下配置

jdbc.default.jndi.name=jdbc/LiferayPool

这样我们就是让Liferay去中间件的数据源中去寻找数据库连接。当然数据源的JNDI名称必须配置成jdbc/LiferayPool,此时前面的那些JDBC连接的配置就是不需要的了。此时可以删除。

Liferay支持哪些数据库?

有人可能会想,Liferay底层是使用的Hibernate,那是不是Hibernate支持的数据库Liferay都支持呢?理论上应该是这样的,但实际上并非如此,Liferay支持的数据库如下:

DB2、Derby、Hypersonic(HSQL)、Ingres、Mysql、Oracle、P6Spy、PostgreSQL、SQL Server、Sybase等

其他的数据库默认不提供直接支持,只要是Hibernate支持的数据库,如果要让Liferay支持,需要对源码进行一些修改,修改起来并不算复杂。具体的可以参考一下Liferay源码目录下的Portal-impl/src/com/liferay/portal/dao/db下面的面的相关类。

怎么在代码中获取JDBC连接串Connection

有时候可能出于某此原因,我们就是要获取JDBC的连接Connection,怎么办呢?使用普通的JDBC根据配置的参数读取肯定也是可行的,但Liferay已经给我们提供了这样的一个API:

DataAccess.getConnection()。

数据库连接的一些其他信息,如当前的数据库类似等,可以通过DBFactoryUtil.getDB()再获取相关方法来得到。

用户头像

4 条留言  访客:3 条  博主:1 条

  1. 谢谢 冷大的 无私奉献……….

  2. 如果使用多数据源,该怎么做的呢,还有如果使用portlet 工程,是不是portlet工程共享了,源码中的数据源呢

    • avatar 胡启稳

      是的默认是和源码共用一个数据库,一般其实也建议这样做,如果要分开,看采用什么样的开发模式了,如果是采用Service builder里面,修改相应的配置文件,如果不是,那就和普通的web工程连接数据库是一样的,JDBC或其他连接池都行

  3. 博主您好!
    我是liferay新手,最近被一个问题缠绕了很久,希望您帮我解答一下。
    我们正在做的一个网站的LOGO和sign-in按钮重叠了,我想把sign-in按钮挪下位置,但是找不到在哪里,您能告诉我怎么改吗?
    非常感谢!

给我留言

您必须 登录 才能发表留言!

Copyright © IT人生录 保留所有权利.   主题设计 知更鸟 滇ICP备16001547号-1

用户登录

分享到: