将Quartz.NET与自定义连接提供程序一起使用

时间:2017-04-05 09:33:16

标签: quartz.net

我尝试将Quartz.NETReliableDbProvider一起使用,以允许Quartz在没有transient connection issues的情况下连接到我们的Azure SQL数据库。

以下是我使用的配置(为了便于阅读而重新格式化;我实际上是在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不了解的自定义连接提供程序的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

这是 QUART.NET IDbProvider ....

Quartz.Impl.AdoJobStore.Common.IDbProvider

不仅仅是一些/任何标准的微软。

(你有点提到,但与此同时,它看起来并没有真正点击这意味着什么)

有人(在互联网领域......或者你)必须写一个支持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

APPEND

嗯。我找到了一些有趣的东西。

在Quartz.Net源代码中,在此文件中:

\ SRC \石英\默认地将Impl \ AdoJobStore \共同\ 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
quartz.dbprovider.SqlServer-20.parameterNamePrefix=@
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项目执行上述映射。不知道你有多接近。

我期待看到像

这样的东西

public class SqlServer20:Quartz.Impl.AdoJobStore.Common.IDbProvider

但这导致我找到了" dbproviders.properties"文件。