java - 如何链接 c3p0 池 identityTokens 和 JDBC 池名称
问题描述
首先,请记住,我是监控管理员而不是 Java 开发人员。
我想监控c3p0池的一些属性值,我发现这样的池有一个唯一identity Token
性,它由一个字母数字字符串和一个用管道字符连接的十六进制字符串组成,例如:
2rxggs9vtsz4i48lg1tk|665e33d4
context.xml
但是在 tomcat 服务器的文件中找到的 JDBC 池只显示标准名称:
<Resource name="jdbc/EXAMPLE"
jdbcUrl="jdbc:oracle:thin:@oracle:1521:PRExxx" user="EXAMPLE"
password="my34xXple" auth="Container" description="DB Connection"
driverClass="oracle.jdbc.driver.OracleDriver" maxPoolSize="50"
minPoolSize="2" maxIdleTime="30" checkoutTimeout="2000"
acquireIncrement="1" maxConnectionAge="3600"
factory="org.apache.naming.factory.BeanFactory" type="com.mchange.v2.c3p0.ComboPooledDataSource"
preferredTestQuery="SELECT 1 FROM dual" />
我使用 JAR 通过 JMX 连接查询正在运行的 Java 进程的 MBean。这里Catalina:type=Resource
是:
Catalina:type=Resource,resourcetype=Context,path=/myapp,host=localhost,class=com.mchange.v2.c3p0.ComboPooledDataSource,name="jdbc/EXAMPLE"/scope (String) = Shareable
Catalina:type=Resource,resourcetype=Context,path=/myapp,host=localhost,class=com.mchange.v2.c3p0.ComboPooledDataSource,name="jdbc/EXAMPLE"/description (String) = DB Connection
Catalina:type=Resource,resourcetype=Context,path=/myapp,host=localhost,class=com.mchange.v2.c3p0.ComboPooledDataSource,name="jdbc/EXAMPLE"/name (String) = jdbc/EXAMPLE
Catalina:type=Resource,resourcetype=Context,path=/myapp,host=localhost,class=com.mchange.v2.c3p0.ComboPooledDataSource,name="jdbc/EXAMPLE"/type (String) = com.mchange.v2.c3p0.ComboPooledDataSource
这里是com.mchange.v2.c3p0
那些
com.mchange.v2.c3p0:type=C3P0Registry/AllIdentityTokenCount (Integer) = 15
com.mchange.v2.c3p0:type=C3P0Registry/AllIdentityTokenizedCount (Integer) = 15
com.mchange.v2.c3p0:type=C3P0Registry/AllPooledDataSourcesCount (Integer) = 5
com.mchange.v2.c3p0:type=PooledDataSource[2rxggs9vtsz4i48lg1tk|665e33d4]/dataSourceName (String) = 2rxggs9vtsz4i48lg1tk|665e33d4
com.mchange.v2.c3p0:type=PooledDataSource[2rxggs9vtsz4i48lg1tk|665e33d4]/threadPoolNumIdleThreads (Integer) = 3
com.mchange.v2.c3p0:type=PooledDataSource[2rxggs9vtsz4i48lg1tk|665e33d4]/acquireRetryAttempts (Integer) = 30
com.mchange.v2.c3p0:type=PooledDataSource[2rxggs9vtsz4i48lg1tk|665e33d4]/autoCommitOnClose (Boolean) = false
com.mchange.v2.c3p0:type=PooledDataSource[2rxggs9vtsz4i48lg1tk|665e33d4]/identityToken (String) = 2rxggs9vtsz4i48lg1tk|665e33d4
这些是我的问题:
如何链接身份令牌和资源池名称?
在我的示例应用程序中,文件中定义了 5 个资源,
context.xml
但有 15 个 c3p0 池。这也可以在C3P0Registry/AllIdentityTokenizedCount
和C3P0Registry/AllPooledDataSourcesCount
属性中找到。不是有一对一的关系吗?身份令牌是如何制作的?它们是随机的吗?这两个字符串是什么意思?它们是否与流程或机器价值相关联?
谢谢
解决方案
该
<Resource name="...">
名称是一个 jndi 名称,与 JMX 名称没有必要的连接。如果您希望有一个连接,请将dataSourceName
您设置的所有其他属性设置为一致的名称。PooledDataSources
和身份令牌/令牌化之间没有一对一的关系。一个典型PooledDataSource
可能包含三个身份标记元素。但是,每个PooledDataSource
.身份令牌本质上是随机值,但具有一些基于主机的确定性部分,旨在确保不会发生冲突。(Java 现在内置了对 UUID 的支持,但在编写 c3p0 时没有。)
您可能希望不必在管理 c3p0 时处理身份令牌DataSource
。只要确保您DataSource
的 s 每个都有唯一dataSourceName
的 s 集,您就可以从 JMX 名称中消除身份令牌,并拥有稳定、可重现的 JMX 名称。请参阅通过 JMX 配置和管理 c3p0。
推荐阅读
- python - 如何修复“WebSocket 握手期间出错:意外的响应代码:400”错误
- reactjs - 在前端处理后端错误状态
- computer-science - 数据是什么意思?- SICP
- angular - 如何在不刷新角度 7,8 的情况下重新加载整个页面?
- r - 将列表中每个数据框的列重命名为其数据框名称的函数
- office365 - Microsoft Graph People API 中 PersonType 的可能值
- python - 狮身人面像 autodoc 不导入 module.submodule 但导入模块
- r - 如何在for循环中进行rbind?
- javascript - 第一个输入/文本区域的动态焦点在 Firefox 中不起作用
- git - 如果没有要提交的内容,Git 提交和推送将失败