spring專案遇到的小問題
阿新 • • 發佈:2021-01-26
技術標籤:javaspring boot
專案打包跳過測試
通過上下文的獲取配置類的地方需要延遲載入
// 通過applicationContext上下文獲取Config類
public static void setApplicationContext(ApplicationContext applicationContext) {
config = applicationContext.getBean(Config.class);
}
@Component
@PropertySource("classpath:/properties/camera.properties" )
public class InitialCamera implements InitializingBean {
@Autowired
private CameraController cameraController;
@Value("${camera.ip}")
private String ip;
@Value("${camera.username}")
private String username;
@Value("${camera.password}")
private String password;
@Value("${camera.channel}")
private String channel;
@Value("${camera.stream}")
private String stream;
@Value("${camera.pushPort}")
private String pushPort;
// 存放定時任務
private static Map<String, Long> _TaskMap = new HashMap<>();
@Override
public void afterPropertiesSet() throws Exception {
// CameraPojo pojo = new CameraPojo();
// pojo.setIp(ip);
// pojo.setUsername(username);
// pojo.setPassword(password);
// pojo.setChannel(channel);
// pojo.setStream(stream);
// pojo.setPushPort(pushPort);
//
// Map<String, Object> stringObjectMap = cameraController.getStringObjectMap(pojo);
// System.out.println(stringObjectMap);
// 新增定時任務 延遲20s啟動不然可能啟動失敗
_TaskMap.put("task-1", Instant.now().plusSeconds(20).toEpochMilli()); // 延遲 3s
// 呼叫無限迴圈實現延遲任務
new Thread( ) {
@Override
public void run() {
loopTask();
}
}.start();
}
/**
* 無限迴圈實現延遲任務
*/
public void loopTask() {
Long itemLong = 0L;
while (true) {
Iterator it = _TaskMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
itemLong = (Long) entry.getValue();
// 有任務需要執行
if (Instant.now().toEpochMilli() >= itemLong) {
// 延遲任務,業務邏輯執行
System.out.println("執行任務:" + entry.getKey() +
" ,執行時間:" + LocalDateTime.now());
// 刪除任務
CameraPojo pojo = new CameraPojo();
pojo.setIp(ip);
pojo.setUsername(username);
pojo.setPassword(password);
pojo.setChannel(channel);
pojo.setStream(stream);
pojo.setPushPort(pushPort);
Map<String, Object> stringObjectMap = cameraController.getStringObjectMap(pojo);
System.out.println(stringObjectMap);
_TaskMap.remove(entry.getKey());
}
}
}
}
}