我正在尝试使用 Quartz.NET与 ReliableDbProvider , 以允许 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 typeQuartz.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”文件。