- 通过在tomcat的server.xml中配置全局数据源,从而实现Liferay 和 XXX-portlet数据源统一,以避免建立重复的数据库连接而耗费资源,主要考虑out of memory 问题
- 在tomcat_home/common下放入jdbc的驱动程序
- server.xml配置
- 全局数据库连接池
- 通过管理界面配置连接池,或者直接在tomcat/conf/server.xml的GlobalNamingResources中增加
<Resource
name="jdbc/mydb"
type="javax.sql.DataSource"
password="mypwd"
driverClassName="xxx"
maxIdle="2"
maxWait="5000"
validationQuery="select 1"
username="xxx"
url="jdbc:..."
maxActive="4"
/>
在tomcat/webapps/myapp/META-INF/context.xml的Context中增加:
<ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>
这样就可以了。
- 参数说明:
driveClassName:JDBC驱动类的完整的名称;
maxActive:同时能够从连接池中被分配的可用实例的最大数;
maxIdle:可以同时闲置在连接池中的连接的最大数;
maxWait:最大超时时间,以毫秒计;
password:用户密码;
url:到JDBC的URL连接;
user:用户名称;
validationQuery:用来查询池中空闲的连接。
2. 具体设置(采用了全局设置数据源的方式):
- 对Liferay的ROOT.xml修改如下:把数据源部分删除,并拷贝到server.xml的
<GlobalNamingResources>
<!-- Test entry for demonstration purposes -->
<Environment name="simpleValue" type="java.lang.Integer" value="30"/>
<!-- Editable user database that can also be used by
UserDatabaseRealm to authenticate users -->
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
<Resource
name="jdbc/LiferayPool"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://xxx/lxxx"
username="xxxx"
password="xxxx"
maxActive="100"
maxIdle="30"
maxWait="10000"
/>
</GlobalNamingResources>
- conf目录下的context.xml文件内容如下:
<!-- The contents of this file will be loaded for each web application -->
<Context>
<ResourceLink global="jdbc/LiferayPool" name="jdbc/LiferayPool" type="javax.sql.DataSource"/>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
</Context>
经过以上步骤,凡是需要全局数据连接池的Portlet等应用都可以直接引用,而不必重新建立数据库连接池