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

标签 quartz.net

我正在尝试使用 Quartz.NETReliableDbProvider , 以允许 Quartz 连接到我们的 Azure SQL 数据库而无需 transient connection issues .
这是我正在使用的配置(重新格式化以提高可读性;我实际上在 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: Unable to cast object of type ReliableDbProvider.SqlAzure.SqlAzureProvider to type Quartz.Impl.AdoJobStore.Common.IDbProvider.


我想这并不奇怪——但我该如何解决呢?我看了一下IDbProvider来自 Quartz 的接口(interface),但如何将其转发到 ReliableDbProvider 的实例并不简单。 ,因为后者没有实现前者的所有功能。
使用 Quartz 不知道的自定义连接提供程序的最佳方式是什么?

最佳答案

这是一个 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

附加

唔。我发现了一些有趣的东西。

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

\src\Quartz\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
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)类 SqlServer20:Quartz.Impl.AdoJobStore.Common.IDbProvider

但这让我找到了“dbproviders.properties”文件。

关于quartz.net - 将 Quartz.NET 与自定义连接提供程序一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43227269/

相关文章:

c# - 使用 Unschedulejob 修改触发器详细信息 - 我做错了什么? ( quartz 网)

c# - 我如何定期重新加载 Quartz.Net 中的所有作业和计划?

c# - 是否可以从运行的 Quartz.Net 作业调度程序服务中添加或删除作业和触发器?

logging - 如何在 Quartz.NET 调度程序中配置日志记录

quartz.net - 仅在执行前一个作业后才执行作业

c# - 调度准确性,Quartz.NET 与 Rx 2.0

c# - Quartz.net:FireAtTime 似乎没有按预期工作

windows-services - 使用一个 Windows 服务来执行作业,使用两个 Web 应用程序来安排作业

quartz.net - 如何在 quartz 中排队作业

c# - 使用 Quartz .NET 和 AdoJobStore 调度通用 IJob<>