此方法不起作用 如何读取我的属性文件并在我的Scheduled中注入我的变量,如: @Scheduled(fixedRateString =“$ {frequence.move}”)
@Configuration
@PropertySource( "resources.properties")
public class Scheduler {
private static ApplicationContext applicationContext=new AnnotationConfigApplicationContext(
Scheduler.class);
@Autowired
public Environment envi;
public static final String time=applicationContext.getBean(Environment.class).getProperty("frequence.move";
@Scheduled(fixedRateString ="${frequence.move}")
public void doTask() {
AnnotationConfigApplicationContext applicationContext
= new AnnotationConfigApplicationContext(BatchConfigEMS.class);
JobLauncher launcher = (JobLauncher) applicationContext.getBean(JobLauncher.class);
Job job = (Job) applicationContext.getBean(Job.class);
try {
test();
launcher.run(job, new JobParameters());
} catch (JobExecutionAlreadyRunningException e) {
e.printStackTrace();
} catch (JobRestartException e) {
e.printStackTrace();
} catch (JobInstanceAlreadyCompleteException e) {
e.printStackTrace();
} catch (JobParametersInvalidException e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
您的代码在某些方面存在缺陷。基本上,只要您觉得需要创建ApplicationContext
的实例,就应该停下来,思考并采取行动。通常这是一个表明你做错事的标志。
要让bean使用自动布线,可以根据需要将bean连接到类中。
首先让您的Scheduler
成为@Component
而不是@Configuration
并自动连接所需的bean。
@Component
public class Scheduler {
@Autowired
private JobLauncher launcher;
@Autowired
private Job job;
@Scheduled(fixedRateString ="${frequence.move}")
public void doTask() throws JobExecutionException {
test();
launcher.run(job, new JobParameters());
}
}
在BatchConfigEMS
添加@PropertySource
并确保您拥有public static
类型的PropertySourcesPlaceholderConfigurer
bean。
@Configuration
@PropertySource( "resources.properties")
public class BatchConfigEMS {
@Bean
public static PropertySourcesPlaceholderConfigurer configurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
假设您有一个Web应用程序加载配置的应用程序,其他所有内容都应自动连接。由于添加了配置器,占位符应该被替换。
答案 1 :(得分:0)
这是我的文件(resource.properties)
fournisseur.key =false
produit.key = true
frequence.move = 5000
frequence.delete = 5000
我想从我的文件属性中取出这个键[frequence.move] 并在这里使用它:
@Scheduled(fixedRateString = "${frequence.move}")
public void doTask() {
all the code here it work
}
我写下你建议我的内容,但这不起作用