尝试在Quartz调度程序3.0.0-alpha3 3和System.Data.Sqlite.Core (1.0.105.2)中使用Sqlite,并在我的Mac上编译的.NET Core2.0控制台应用程序上进行以下配置:
NameValueCollection props = new NameValueCollection {
{ "quartz.threadPool.type", "Quartz.Simpl.SimpleThreadPool, Quartz" },
{ "quartz.threadPool.threadCount", "10" },
{ "quartz.jobStore.type", "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" },
{ "quartz.jobStore.misfireThreshold", "60000" },
{ "quartz.jobStore.lockHandler.type", "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" },
{ "quartz.jobStore.useProperties", "true" },
{ "quartz.jobStore.dataSource", "default" },
{ "quartz.jobStore.tablePrefix", "QRTZ_" },
{ "quartz.jobStore.driverDelegateType", "Quartz.Impl.AdoJobStore.SQLiteDelegate, Quartz" },
{ "quartz.dataSource.default.provider", "SQLite-10" },
{ "quartz.dataSource.default.connectionString", "Data Source=quartznet.db;Version=3;" }
};实际行为
Quartz.SchedulerException:无法初始化DataSource: SqliteDS --> System.ArgumentOutOfRangeException:没有提供程序'SQLite-10‘参数名称: providerName的元数据信息 在Quartz.Impl.AdoJobStore.Common.DbProvider.GetDbMetadata(String providerName)在C:\projects\quartznet-6fcn8\src\Quartz\Impl\AdoJobStore\Common\DbProvider.cs:line 118在Quartz.Impl.AdoJobStore.Common.DbProvider..ctor(String dbProviderName,字符串( String connectionString)在C:\projects\quartznet-6fcn8\src\Quartz\Impl\AdoJobStore\Common\DbProvider.cs:line 74 at Quartz.Impl.StdSchedulerFactory.d__65.MoveNext() in C:\projects\quartznet-6fcn8\src\Quartz\Impl\StdSchedulerFactory.cs:line 614 -内部异常堆栈跟踪的末端-在C:\projects\quartznet-6fcn8\src\Quartz\Impl\StdSchedulerFactory.cs:line 623中的Quartz.Impl.StdSchedulerFactory.d__65.MoveNext()从抛出异常的前一个位置(在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务)到C:\projects\quartznet-6fcn8\src\Quartz\Impl\StdSchedulerFactory.cs:line 1118中的Quartz.Impl.StdSchedulerFactory.d__69.MoveNext()的堆栈跟踪--从抛出异常的前一个位置开始的堆栈跟踪--在系统上抛出System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task任务。.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at BackgroundProcessingWithQuartz.Program.d__1.MoveNext() in /Users/jakesmith/Projects/BackgroundProcessingWithQuartz/BackgroundProcessingWithQuartz/BackgroundProcessingWithQuartz/Program.cs:line 44 [参见嵌套异常: System.ArgumentOutOfRangeException:没有提供程序'SQLite-10‘参数名称: providerName at Quartz.Impl.AdoJobStore.Common.DbProvider.GetDbMetadata(String providerName的元数据信息),在Quartz.Impl.AdoJobStore.Common.DbProvider..ctor(String dbProviderName的C:\projects\quartznet-6fcn8\src\Quartz\Impl\AdoJobStore\Common\DbProvider.cs:line 118中,在C:\projects\quartznet-6fcn8\src\Quartz\Impl\AdoJobStore\Common\DbProvider.cs:line 74中的字符串connectionString(在C:\projects\quartznet-6fcn8\src\Quartz\Impl\StdSchedulerFactory.cs:line 614中的Quartz.Impl.StdSchedulerFactory.d__65.MoveNext()中)
我错过了什么?所有内容都是通过上的NuGet安装的。另外,当dll在Mac上实际运行时,为什么会有对C驱动器的引用。请帮帮忙。
发布于 2017-09-06 15:30:37
Quartz 3.0 beta 1支持开箱即用的Microsoft.Data.Sqlite
添加所需的包引用:
PackageReference Include="Microsoft.Data.Sqlite“Version="2.0.0”/> PackageReference Include="Quartz“Version=”3.0.0-beta1 1“/>
class Program
{
static void Main()
{
try
{
Run().GetAwaiter().GetResult();
}
catch (Exception e)
{
Console.Error.WriteLine(e);
}
finally
{
Console.ReadLine();
}
}
private static async Task Run()
{
var properties = new NameValueCollection
{
["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
["quartz.jobStore.useProperties"] = "true",
["quartz.jobStore.dataSource"] = "default",
["quartz.jobStore.tablePrefix"] = "QRTZ_",
["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SQLiteDelegate, Quartz",
["quartz.dataSource.default.provider"] = "SQLite-Microsoft",
["quartz.dataSource.default.connectionString"] = "Data Source=test.db",
["quartz.serializer.type"] = "binary"
};
ISchedulerFactory sf = new StdSchedulerFactory(properties);
IScheduler sched = await sf.GetScheduler();
await sched.Start();
Thread.Sleep(TimeSpan.FromMinutes(10));
}
}注册自定义提供程序元数据
仅当您需要Microsoft.Data.Sqlite以外的其他提供程序或使用比beta 1更早的版本时,才需要
您需要首先注册元数据,以便能够引用自定义SQLite提供程序。下面是一个例子:
项目档案:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Data.Sqlite" Version="2.0.0" />
<PackageReference Include="Quartz" Version="3.0.0-alpha3" />
</ItemGroup>
</Project>守则:
using System;
using System.Collections.Specialized;
using System.Data;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Data.Sqlite;
using Quartz;
using Quartz.Impl;
using Quartz.Impl.AdoJobStore.Common;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
Run().GetAwaiter().GetResult();
}
private static async Task Run()
{
DbProvider.RegisterDbMetadata("sqlite-custom", new DbMetadata()
{
AssemblyName = typeof(SqliteConnection).Assembly.GetName().Name,
ConnectionType = typeof(SqliteConnection),
CommandType = typeof(SqliteCommand),
ParameterType = typeof(SqliteParameter),
ParameterDbType = typeof(DbType),
ParameterDbTypePropertyName = "DbType",
ParameterNamePrefix = "@",
ExceptionType = typeof(SqliteException),
BindByName = true
});
var properties = new NameValueCollection
{
["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz",
["quartz.jobStore.useProperties"] = "true",
["quartz.jobStore.dataSource"] = "default",
["quartz.jobStore.tablePrefix"] = "QRTZ_",
["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SQLiteDelegate, Quartz",
["quartz.dataSource.default.provider"] = "sqlite-custom",
["quartz.dataSource.default.connectionString"] = "Data Source=test.db",
["quartz.jobStore.lockHandler.type"] = "Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz",
["quartz.serializer.type"] = "binary"
};
ISchedulerFactory sf = new StdSchedulerFactory(properties);
IScheduler sched = await sf.GetScheduler();
await sched.Start();
Thread.Sleep(TimeSpan.FromMinutes(10));
}
}
}您可以看到对C驱动器的引用,因为Quartz库是在Windows机器上编译的,这将使PDB文件包含来自构建主机的路径。
https://stackoverflow.com/questions/45952441
复制相似问题