通过注释将属性文件中的外化值注入Spring

时间:2016-05-24 11:21:01

标签: spring

此方法不起作用 如何读取我的属性文件并在我的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();
    }

}

2 个答案:

答案 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 
}

我写下你建议我的内容,但这不起作用