You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shardingsphere.apache.org by sk c <su...@gmail.com> on 2021/08/10 07:43:31 UTC

[DISCUSS][ElasticJob] support annotation plan of ElasticJob

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)

Re: [DISCUSS][ElasticJob] support annotation plan of ElasticJob

Posted by sk c <su...@gmail.com>.
Hi weijie,

ok, we using `@ElasticJobConfiguration`,  I updated the issue, we can look
at it on https://github.com/apache/shardingsphere-elasticjob/pull/1954

吴伟杰 <wu...@apache.org> 于2021年8月28日周六 下午1:37写道:

> Hi sunkai,
>
> The annotation does the `JobConfiguration` stuff, so I prefer naming
> it `@ElasticJobConfiguration`.
>
> ------------------
>
> Sincerely,
> Weijie Wu (TeslaCN)
> Apache ShardingSphere
>
>
> sk c <su...@gmail.com> 于2021年8月18日周三 下午6:29写道:
>
> >
> > Hello weijie,
> >
> > Yes, the name can redefine.  like `@ElasticJob` ,
> > `@ElasticJobConfiguration` .
> >
> > I better like `@ElasticJob` ,   what do you think?
> >
> >
> > ------------------
> > Sincerely,
> > SunKai  Cai (skai)
> >
> > 吴伟杰 <wu...@apache.org> 于2021年8月18日周三 下午4:15写道:
> >
> > > 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 <su...@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 <su...@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)
> > > > >
> > > > > 吴伟杰 <wu...@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 <su...@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)
> > > > >> >
> > > > >> > 吴伟杰 <wu...@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 <su...@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)
> > > > >> > > >
> > > > >> > > > 吴伟杰 <wu...@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 <su...@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)
> > > > >> > > > > >
> > > > >> > > > > > 吴伟杰 <wu...@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 <su...@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)
> > > > >> > > > > > >
> > > > >> > > > >
> > > > >> > >
> > > > >>
> > > > >
> > >
>

Re: [DISCUSS][ElasticJob] support annotation plan of ElasticJob

Posted by 吴伟杰 <wu...@apache.org>.
Hi sunkai,

The annotation does the `JobConfiguration` stuff, so I prefer naming
it `@ElasticJobConfiguration`.

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

Sincerely,
Weijie Wu (TeslaCN)
Apache ShardingSphere


sk c <su...@gmail.com> 于2021年8月18日周三 下午6:29写道:

>
> Hello weijie,
>
> Yes, the name can redefine.  like `@ElasticJob` ,
> `@ElasticJobConfiguration` .
>
> I better like `@ElasticJob` ,   what do you think?
>
>
> ------------------
> Sincerely,
> SunKai  Cai (skai)
>
> 吴伟杰 <wu...@apache.org> 于2021年8月18日周三 下午4:15写道:
>
> > 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 <su...@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 <su...@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)
> > > >
> > > > 吴伟杰 <wu...@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 <su...@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)
> > > >> >
> > > >> > 吴伟杰 <wu...@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 <su...@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)
> > > >> > > >
> > > >> > > > 吴伟杰 <wu...@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 <su...@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)
> > > >> > > > > >
> > > >> > > > > > 吴伟杰 <wu...@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 <su...@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)
> > > >> > > > > > >
> > > >> > > > >
> > > >> > >
> > > >>
> > > >
> >

Re: [DISCUSS][ElasticJob] support annotation plan of ElasticJob

Posted by sk c <su...@gmail.com>.
Hello weijie,

Yes, the name can redefine.  like `@ElasticJob` ,
`@ElasticJobConfiguration` .

I better like `@ElasticJob` ,   what do you think?


------------------
Sincerely,
SunKai  Cai (skai)

吴伟杰 <wu...@apache.org> 于2021年8月18日周三 下午4:15写道:

> 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 <su...@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 <su...@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)
> > >
> > > 吴伟杰 <wu...@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 <su...@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)
> > >> >
> > >> > 吴伟杰 <wu...@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 <su...@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)
> > >> > > >
> > >> > > > 吴伟杰 <wu...@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 <su...@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)
> > >> > > > > >
> > >> > > > > > 吴伟杰 <wu...@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 <su...@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)
> > >> > > > > > >
> > >> > > > >
> > >> > >
> > >>
> > >
>

