AdoJobStore与Sqlite

dis*_*kid 4 c# sqlite quartz.net

我终于能够ADOJobStore为Sql Server 设置,但我也希望它能与Sqlite一起使用,我还没有让它工作.这是我quartz.config为我设置属性的一部分AdoJobStore:

# to use the sqlite store, uncomment all of this 
quartz.jobStore.type = Quartz.Impl.AdoJobStore.JobStoreTX, Quartz 
quartz.jobStore.dataSource = default 
quartz.dataSource.default.connectionString = Data Source=postbag-jobs.db;Version=3;Foreign Keys=ON;
quartz.jobStore.tablePrefix = QRTZ_ 
quartz.jobStore.clustered = false
quartz.jobStore.lockHandler.type = Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz 
quartz.jobStore.driverDelegateType = Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz 
quartz.dataSource.default.provider = SQLite-10 
quartz.jobStore.useProperties = true
Run Code Online (Sandbox Code Playgroud)

我已经单独创建了Sqlite数据库并将其放在我服务器的工作目录中.但是当服务初始化时,我得到一个SchedulerException说:

Could not Initialize DataSource: default
Run Code Online (Sandbox Code Playgroud)

有了这个InnerException:

Error while reading metadata information for provider 'SQLite-10'
Parameter name: providerName
Run Code Online (Sandbox Code Playgroud)

我必须为我的服务器提供Sqlite .DLL吗?因为我不需要为Sql Server做那件事.

Lef*_*tyX 10

如果你想在Quartz.net上使用Sqlite,你必须使用这些键:

<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
<add key="quartz.threadPool.threadCount" value="10" />
<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
<add key="quartz.jobStore.misfireThreshold" value="60000" />
<add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />
<add key="quartz.jobStore.useProperties" value="true" />
<add key="quartz.jobStore.dataSource" value="default" />
<add key="quartz.jobStore.tablePrefix" value="qrtz_" />
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SQLiteDelegate, Quartz" />
<add key="quartz.dataSource.default.provider" value="SQLite-10" />
<add key="quartz.dataSource.default.connectionString" value="Data Source=postbag-jobs.db;Version=3;" />
Run Code Online (Sandbox Code Playgroud)

我注意到你的driverDelegateType键不正确.你应该使用SQLiteDelegate:

<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.SQLiteDelegate, Quartz" />
Run Code Online (Sandbox Code Playgroud)

您还需要安装ADO.NET提供程序(nuget):

Install-Package System.Data.SQLite.Core
Run Code Online (Sandbox Code Playgroud)

您可能遇到的另一个问题是与您的提供程序(1.0.94.0)的兼容性以及Quartz.Net(1.0.88.0)中定义的兼容性.你可以在这里找到信息.

要解决此问题,只需将此部分添加到app.config:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral" />
            <bindingRedirect oldVersion="1.0.88.0" newVersion="1.0.94.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)

工作示例,可以发现这里在GitHub上.