2017-10-21 6 views
0

ApplicationListenerを実装し、メソッド:onApplicationEvent(ContextRefreshedEventイベント)をオーバーライドして、StartupListenerを作成しました。Springブートcron式のスケジューリング、ApplicationListenerのonApplicationEventの呼び出し

このメソッドでは、fileに対応するブール値がtrueであるかどうかに基づいて、いくつかのファイルを作成しようとしています。

このブール値は、@ valueアノテーションを使用して "application.properties"ファイルから読み取られています。

このStartupListenerは正常に動作します。

今、私は、私は私のメインクラスファイルに@EnableScheduling追加、および方法を使用して新しいJavaファイルを作成し、それらをスケジュールすることにより、これらのファイルを生成したい:

@Component 
public class FileGenerationScheduler { 

    @Autowired 
    StartupListener startupListener; 

    @Scheduled(cron = "${file.gen.cron}") 
    public void generateFileWithCron() { 
    startupListener.onApplicationEvent(null); //passing null here 
    } 
} 

このメソッドは、指定した上で呼び出されますすべての@Valueブール値は "application.properties"から読み取られません。だから、デフォルトでは、これらの値はfalseになります(インスタンス変数)

@Value("${create.file.some.merchant}") 
private boolean createMerchantAFile; 

これはStartupListener中に存在し、今ではfalseです。だから何も作られていない。

スケジューラ経由で呼び出された場合でも、これらの値がapplication.propから読み取られるようにするにはどうすればよいですか?

答えて

0

サービスを作成し、プロパティfindから値を取得するなど、すべてのロジックを追加します。そのBeanをリスナーとスケジューラークラスの中に注入します。

関連する問題