Hi sunkai,

The extra configuration factory looks better!
We may need a better naming because of one-off job.

------------------

Sincerely,
Weijie Wu (TeslaCN)
Apache ShardingSphere

sk c <sunkai....@gmail.com> 于2021年8月18日周三 下午3:18写道:
>
> 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)
> >> > > > > > >
> >> > > > >
> >> > >
> >>
> >

Reply via email to