2 回答
TA贡献1798条经验 获得超3个赞
我认为你需要拆分你的方法。在计划中,它不必有回报。我的意思是它需要:
@Scheduled(fixedDelay = 10000)
public void getProperty(){
String value = caculateValueFromProperties();
//do something you want. Bellow my example.
log.info("Value after calculate "+value);
}
//拆分新方法
public String caculateValueFromProperties() {
Properties properties = new Properties();
InputStreamReader in = null;
String value = null;
try {
in = new InputStreamReader(new FileInputStream("/opt/myapp/app.properties"), "UTF-8");
properties.load(in);
value = properties.getProperty("name");
logger.info("\n\n\t\tName: " + value + "\n\n");
}
finally {
if (null != in) {
try {
in.close();
}
catch (IOException ex) {}
}
}
return value;
}
使用 @Scheduled 注释的方法必须有 void 返回,并且不能有任何参数。这是因为它是周期性的,传递参数或接收返回值没有多大意义。
TA贡献1806条经验 获得超5个赞
通过创建一个 Spring Config 文件让它工作:
@Configuration
@EnableScheduling
public class PropertiesUtilConfig {
@Bean
public PropertiesUtil task() {
return new PropertiesUtil();
}
}
PropertiesUtil 不需要@EnableScheduling 注解,只需要@Controller:
@Controller
public class PropertiesUtil {
@Scheduled(fixedDelay = 10000)
public String getPropertyValue() throws IOException {
// inline code
}
}
添加回答
举报