Re: [DISCUSS][ElasticJob] support annotation plan of ElasticJob

Posted by 吴伟杰 <wu...@apache.org>.
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 <su...@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 <su...@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)
> >
> > 吴伟杰 <wu...@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 <su...@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)
> >> >
> >> > 吴伟杰 <wu...@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 <su...@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)
> >> > > >
> >> > > > 吴伟杰 <wu...@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 <su...@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)
> >> > > > > >
> >> > > > > > 吴伟杰 <wu...@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 <su...@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)
> >> > > > > > >
> >> > > > >
> >> > >
> >>
> >

Re: [DISCUSS][ElasticJob] support annotation plan of ElasticJob

Posted by sk c <su...@gmail.com>.
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 <su...@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)
>
> 吴伟杰 <wu...@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 <su...@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)
>> >
>> > 吴伟杰 <wu...@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 <su...@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)
>> > > >
>> > > > 吴伟杰 <wu...@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 <su...@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)
>> > > > > >
>> > > > > > 吴伟杰 <wu...@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 <su...@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)
>> > > > > > >
>> > > > >
>> > >
>>
>

Re: [DISCUSS][ElasticJob] support annotation plan of ElasticJob

Posted by sk c <su...@gmail.com>.
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)

吴伟杰 <wu...@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 <su...@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)
> >
> > 吴伟杰 <wu...@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 <su...@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)
> > > >
> > > > 吴伟杰 <wu...@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 <su...@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)
> > > > > >
> > > > > > 吴伟杰 <wu...@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 <su...@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)
> > > > > > >
> > > > >
> > >
>

Re: [DISCUSS][ElasticJob] support annotation plan of ElasticJob

Posted by 吴伟杰 <wu...@apache.org>.
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 <su...@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)
>
> 吴伟杰 <wu...@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 <su...@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)
> > >
> > > 吴伟杰 <wu...@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 <su...@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)
> > > > >
> > > > > 吴伟杰 <wu...@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 <su...@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)
> > > > > >
> > > >
> >

Re: [DISCUSS][ElasticJob] support annotation plan of ElasticJob

Posted by sk c <su...@gmail.com>.
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)

吴伟杰 <wu...@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 <su...@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)
> >
> > 吴伟杰 <wu...@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 <su...@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)
> > > >
> > > > 吴伟杰 <wu...@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 <su...@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)
> > > > >
> > >
>

Re: [DISCUSS][ElasticJob] support annotation plan of ElasticJob

Posted by 吴伟杰 <wu...@apache.org>.
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 <su...@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)
>
> 吴伟杰 <wu...@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 <su...@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)
> > >
> > > 吴伟杰 <wu...@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 <su...@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)
> > > >
> >

Re: [DISCUSS][ElasticJob] support annotation plan of ElasticJob

Posted by sk c <su...@gmail.com>.
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)

吴伟杰 <wu...@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 <su...@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)
> >
> > 吴伟杰 <wu...@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 <su...@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)
> > >
>

Re: [DISCUSS][ElasticJob] support annotation plan of ElasticJob

Posted by 吴伟杰 <wu...@apache.org>.
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 <su...@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)
>
> 吴伟杰 <wu...@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 <su...@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)
> >

Re: [DISCUSS][ElasticJob] support annotation plan of ElasticJob

Posted by sk c <su...@gmail.com>.
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)

吴伟杰 <wu...@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 <su...@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)
>

Re: [DISCUSS][ElasticJob] support annotation plan of ElasticJob

Posted by 吴伟杰 <wu...@apache.org>.
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 <su...@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)

Re:[DISCUSS][ElasticJob] support annotation plan of ElasticJob

Posted by Juan Pan <pa...@apache.org>.
Hi Sunkai,


Thanks for your proposal. We will give it a review and contact you ASAP.


Best,
Trista


------------------------------------------------------------------------------
Juan Pan(Trista), Apache member, Apache ShardingSphere PMC, Apache brpc (Incubator) & Apache AGE (Incubator) mentor
Twitter, @trista86934690
     


On 08/10/2021 15:43,sk c<su...@gmail.com> wrote:
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)