SpringBoot的基本知识在前面大致过了一遍,下面整理余下关于SpringBoot的知识。
1. 使用@Scheduled创建定时任务在Spring Boot的主类中加入@EnableScheduling注解,启用定时任务的配置
@Component
public class ScheduledTasks {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
System.out.println("现在时间:" + dateFormat.format(new Date()));
}
}
2. 使用@Async实现异步调用
1.启动类加上@EnableAsync
@EnableAsync // 开启异步注解
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
2.需要执行异步方法上加入 @Async,在方法上加上@Async之后 底层使用多线程技术:
@Service
@Slf4j
public class UserService {
@Async // 类似与开启线程执行..
public void userThread() {
log.info("##02##");
try {
Thread.sleep(5 * 1000);
} catch (Exception e) {
// TODO: handle exception
}
log.info("##03##");
// new Thread(new Runnable() {
// public void run() {
// log.info("##02##");
// try {
// Thread.sleep(5 * 1000);
// } catch (Exception e) {
// // TODO: handle exception
// }
// log.info("##03##");
// }
// }).start();
}
}
3. 自定义参数
配置文件:
name=ylw
配置文件值:
@Value("${name}")
private String name;
@ResponseBody
@RequestMapping("/getValue")
public String getValue() {
return name;
}
4. 多环境配置
spring.profiles.active=pre
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境
5. 修改端口号
server.port=8888
server.context-path=/ylw
6. yml 使用
SpringBoot 默认读取 application.yml|properties
YML 比properties配置文件更加节约 简约(结构)
创建application.yml:
server:
port: 8090
context-path: /itmayiedu
7. SpringBoot拦截器
1.创建拦截器(创建模拟登录拦截器,验证请求是否有token参数)
@Slf4j
@Component
public class LoginIntercept implements HandlerInterceptor {
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
log.info("开始拦截登录请求....");
String token = request.getParameter("token");
if (StringUtils.isEmpty(token)) {
response.getWriter().println("not found token");
return false;
}
return true;
}
}
2.注册拦截器
@Configuration
public class WebAppConfig {
@Autowired
private LoginIntercept loginIntercept;
@Bean
public WebMvcConfigurer WebMvcConfigurer() {
return new WebMvcConfigurer() {
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginIntercept).addPathPatterns("/*");
};
};
}
}
3.拦截器与过滤器区别
拦截器是AOP( Aspect-Oriented Programming)的一种实现,底层通过动态代理模式完成。
- 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
- 拦截器不依赖于servlet容器,而过滤器依赖于servlet容器。
- 拦截器只能对Controller请求起作用,而过滤器则可以对几乎所有的请求起作用。
- 在Controller的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
过滤器应用场景:设置编码字符、过滤铭感字符 拦截器应用场景:拦截未登陆用户、审计日志()
8.发布打包1.Jar类型打包方式
- 使用mvn celan package 打包
- 使用java –jar 包名
2.war类型打包方式
- 使用mvn celan package 打包
- 使用java –jar 包名
3.外部Tomcat运行 使用mvn celan package 打包 将war包 放入到tomcat webapps下运行即可。 注意:springboot2.0内置tomcat8.5.25,建议使用外部Tomcat9.0版本运行即可,否则报错版本不兼容。
打包常见错误,如果报错没有主清单,在pom文件中新增:
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8
org.springframework.boot
spring-boot-maven-plugin
com.app.App
repackage
Java jar 执行的时候报错 ’ 不是内部或外部命令 说明 jdk环境没有安装!
未完待续。。。
总结