Hello everyone, I redesign the annotation, resolve the `extraConfigurations` parameter by abstract factory pattern. like this:
``` public class SimpleTracingConfigurationFactory implements JobExtraConfigurationFactory { public JobExtraConfiguration getJobExtraConfiguration() { BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName(org.h2.Driver.class.getName()); dataSource.setUrl("jdbc:h2:mem:job_event_storage"); dataSource.setUsername("sa"); dataSource.setPassword(""); return new TracingConfiguration<>("RDB", dataSource); } } ``` ``` @ElasticScheduled( cron = "0/5 * * * * ?", jobName = "SimpleTestJobSecond", shardingTotalCount = 3, shardingItemParameters = "0=Beijing,1=Shanghai,2=Guangzhou", extraConfigurations = {SimpleTracingConfigurationFactory.class}, ) public class SimpleTestJob implements CustomJob { @Override public void execute(final ShardingContext shardingContext) { } } ``` ``` (new ScheduleJobBootstrap(regCenter,new SimpleTestJob())).schedule(); ``` sk c <sunkai....@gmail.com> 于2021年8月16日周一 下午3:45写道: > Hello Weijie, > > Thanks for the guidance. > > 1. `build()` is return an instance of `ScheduleAnnotationJobBootstrap`. > 2. `ScheduleAnnotationJobBootstrap.schedule()` would call the > `JobBootstarp.schedule()` one by one When the job has multiple ElasticJob > anntations. > 3. yes, we can do it. like this > > ``` > ScheduleAnnotationJobBootstrap.newBuilder(regCenter, new > SimpleTestJob()).addExtraConfigurations(tracingConfig).build().schedule(); > ``` > > or > > ``` > (new ScheduleAnnotationJobBootstrap(regCenter, new > SimpleTestJob()).addExtraConfigurations(tracingConfig)).schedule(); > ``` > > > ------------------ > Sincerely, > SunKai Cai (skai) > > 吴伟杰 <wuwei...@apache.org> 于2021年8月13日周五 下午5:05写道: > >> Hi sunkai, >> >> I have some questions about this API: >> 1. What's the returning of `build()`? >> 2. What if the Job has multiple ElasticJob annotations? >> 3. Could we consider move the RegCenter parameter to `newBuilder` or >> somewhere like require-args constructor? I think the RegCenter is a >> necessary arrangement. >> >> I think it would be helpful if you can provide a document to describe >> the detail about your API design. >> >> ------------------ >> >> Sincerely, >> Weijie Wu (TeslaCN) >> Apache ShardingSphere >> >> sk c <sunkai....@gmail.com> 于2021年8月13日周五 下午4:32写道: >> > >> > Hello Weijie, >> > >> > Yes, passing an instance is batter. >> > >> > ``` >> > ScheduleAnnotationJobBootstrap.newBuilder(new >> > >> SimpleTestJob()).setRegCenter(regCenter).addExtraConfigurations(tracingConfig).build().schedule(); >> > ``` >> > >> > it looks good. >> > >> > ------------------ >> > Sincerely, >> > SunKai Cai (skai) >> > >> > 吴伟杰 <wuwei...@apache.org> 于2021年8月13日周五 下午3:18写道: >> > >> > > Hi sunkai >> > > >> > > ``` >> > > >> > > >> ScheduleAnnotationJobBootstrap.newBuilder(SimpleTestJob.class).setRegCenter(regCenter).addExtraConfigurations(tracingConfig).build().schedule(); >> > > ``` >> > > The API require a class means it force developer to provide a no-args >> > > constructor. How about passing an instance? >> > > >> > > >> > > ------------------ >> > > >> > > Sincerely, >> > > Weijie Wu (TeslaCN) >> > > Apache ShardingSphere >> > > >> > > sk c <sunkai....@gmail.com> 于2021年8月12日周四 下午12:37写道: >> > > > >> > > > Hello Weijie, >> > > > >> > > > Annotation to use it without Spring, maybe we can do that: >> > > > >> > > > ``` >> > > > @ElasticScheduled( >> > > > cron = "0/5 * * * * ?", >> > > > jobName = "SimpleTestJob", >> > > > shardingTotalCount = 3, >> > > > shardingItemParameters = "0=Beijing,1=Shanghai,2=Guangzhou", >> > > > props = { >> > > > @ElasticJobProp(key = "print.title", value = "test >> > > title"), >> > > > @ElasticJobProp(key = "print.content", value = "test >> > > > content") >> > > > } >> > > > ) >> > > > public class SimpleTestJob implements CustomJob { >> > > > >> > > > @Override >> > > > public void execute(final ShardingContext shardingContext) { >> > > > } >> > > > >> > > > } >> > > > ``` >> > > > >> > > > ``` >> > > > >> > > > public final class JavaMain { >> > > > ..... >> > > > public static void main(final String[] args) throws IOException >> { >> > > > CoordinatorRegistryCenter regCenter = setUpRegistryCenter(); >> > > > TracingConfiguration<DataSource> tracingConfig = new >> > > > TracingConfiguration<>("RDB", setUpEventTraceDataSource()); >> > > > >> > > > >> > > >> ScheduleAnnotationJobBootstrap.newBuilder(SimpleTestJob.class).setRegCenter(regCenter).addExtraConfigurations(tracingConfig).build().schedule(); >> > > > } >> > > > ..... >> > > > } >> > > > >> > > > ``` >> > > > >> > > > >> > > > ------------------ >> > > > Sincerely, >> > > > SunKai Cai (skai) >> > > > >> > > > 吴伟杰 <wuwei...@apache.org> 于2021年8月12日周四 上午11:07写道: >> > > > >> > > > > Hi sunkai, >> > > > > >> > > > > If we define the annotations in API module, we also need to >> define how >> > > > > to use it without Spring. >> > > > > >> > > > > ------------------ >> > > > > >> > > > > Sincerely, >> > > > > Weijie Wu (TeslaCN) >> > > > > Apache ShardingSphere >> > > > > >> > > > > sk c <sunkai....@gmail.com> 于2021年8月11日周三 下午7:53写道: >> > > > > > >> > > > > > Hello Weijie, >> > > > > > >> > > > > > Thank you, good ideas. Maybe we can do that: >> > > > > > >> > > > > > >> > > > > > 1. Move the `@ElasticScheduled` annotation to >> `api/annotation`. We >> > > can >> > > > > > have the same annotation , and different annotation processor >> without >> > > > > > Spring. >> > > > > > >> > > > > > 2. Yes, this is important. I have a idea like that: >> > > > > > >> > > > > > Set Scheduled >> > > > > > ``` >> > > > > > package >> > > > > > >> > > > > >> > > >> org.apache.shardingsphere.elasticjob.lite.spring.core.annotation.job.impl; >> > > > > > @ElasticScheduled( >> > > > > > cron = "0/5 * * * * ?", >> > > > > > jobName = SimpleTestJobFirst >> > > > > > shardingTotalCount = 3, >> > > > > > shardingItemParameters = >> "0=Beijing,1=Shanghai,2=Guangzhou", >> > > > > > extraConfigurations = {"SimpleTracingConfiguration"} >> > > > > > ) >> > > > > > public class SimpleTestJob implements CustomJob { >> > > > > > >> > > > > > @Override >> > > > > > public void execute(final ShardingContext shardingContext) { >> > > > > > } >> > > > > > >> > > > > > } >> > > > > > ``` >> > > > > > >> > > > > > Set Configurable >> > > > > > >> > > > > > ``` >> > > > > > //spring example >> > > > > > @Configurable >> > > > > > @EnableElastic(scanBasePackages = >> > > > > > >> > > > > >> > > >> "org.apache.shardingsphere.elasticjob.lite.spring.core.annotation.job.impl") >> > > > > > public class ElasticConfig { >> > > > > > >> > > > > > @Bean >> > > > > > public DataSource dataSource() { >> > > > > > BasicDataSource dataSource = new BasicDataSource(); >> > > > > > dataSource.setDriverClassName("org.h2.Driver"); >> > > > > > dataSource.setUrl("jdbc:h2:mem:job_event_storage"); >> > > > > > dataSource.setUsername("sa"); >> > > > > > dataSource.setPassword(""); >> > > > > > } >> > > > > > >> > > > > > @Bean("SimpleTracingConfiguration") >> > > > > > public TracingConfiguration<DataSource> >> myTracingConfiguration() >> > > { >> > > > > > return new TracingConfiguration<>("RDB", dataSource()); >> > > > > > } >> > > > > > } >> > > > > > ``` >> > > > > > or >> > > > > > >> > > > > > ``` >> > > > > > //spring boot example >> > > > > > @Configurable >> > > > > > @EnableElastic(scanBasePackages = >> > > > > > >> > > > > >> > > >> "org.apache.shardingsphere.elasticjob.lite.spring.core.annotation.job.impl") >> > > > > > public class ElasticConfig { >> > > > > > >> > > > > > @ConditionalOnBean(DataSource.class) >> > > > > > @Bean("SimpleTracingConfiguration") >> > > > > > public TracingConfiguration<DataSource> >> > > myTracingConfiguration(final >> > > > > > DataSource dataSource) { >> > > > > > return new TracingConfiguration<>("RDB", dataSource); >> > > > > > } >> > > > > > } >> > > > > > ``` >> > > > > > >> > > > > > 3. Of course >> > > > > > >> > > > > > ------------------ >> > > > > > Sincerely, >> > > > > > SunKai Cai (skai) >> > > > > > >> > > > > > 吴伟杰 <wuwei...@apache.org> 于2021年8月11日周三 下午6:38写道: >> > > > > > >> > > > > > > Hi Sunkai, >> > > > > > > >> > > > > > > I have some ideas about your proposal: >> > > > > > > 1. Could we consider using the annotation without Spring? >> > > > > > > 2. Could we configure the jobs by annotations only? How to >> > > configure >> > > > > > > the JobExtraConfiguration like TracingConfiguration by >> annotations? >> > > > > > > 3. Support using YAML to configure jobs without Spring. This >> can >> > > refer >> > > > > > > to how ShardingSphere does. >> > > > > > > >> > > > > > > ------------------ >> > > > > > > >> > > > > > > Sincerely, >> > > > > > > Weijie Wu (TeslaCN) >> > > > > > > Apache ShardingSphere >> > > > > > > >> > > > > > > sk c <sunkai....@gmail.com> 于2021年8月10日周二 下午3:43写道: >> > > > > > > > >> > > > > > > > Hi everyone, >> > > > > > > > >> > > > > > > > I prefer to discuss the annotation of ElasticJob plan. >> > > > > > > > >> > > > > > > > example: >> > > > > > > > >> > > > > > > > ``` >> > > > > > > > @ElasticScheduled( >> > > > > > > > cron = "0/5 * * * * ?", >> > > > > > > > jobName = "SimpleTestJobSecond", >> > > > > > > > shardingTotalCount = 3, >> > > > > > > > shardingItemParameters = >> > > "0=Beijing,1=Shanghai,2=Guangzhou", >> > > > > > > > jobListenerTypes = {"NOOP", "LOG"}, >> > > > > > > > props = { >> > > > > > > > @ElasticJobProp(key = "print.title", value = >> > > "test >> > > > > > > title"), >> > > > > > > > @ElasticJobProp(key = "print.content", >> value = >> > > "test >> > > > > > > > content") >> > > > > > > > } >> > > > > > > > ) >> > > > > > > > public class SimpleTestJob implements CustomJob { >> > > > > > > > >> > > > > > > > @Override >> > > > > > > > public void execute(final ShardingContext >> shardingContext) { >> > > > > > > > } >> > > > > > > > >> > > > > > > > } >> > > > > > > > ``` >> > > > > > > > >> > > > > > > > ``` >> > > > > > > > @Configuration >> > > > > > > > @EnableElastic(scanBasePackages = >> > > > > > > > >> "org.apache.shardingsphere.elasticjob.lite.example.job.simple") >> > > > > > > > public class ElasticConfig { >> > > > > > > > >> > > > > > > > } >> > > > > > > > ``` >> > > > > > > > >> > > > > > > > we can look at it on >> > > > > > > > >> https://github.com/apache/shardingsphere-elasticjob/pull/1954 >> > > > > > > > >> > > > > > > > I am going to work it soon. Please remind me if you have a >> > > > > suggestion. >> > > > > > > > >> > > > > > > > >> > > > > > > > ------------------ >> > > > > > > > Sincerely, >> > > > > > > > SunKai Cai (skai) >> > > > > > > >> > > > > >> > > >> >