日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

如何监视Java EE数据源

發(fā)布時間:2023/12/3 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何监视Java EE数据源 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

介紹

FlexyPool是一個開放源代碼框架,可以監(jiān)視數(shù)據(jù)源連接的使用情況。 由于我們以前缺乏對供應連接池的支持,因此該工具是不必要的。

FlexyPool最初是為獨立環(huán)境設計的,并且DataSource代理配置是通過編程完成的。 使用Spring bean別名 ,我們甚至可以將已經(jīng)配置的DataSource替換為FlexyPool Metrics感知的代理替代方案。

Java EE支持

最近,有人問我如何支持Java EE環(huán)境,本著真正的開源精神,我接受了挑戰(zhàn)。 支持托管環(huán)境非常棘手,因為數(shù)據(jù)源已與應用程序邏輯完全分離,并且可以通過JNDI查找來使用。

一個缺點是我們不能使用自動池大小調(diào)整策略,因為大多數(shù)應用服務器返回自定義的DataSource實現(xiàn)(與其內(nèi)部JTA事務管理器解決方案緊密集成),因此無法訪問讀/寫連接池大小。

盡管DataSource可能無法調(diào)整,但我們至少可以監(jiān)視連接使用情況,這也足以支持Java EE環(huán)境。

添加聲明性配置

因為我們在托管環(huán)境中運行,所以我們無法再以編程方式配置DataSource,因此我們需要使用聲明性配置支持。

默認情況下,FlexyPool在當前的類路徑中查找flexy-pool.properties文件。 可以使用flexy.pool.properties.path系統(tǒng)屬性來自定義位置,該屬性可以是:

  • URL(例如文件:/ D:/wrk/vladmihalcea/flexy-pool/flexy-pool-core/target/test-classes/flexy-pool.properties )
  • 文件系統(tǒng)路徑(例如D:\ wrk \ vladmihalcea \ flexy-pool \ flexy-pool-core \ target \ test-classes \ flexy-pool.properties )
  • 類路徑嵌套路徑(例如nested / fp.properties )

該屬性文件可能包含以下配置選項:

參數(shù)名稱 描述
flexy.pool.data.source.unique.name 每個FlexyPool實例都需要一個唯一的名稱,以便JMX域不會沖突
flexy.pool.data.source.jndi.name JNDI數(shù)據(jù)源位置
flexy.pool.data.source.jndi.lazy.lookup 是否延遲查找數(shù)據(jù)源(當實例化FlexyPoolDataSource時目標數(shù)據(jù)源不可用時很有用)
flexy.pool.data.source.class.name 可以使用此類名稱在運行時實例化數(shù)據(jù)源
flexy.pool.data.source.property。* 如果在運行時實例化了DataSource,則每個flexy.pool.data.source.property。$ {java-bean-property}將設置新實例化的DataSource的java-bean-property(例如flexy.pool.data.source。 property.user = sa)
flexy.pool.adapter.factory 如果數(shù)據(jù)源支持動態(tài)調(diào)整大小,則指定PoolAdaptorFactory。 默認情況下,它使用不支持自動縮放的通用DataSourcePoolAdapter
flexy.pool.metrics.factory 指定用于創(chuàng)建指標的MetricsFactory
flexy.pool.metrics.reporter.log.millis 指定指標日志報告間隔
flexy.pool.metrics.reporter.jmx.enable 指定是否應啟用JMX報告
flexy.pool.metrics.reporter.jmx.auto.start 指定是否應自動啟動jmx服務(在Java EE環(huán)境中將其設置為true)
flexy.pool.strategies.factory.resolver 指定一個ConnectionAcquiringStrategyFactoryResolver類,該類用于獲取ConnectionAcquiringStrategyFactory對象的列表。 僅當PoolAdaptor支持訪問數(shù)據(jù)源池大小時,才應設置此值。

休眠連接提供者

大多數(shù)Java EE應用程序已經(jīng)在使用JPA ,對于碰巧正在使用Hibernate的用戶,我們可以使用hibernate.connection.provider_class配置屬性來注入我們的代理數(shù)據(jù)源。

Hibernate提供了許多內(nèi)置的擴展點,并且連接管理是完全可配置的。 通過提供一個自定義的ConnectionProvider,我們可以用FlexyPool代理替換原始的DataSource。

我們要做的就是將以下屬性添加到我們的persistence.xml文件中:

<property name="hibernate.connection.provider_class"value="com.vladmihalcea.flexypool.adaptor.FlexyPoolHibernateConnectionProvider"/>

在后臺,此提供程序將配置FlexyPoolDataSource并在需要新連接時使用它:

