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文件中新增:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <maimClass>com.app.App</maimClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
Java jar 执行的时候报错 ’ 不是内部或外部命令 说明 jdk环境没有安装!
未完待续。。。
总结