2017-04-05 121 views
2

我試圖使用Quartz.NETReliableDbProvider來允許Quartz連接到我們的Azure SQL數據庫,而不使用transient connection issues在自定義連接提供程序中使用Quartz.NET

下面是我使用的配置(重新格式化爲可讀性;其實我在NameValueCollection初始化它們...):

quartz.jobStore.dirverDelegateType:    Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz 
quartz.jobStore.tablePrefix:      QRTZ_ 
quartz.dataSource.default.connectionString:  Data Source=(localdb)\\mssqllocaldb;Initial Catalog=Foo;Integrated Security=True 
quartz.dataSource.default.connectionProvider.type: ReliableDbProvider.SqlAzure.SqlAzureProvider 
quartz.jobStore.useProperties:      true 

當試圖創建一個調度,我得到一個異常

InvalidCastException:無法將類型ReliableDbProvider.SqlAzure.SqlAzureProvider的對象轉換爲Quartz.Impl.AdoJobStore.Common.IDbProvider

我想這並不奇怪 - 但我該如何解決它?我查看了Quartz的IDbProvider接口,但是如何將其轉發給ReliableDbProvider的實例並不簡單,因爲後者沒有實現前者的所有功能。

使用Quartz不知道的自定義連接提供程序的最佳方式是什麼?

回答

0

這是一個QUART.NETIDbProvider類型 ....

Quartz.Impl.AdoJobStore.Common.IDbProvider

不只是一些/任何標準的Microsoft之一。

(你還挺。提到,但在同一時間,它看起來並不像它真的點擊來這是什麼意思)

有人(赫然出現在互聯網土地...或者你)必須寫一個支持Azure的具體。據我所知,它還沒有完成。

下面的列表:

https://www.quartz-scheduler.net/documentation/quartz-2.x/tutorial/job-stores.html

Currently following database providers are supported: 
SqlServer-20 - SQL Server driver for .NET Framework 2.0 
OracleODP-20 - Oracle’s Oracle Driver 
OracleODPManaged-1123-40 Oracle’s managed driver for Oracle 11 
OracleODPManaged-1211-40 Oracle’s managed driver for Oracle 12 
MySql-50 - MySQL Connector/.NET v. 5.0 (.NET 2.0) 
MySql-51 - MySQL Connector/:NET v. 5.1 (.NET 2.0) 
MySql-65 - MySQL Connector/:NET v. 6.5 (.NET 2.0) 
SQLite-10 - SQLite ADO.NET 2.0 Provider v. 1.0.56 (.NET 2.0) 
Firebird-201 - Firebird ADO.NET 2.0 Provider v. 2.0.1 (.NET 2.0) 
Firebird-210 - Firebird ADO.NET 2.0 Provider v. 2.1.0 (.NET 2.0) 
Npgsql-20 - PostgreSQL Npgsql 

追加

嗯。我發現了一些有趣的事

在Quartz.Net源代碼,在這個文件中:

的\ src \水晶\默認地將Impl \ AdoJobStore \ COMMON \ dbproviders.properties

或其他地方看到它

https://github.com/quartznet/quartznet/blob/master/src/Quartz/Impl/AdoJobStore/Common/dbproviders.properties

Database provider configuration data 
Core information taken from Spring Framework .NET - All credits to their great work! 

..

# SQL SERVER 
quartz.dbprovider.SqlServer-20.productName=Microsoft SQL Server, provider V2.0.0.0 in framework .NET V2.0 
quartz.dbprovider.SqlServer-20.assemblyName=System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
quartz.dbprovider.SqlServer-20.connectionType=System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
quartz.dbprovider.SqlServer-20.commandType=System.Data.SqlClient.SqlCommand, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
quartz.dbprovider.SqlServer-20.parameterType=System.Data.SqlClient.SqlParameter, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
quartz.dbprovider.SqlServer-20.commandBuilderType=System.Data.SqlClient.SqlCommandBuilder, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
quartz.dbprovider.SqlServer-20.parameterDbType=System.Data.SqlDbType, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
quartz.dbprovider.SqlServer-20.parameterDbTypePropertyName=SqlDbType 
[email protected] 
quartz.dbprovider.SqlServer-20.exceptionType=System.Data.SqlClient.SqlException, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
quartz.dbprovider.SqlServer-20.useParameterNamePrefixInParameterCollection=true 
quartz.dbprovider.SqlServer-20.bindByName=true 
quartz.dbprovider.SqlServer-20.dbBinaryTypeName=Image 

因此可能有可能嘗試爲Azure項目執行上述映射。不知道你有多接近。

我期待看到類似

公共類SqlServer20:Quartz.Impl.AdoJobStore.Common.IDbProvider

但使我找到了「dbproviders.properties」文件。

+0

我追加了我的答案。 – granadaCoder

相關問題