我尝试将Quartz.NET与ReliableDbProvider一起使用,以允许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不了解的自定义连接提供程序的最佳方法是什么?
答案 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
或其他地方看到它
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"文件。