常碰到有人问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底层是使用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.找到。
有时候我们并不想使用JDBC连接池来管理我们的数据库连接,想使用中间件的数据源,比如Tomcat的数据源,Weblogic的数据源。此时我们只需要在portla-ext.properties或portal-setup-wizard.properties中添加如下配置
jdbc.default.jndi.name=jdbc/LiferayPool
这样我们就是让Liferay去中间件的数据源中去寻找数据库连接。当然数据源的JNDI名称必须配置成jdbc/LiferayPool,此时前面的那些JDBC连接的配置就是不需要的了。此时可以删除。
有人可能会想,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根据配置的参数读取肯定也是可行的,但Liferay已经给我们提供了这样的一个API:
DataAccess.getConnection()。
数据库连接的一些其他信息,如当前的数据库类似等,可以通过DBFactoryUtil.getDB()再获取相关方法来得到。
在Intellij IDEA中的注释模板中的${user}名称是根据当前操作系统的登录名来取的,有时候登录名称和我们实际的user名称并不相同。
修改方法如下:
方法一:可以在settings的file and code template中进行修改。但是这个只能修改指定的模板。
方法二:在IDE启动的时候,重写user的变量名称。
找到IDE的安装目录/bin下面的idea.exe.vmoptions 和idea64.exe.vmoptions这两个文件,在里面添加
-Duser.name=huqiwen(在些修改为自己想要的名称)
然后重启IDEA。
OpenLDAP是轻型目录访问协议(Lightweight Directory Access Protocol,LDAP)的自由和开源的实现,在其OpenLDAP许可证下发行,并已经被包含在众多流行的Linux发行版中。
它主要包括下述4个部分:
1. slapd - 独立LDAP守护服务
2. slurpd - 独立的LDAP更新复制守护服务
3. 实现LDAP协议的库
4. 工具软件和示例客户端
下载安装 openldap for windows
下载地址:
http://www.userbooster.de/downloadablecontent/freeware/OpenldapforWindows.exe
点击yes
点击Next,Next。
默认全选即可。
可以使用默认配置,一直点击Next,最后一步使用默认的BDB数据库即可。安装完成点击Close退出.
注:Database backend(后端数据库)
§ BDB--Berkeley DB是历史悠久的嵌入式数据库系统,主要应用在UNIX/LINUX操作系统上,其设计思想是简单、小巧、可靠、高性能。
§ MDB-- Memory Mapped Database。
§ LDAP—使用代理LDAP服务。
§ LDIF—使用LDFI文件存储。
§ SQL SERVER—微软SQL SERVER数据库。
打开安装目录,如果你设置安装目录为D:\OpenLDAP,则直接在这个目录下找到slapd.conf可以使用文本文档打开,修改
suffix "dc=huqiwen,dc=com"
rootdn "cn=Manager,dc=huqiwen,dc=com"
新建一个文件example.ldif添加一个节点目录信息
dn: ou=users,dc=huqiwen,dc=com
objectclass: organizationalUnit
ou: users
description: users information
添加的原因:在该节点下存储我们的用户名信息,注意前后都不能有空格,然后关闭openldap服务,在windows的服务里面找到openldap服务,将其关闭。
然后使用cmd命令行导入该文件,让文件目录转到安装根目录使用命令
slapadd -v -l ./example.ldif
完成后记得在服务里面重启OpenLDAP的服务。
dc:(Domain Component)域
ObjectClass:对象类(不同的对象类存在某些不同的属性,根据自己需要选择对象类)
dn:(Distinguished Name)节点绝对路径,例如:uid=admin,ou=users,dc=eruipan,dc=com
o:(Organizational)组织
ou:(Organizational Unit)组织单位
cn:(Common Name)通用名(继承自person对象的对象类必须有值的属性,否则无法创建)
sn:(surname)全名(继承自person对象的对象类必须有值的属性,否则无法创建)
其他需要用到的属性
mail:电子邮件
userpassword:用户密码
uid:唯一标识(如果使用uid验证)
1.1.4 LDAP管理工具Apache Directory Studio
LDAP的管理工具有许多,这里介绍一个,Apache Directory Studio 是一个 LDAP 的工具平台,用来连接到任何 LDAP 服务器并进行管理和开发工作。拥有LDAP浏览器、LDIF编辑器、嵌入式 ApacheDS、ACI编辑器等。
下载:
64位地址:
http://apache.fayea.com/apache-mirror//directory/studio/dist/2.0.0.v20130628/ApacheDirectoryStudio-win32-x86_64-2.0.0.v20130628.exe
32位的可以自行到https://directory.apache.org/studio/寻找下载。
打开下载好的安装文件,选择事先安装好的JRE目录(配置了JAVA环境变量会自动识别),选择安装路径等。
安装好后打开软件,在左下角connections框内修改初始连接信息,也可新建连接或者也可点击LDAP新建一个connection,修改连接属性:
Hostname:ladp服务器所在地址。本机可以localhost
Port:默认是10389根据自己实际端口修改,我这里改为389
Bind DN or user:这里填写管理员存储路径,对应于前面我们建立的内容。
Bind password:密码,默认为secret
在LDAO Browser框中点击DIT,再点击Root DSE出现上面这些信息表示连接成功。
添加组织信息:
鼠标移动至DIT选择Newà Context Entry
有两个选项一个是新建另一个是使用已经存在的组织当作生成模板。两者的区别在于第一个选项下一步需要自己选择对象类,第二个会套用选择模板的对象类。点击next
选择对象类,由于要生成组织,选择了比较通用的organizationalUnit,点击next。
该组织就建立好了。
鼠标移动至ou=users,dc=huqiwen,dc=com选择NewàNew Context Entry
同样有两个选项,根据自己实际情况,如果有模板就选择模板(已建立好的同类型的用户),没有就新建一个,在这里输入inet,选择inetOrgPerson会出现如下:
我们选择inetOrgPerson,选择什么对象类需要根据我们需要的属性来进行判定。
parent:这里是要选择父节点,我们使用的是刚才建立好的用户组织。
RDN:这里就是该节点的查询路径,我使用的是uid,值为huqiwen。查询该节点DN:uid=huqiwen,ou=ouers,dc=huqiwen,dc=com。左边的加号就不使用,使用后会使DN发生变化。
右上角的图标带个小加号可以让我们添加我们想要的属性,sn,cn这两个属性必须有值。我们添加一个userPassword属性。
点击Finish
Select hash method:可以选择加密方式。
使用同样的方法再添加一个mail属性,最终如下:
保存我们就建立了一个uid为huqiwen的用户。
对需要修改的组织或者用户进行双击。
红色的叉图标是删除属性,对需要的属性点击就可以修改,增加属性则点击蓝色横条带个小加号的图标。
在LDAP Browser框中右键,选择New Search
在search base框中录入你要查询的DN,这里我选择查询huqiwen,ou=users,dc=huqiwen,dc=com。
Searches中就会多了一个名为2014-04-17 15-58-16.这个就是我们刚才查询的查询名字,默认是本地时间。以后我们需要访问ou=users,dc=huqiwen,dc=com就不用再次查询,找到这个目录就可以看到。
对需要删除的组织或者用户右键选择delete Entry即可删除。