gpt4 book ai didi

java - 如何在beanfactory中注册bean?

转载 作者:行者123 更新时间:2023-12-01 10:52:19 27 4
gpt4 key购买 nike

我试图拥有多个 JobDetailFactoryBean、CronTriggerFactoryBean 和 SchedulerFactoryBean。我怎样才能将这个bean注册到beanfactory?我正在使用 Spring Boot。

@Configuration
@ComponentScan("uk.co.themoderngeek.quartz.speakingclock")
public class QuartzConfiguration {

@Autowired
private DataSource dataSource;

@Value("${quartz.db.username}")
private String username;

@Value("${quartz.db.password}")
private String password;

public QuartzConfiguration() {
// TODO Auto-generated constructor stub
JobDetailFactoryBean j1 = jobDetailFactoryBeanCreator("group1","job1");
CronTriggerFactoryBean c1 = cronTriggerFactoryBeanCreator(j1, "0 0/2 * 1/1 * ? *");
SchedulerFactoryBean s1 = schedulerFactoryBeanCreator(c1);

JobDetailFactoryBean j2 = jobDetailFactoryBeanCreator("group2","job2");
CronTriggerFactoryBean c2 = cronTriggerFactoryBeanCreator(j2, "0 0/2 * 1/1 * ? *");
SchedulerFactoryBean s2 = schedulerFactoryBeanCreator(c2);

JobDetailFactoryBean j3 = jobDetailFactoryBeanCreator("group3","job3");
CronTriggerFactoryBean c3 = cronTriggerFactoryBeanCreator(j3, "0 0/2 * 1/1 * ? *");
SchedulerFactoryBean s3 = schedulerFactoryBeanCreator(c3);
}

@Bean
public JobDetailFactoryBean jobDetailFactoryBeanCreator(String group, String name){
JobDetailFactoryBean factory = new JobDetailFactoryBean();
factory.setJobClass(SpeakingClockJob.class);
factory.setGroup(group);
factory.setName(name);
return factory;
}

@Bean
public CronTriggerFactoryBean cronTriggerFactoryBeanCreator(JobDetailFactoryBean bean, String cron){
CronTriggerFactoryBean stFactory = new CronTriggerFactoryBean();
stFactory.setJobDetail(bean.getObject());
stFactory.setStartDelay(3000);
stFactory.setCronExpression(cron);
return stFactory;
}

@Bean
public SchedulerFactoryBean schedulerFactoryBeanCreator(CronTriggerFactoryBean ct) {
SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
scheduler.setTriggers(ct.getObject());
scheduler.setDataSource(dataSource);
scheduler.setConfigLocation(new ClassPathResource("application.properties"));
return scheduler;
}


@Bean
public DriverManagerDataSource dataSource() {
DriverManagerDataSource data = new DriverManagerDataSource();
data.setDriverClassName("com.mysql.jdbc.Driver");
data.setUrl("jdbc:mysql://localhost:3306/quartz");
data.setUsername("name");
data.setPassword("password");
return data;
}

当我运行上面的代码时,我收到此错误。我如何动态创建 JobDetailFactoryBeanCronTriggerFactoryBeanSchedulerFactoryBean 因为当我必须添加任何作业时,我必须创建这些 bean 来执行作业,所以我想动态创建它。

java.lang.IllegalStateException:BeanFactory尚未注入(inject)@Configuration类

最佳答案

我不知道我是否理解你的要求,但是你可以用不同的属性声明你想要的所有bean,只需更改方法名称即可。例如:

@Bean
public JobDetailFactoryBean jobDetailFactoryBeanOne(){
JobDetailFactoryBean factory = new JobDetailFactoryBean();
factory.setJobClass(SpeakingClockJob.class);
factory.setGroup("group1");
factory.setName("job1");
return factory;
}

然后你必须像这样使用@Autowired:

@Autowired
private JobDetailFactoryBean jobDetailFactoryBeanOne;

@Autowired
@Qualifier("jobDetailFactoryBeanOne")
private JobDetailFactoryBean nameWhatYouWant;

关于java - 如何在beanfactory中注册bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33787368/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com