我有两个在Tomcat(6.0)下运行的Java Web应用程序,并使用Tomcat& c3p0连接池作为Tomcat Data-source。如果我为两个不同的Oracle Connection定义了两个Resources(server.xml),并使用c3p0作为连接池,我的应用程序使用它,我的问题是:
<Resource
name="jdbc/OracleDB"
auth="Container"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
driverClass="oracle.jdbc.OracleDriver"
factory="xxx"
jdbcUrl="jdbc:oracle:thin:@(DESCRIPTION= (LOAD_BALANCE=on)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx) (PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=xxx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=xxx)))"
maxPoolSize="10"
minPoolSize="0"
maxIdleTime="60"
maxConnectionAge="600"
acquireIncrement="1"
user="xxx="
password="xxx=" />
<Resource name="jdbc/xxx2DB"
auth="Container"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
driverClass="oracle.jdbc.OracleDriver"
factory="xxx"
jdbcUrl="jdbc:oracle:thin:@xxx:1527:xxx"
maxPoolSize="10"
minPoolSize="0"
acquireIncrement="1"
maxIdleTime="60"
maxConnectionAge="600"
user="xxx"
password="xxx"
/>
Q1 即可。 server.xml中的以下内容是否表示Tomcat中存在两个连接池 内存到两个不同的Oracle实例?
Q2 即可。我是否必须指定任何配置属性(参考:http://www.mchange.com/projects/c3p0/index.html#configuration_properties),在我的情况下,我有一个连接到Oracle RAC实例,另一个连接到单个Oracle实例。我应该考虑一下 企业环境中的任何其他配置属性?
Q3 即可。以下设置是否足够有效?
Q4 即可。如何启用c3p0日志记录(我现在只有Tomcat lib中的jar和上面的设置?
有什么建议吗?
提前致谢。
答案 0 :(得分:2)
A1:是的。
A2 :不确定我的问题是否正确,但您应该只指定默认值对您没有意义的连接属性。最好在单独的c3p0.properties
文件中执行此操作,并指定哪个属性适用于哪个连接。回答“其他配置属性”问题需要了解您的环境的具体情况。我建议查看idle_test_period
设置,因为这些设置通常可能有错误的默认设置(确保这与DB端的相关设置相匹配)。
A3:是的,这看起来还不错。
A4:您需要在c3p0.properties
中指定日志记录首选项,或者将其动态定义为系统属性。请参阅this chapter of the c3p0 manual。
答案 1 :(得分:2)
A1:是
A2:乍一看是正确的。如果你要使用分布式事务,你需要小心RAC - 那么我相信你必须指定其他属性。
A3:看起来不错,但根据您的任务和估算的负载,我会使用maxIdleTime,acquireIncrement和maxPoolSize。例如,在60秒不活动后使用当前设置,您的连接将被关闭,因此在60秒后请求连接的下一个操作将在等待新连接打开时受到惩罚。
A4: http://www.mchange.com/projects/c3p0/index.html#configuring_logging
建议:
Tomcat 7中有一个better connection pool,也可以在Tomcat 6中使用。考虑一下,特别是如果你需要高性能
考虑connection testing,这样当数据库连接中断时,您的应用程序不会获得(或者不常见)异常
在您的应用程序与Tomcat中打包连接池及其配置可能更为可取。这样应用程序WAR将是自包含的,因此可以将其放入tomcat的wabapps目录中。