private FlexyPoolDataSource<DataSource> flexyPoolDataSource;@Override public void configure(Map props) {super.configure(props);LOGGER.debug("Hibernate switched to using FlexyPoolDataSource");flexyPoolDataSource = new FlexyPoolDataSource<DataSource>(getDataSource()); }@Override public Connection getConnection() throws SQLException {return flexyPoolDataSource.getConnection(); }

在運行時實例化實際的數(shù)據(jù)源

如果您不使用Hibernate,則需要在EntityManagerFactory完成引導之前準備好FlexyPoolDataSource:

<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/persistencehttp://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"><persistence-unit name="persistenceUnit" transaction-type="JTA"><provider>org.hibernate.jpa.HibernatePersistenceProvider</provider><jta-data-source>java:global/jdbc/flexypool</jta-data-source><properties><property name="hibernate.hbm2ddl.auto" value="update"/><property name="hibernate.show_sql" value="true"/><property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/><property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.SunOneJtaPlatform"/></properties></persistence-unit> </persistence>

在生產(chǎn)Java EE環(huán)境中,我們使用特定于應用程序服務器的DataSource配置,為簡單起見,我將使用DataSourceDefinition批注配置FlexyPooldataSource:

@DataSourceDefinition(name = "java:global/jdbc/flexypool",className = "com.vladmihalcea.flexypool.FlexyPoolDataSource") @Stateless public class FlexyPoolDataSourceConfiguration {}

現(xiàn)在,我們需要將實際的DataSource屬性傳遞給FlexyPool,這是通過flexy-pool.properties配置文件完成的:

flexy.pool.data.source.unique.name=unique-name flexy.pool.data.source.class.name=org.hsqldb.jdbc.JDBCDataSource flexy.pool.data.source.property.user=sa flexy.pool.data.source.property.password= flexy.pool.data.source.property.url=jdbc:hsqldb:mem:test flexy.pool.metrics.reporter.jmx.auto.start=true

實際的數(shù)據(jù)源將在啟動時由FlexyPoolDataSource創(chuàng)建。

從JNDI找到實際的數(shù)據(jù)源

如果實際的數(shù)據(jù)源已經(jīng)由Application Server配置,我們可以指示FlexyPool從JNDI獲取它。 假設我們具有以下DataSource配置:

@DataSourceDefinition(name = "java:global/jdbc/default",className = "org.hsqldb.jdbc.JDBCDataSource",url = "jdbc:hsqldb:mem:test",initialPoolSize = 3,maxPoolSize = 5 ) @Stateless public class DefaultDataSourceConfiguration {}

要代理JNDI數(shù)據(jù)源,我們需要像這樣配置FlexyPool:

flexy.pool.data.source.unique.name=unique-name flexy.pool.data.source.jndi.name=java:global/jdbc/default flexy.pool.metrics.reporter.jmx.auto.start=true

FlexyPoolDataSource與實際的DataSource一起定義:

@DataSourceDefinition(name = "java:global/jdbc/flexypool",className = "com.vladmihalcea.flexypool.FlexyPoolDataSource") @Stateless public class FlexyPoolDataSourceConfiguration {}

JPA必須獲取FlexyPoolDataSource而不是實際的:

<jta-data-source>java:global/jdbc/flexypool</jta-data-source>

在TomEE中 ,因為未延遲實例化DataSourceDefinitions,所以在處理FlexyPoolDataSource定義時,實際的DataSource在JNDI注冊表中可能不可用。

為此,我們需要指示FlexyPool依賴JNDI查找,直到實際請求了DataSource為止:

flexy.pool.data.source.jndi.lazy.lookup=true

結論

我上一次使用Java EE是在2008年,一個使用Java EE 1.4和EJB 2.1的項目。 在專門使用Spring 7年之后,我對Java EE的使用感到驚訝。 Arquillian絕對是我最喜歡的插件,因為集成測試在企業(yè)應用程序中至關重要。 CDI既簡單又強大,我很高興對依賴注入進行了標準化。

但是Java EE平臺的最佳資產(chǎn)是社區(qū)本身。 Java EE具有非常強大的社區(qū),愿意在需要時為您提供幫助。 我要感謝Steve Millidge(Payara和C2B2的創(chuàng)始人)為我提供了一些有關設計FlexyPool Java EE集成的重要技巧, Alex Soto , Antonio Goncalves , Markus Eisele以及我感興趣的所有其他Java EE成員Twitter上的對話。

翻譯自: https://www.javacodegeeks.com/2015/06/how-to-monitor-a-java-ee-datasource.html

總結

以上是生活随笔為你收集整理的如何监视Java EE数据源的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。