0
点赞
收藏
分享

微信扫一扫

微服务技术系列教程(13) - SpringBoot - 其它

木匠0819 2022-03-23 阅读 19


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)的一种实现,底层通过动态代理模式完成。

  1. 拦截器是基于java的反射机制的,而过滤器是基于函数回调。
  2. 拦截器不依赖于servlet容器,而过滤器依赖于servlet容器。
  3. 拦截器只能对Controller请求起作用,而过滤器则可以对几乎所有的请求起作用。
  4. 在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环境没有安装!

未完待续。。。

总结

微服务技术系列教程(13) - SpringBoot - 其它_拦截器



举报

相关推荐

0 条评论