项目打包跳过测试
通过上下文的获取配置类的地方需要延迟加载
// 通过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());
}
}
}
}
}
springboot 拦截器返回json字符串给前端页面
在intercept中加入以下代码:
private void returnJson(HttpServletResponse response, String json){
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=utf-8");
try {
writer = response.getWriter();
writer.print(json);
} catch (IOException e) {
LOGGER.error("response error",e);
} finally {
if (writer != null)
writer.close();
}
}