绝对是一个LINQ新手,但对SQL和C#非常有经验,并想知道这在LINQ中是否可行.如果是这样,我可以在其他地方使用它,但我认为这将是一个很好的起点(并有助于简化/清理一些代码).这可能更通用,但我认为这可能是一个很好的现实生活中的例子,可以帮助解释.
快速背景:我正在做一个个人学习项目,构建一个调度程序,学习Spring.NET/DI,Fluent NHibernate,Quartz.NET,并尝试用TDD来完成我的专长.到目前为止已经学到了一吨.
Quartz.NET IScheduler对象具有这些属性(1)/方法(2)(假设为公共)...
string[] JobGroupNames { get; }
string[] GetJobNames(string groupName)
Trigger[] GetTriggersOfJob(string jobName, string groupName)
Run Code Online (Sandbox Code Playgroud)
假设触发器定义只是......
class Trigger
{
string Name { get; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个类我正在尝试获取一个列表,其中包含如下构造函数(因为它一旦创建就不可变)...
class QuartzJob
{
public QuartzJob(Guid groupId, Guid jobId, IEnumerable<string> triggerNames)
}
Run Code Online (Sandbox Code Playgroud)
目前这就是我处理它的方式......
public IEnumerable<QuartzJob> GetQuartzInfo(IScheduler scheduler)
{
List<QuartzJob> list = new List<QuartzJob>();
foreach (string grp in scheduler.JobGroupNames)
{
foreach (string job in scheduler.GetJobNames(grp))
{
var triggerNames = scheduler
.GetTriggersOfJob(job, grp)
.ToList()
.ConvertAll(t => t.Name);
var qj = new QuartzJob(new Guid(grp), new …Run Code Online (Sandbox Code Playgroud) 我有个问题.Quartz不断将其日志记录在我的所有日志文件中.我可以将Quart的日志重定向到单独的文件吗?这是我的logback.xml:
<configuration debug="false">
<appender name="hcmut.cse.virtuallab.request" class="ch.qos.logback.core.FileAppender">
<file>log/hcmut.cse.virtuallab.request.log</file>
<encoder>
<pattern>%date %level [%thread] %logger [%file:%line] %msg%n</pattern>
</encoder>
</appender>
<appender name="hcmut.cse.virtuallab.timer" class="ch.qos.logback.core.FileAppender">
<file>log/hcmut.cse.virtuallab.timer.log</file>
<encoder>
<pattern>%date %level [%thread] %logger [%file:%line] %msg%n</pattern>
</encoder>
</appender>
<logger name="root" level="debug">
<appender-ref ref="hcmut.cse.virtuallab.timer" />
<appender-ref ref="hcmut.cse.virtuallab.request" />
</logger>
</configuration>
Run Code Online (Sandbox Code Playgroud) 我有一个OSGI调度程序包,其中包含Quartz Scheduler Jar.此捆绑包仅向其他捆绑包公开应用程序接口,并在注册新作业时将其包装到temporaryJob(实现StatefulJob)并使用调度程序进行调度.
通过这种方式,我不必公开Quartz Scheduler jar(它不是那么多的osgi兼容).这种方法的问题在于,由于StatefulJob避免并行执行作业而我只有一个实际作业(temporaryJob),所以我的所有实际作业一次运行一个.
不幸的是,标记界面似乎是唯一可以说该作业是有状态的方式.我能找到的唯一解决方案是让守护进程公开StatefulJobInterface(删除假工作),但这样做,我遇到了很多类路径问题.有一个更简单的解决方案吗?
我正在使用JBoss 4和Spring.在Web应用程序中,我使用Quartz调度程序来执行某些计划任务.在Quartz作业中,我想获得服务器路径是否可能?如果有,怎么样?
PS:某些上下文我需要Quartz作业中的服务器路径,因为该作业会发送电子邮件.电子邮件包含我的应用程序所服务的网站的链接,为了构建正确的URL,我需要一个服务器路径.硬编码服务器路径是禁忌,因为应用程序部署在各种服务器上.
我有一个要求,我需要在我的调度过程中插入数据并检索相同的内容.尽管我可以创建自己的连接类并且可以完成工作,但我想知道是否有办法使用Quartz API获取数据库连接.
由于Quartz有效地进行数据库连接和处理,所以我的目的是使用一个定义良好的结构而不是创建自己的结构.
我在Quartz中看到了以下代码
conn = DBConnectionManager.getInstance().getConnection(
getDataSource());
Run Code Online (Sandbox Code Playgroud)
但我不确定这种方法有多好以获得连接.或者有任何好的示例/资源来创建一个有效的数据库连接类.
org.quartz.scheduler.instanceName=QuartzScheduler
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.threadPool.threadCount=7
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.MSSQLDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.dataSource = myDS
org.quartz.dataSource.myDS.driver=com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL=jdbc:mysql://localhost:3306/quartz
org.quartz.dataSource.myDS.user=root
org.quartz.dataSource.myDS.password=root
org.quartz.dataSource.myDS.maxConnections=5
Run Code Online (Sandbox Code Playgroud) 作为输入验证的一部分,我在考虑这是否是一个真正有效的cron表达式以及它将如何执行:
0 0/0 * * * ?
Run Code Online (Sandbox Code Playgroud)
Quartz验证返回true
org.quartz.CronExpression.isValidExpression("0 0/0 * * * ?")
Run Code Online (Sandbox Code Playgroud)
那么,这一直在运行,从不,每小时或每一分钟......?
我尝试使用Grails的最新石英插件:quartz:1.0.1.
如果我离开jdbcStore = false,它会工作,如果我设置为true则失败.QuartzConfig.groovy:
quartz {
autoStartup = true
jdbcStore = true
waitForJobsToCompleteOnShutdown = true
exposeSchedulerInRepository = false
props {
scheduler.skipUpdateCheck = true
}
}
Run Code Online (Sandbox Code Playgroud)
这是属性文件:
org.quartz.scheduler.instanceName reporting_test
org.quartz.scheduler.instanceId AUTO
org.quartz.threadPool.class org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount 5
org.quartz.threadPool.threadPriority 5
org.quartz.jobStore.misfireThreshold 60000
org.quartz.jobStore.class org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties false
org.quartz.jobStore.tablePrefix QRTZ_
org.quartz.jobStore.isClustered true
org.quartz.jobStore.clusterCheckinInterval 5000
org.quartz.plugin.shutdownhook.class org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown true
Run Code Online (Sandbox Code Playgroud)
我一直试图尝试数据源设置,因为我更喜欢使用我在Datasource.groovy中设置的默认DS.无论数据源的设置如何,我仍然会在启动时收到以下错误消息.
2013-12-18 13:43:14,693 [localhost-startStop-1] ERROR context.GrailsContextLoader - Error initializing the application: org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: Line 1: FOR UPDATE clause allowed only for DECLARE …Run Code Online (Sandbox Code Playgroud) 我是Quartz的新手.我已经用RAM jobstore做了一些示例.之后我试图为JDBC jobstore做一些事情.我有SQL服务器作为我的数据库.
在我的quartz.properties中,
org.quartz.scheduler.skipUpdateCheck: true
org.quartz.scheduler.instanceName =OZS_SCHEDULAR
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 4
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
org.quartz.threadPool.threadPriority = 5
#specify the jobstore used
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties = false
#The datasource for the jobstore that is to be used
org.quartz.jobStore.dataSource = myDS
#quartz table prefixes in the database
org.quartz.jobStore.tablePrefix = WB_QRTZ_
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.isClustered = false
#The details of the datasource specified previously
org.quartz.dataSource.myDS.driver =net.sourceforge.jtds.jdbc.Driver
org.quartz.dataSource.myDS.URL =jdbc:jtds:sqlserver://192.160.100.24:1433;databaseName=Test
org.quartz.dataSource.myDS.user =admin
org.quartz.dataSource.myDS.password = password …Run Code Online (Sandbox Code Playgroud) 我想在Grails做一个简单的后台工作.我只是希望每30秒左右发生一次.
我使用的是Grails 3.1.3
我已经将Quartz添加到我的依赖项中:编译"org.grails.plugins:quartz:2.0.1"
然后我运行编译并重新启动grails CLI.现在我通过create-job创建了一个Job.它看起来像这样:
package htwp
class UserSyncJob {
static triggers = {
simple repeatInterval: 5000l // execute job once in 5 seconds
}
def execute() {
println ("?")
log.error("??!")
throw new Error("JOB WHERE ARE YOU");
}
}
Run Code Online (Sandbox Code Playgroud)
当我通过run-app启动服务器时没有任何反应.没有打印,也没有错误.我究竟做错了什么?
我在这行中得到一个错误说:
无法将类型'System.Threading.Tasks.Task'隐式转换为'Quartz.IScheduler'.存在显式转换(您是否错过了演员?)
如何解决; 我不明白?请帮忙!
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
public static void Start()
{
try
{
//Construct scheduler factory
//IScheduler scheduler = schedulerFactory.GetScheduler();
// IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
IJobDetail job = JobBuilder.Create<HelloJob>()
.WithIdentity("jobName", "jobGroup")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithSimpleSchedule(s => s.WithIntervalInSeconds(60).RepeatForever())
.StartNow()
.Build();
scheduler.ScheduleJob(job, trigger);
// scheduler.Start();
}
catch (SchedulerException se)
{
//Console.WriteLine(se);
}
}
}
public class HelloJob : IJob
{
private TBPESContext db = new TBPESContext();
public void Execute(IJobExecutionContext context)
{
var AuthorName …Run Code Online (Sandbox Code Playgroud) quartz-scheduler ×10
java ×4
grails ×2
quartz.net ×2
scheduler ×2
c# ×1
database ×1
grails-3.1 ×1
jdbc ×1
jsp ×1
linq ×1
logging ×1
osgi ×1
quartz ×1
spring ×1
sql-server ×1
subquery ×1
triggers ×1