什么是单体应用

就是只有一个项目启动,并没有启动微服务,多台服务器,多个端口。

单体应用锁的使用

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.1.3.RELEASE</version>
  5. <relativePath/> <!-- lookup parent from repository -->
  6. </parent>
  7. <dependencies>
  8. <dependency>
  9. <groupId>org.springframework.boot</groupId>
  10. <artifactId>spring-boot-starter-web</artifactId>
  11. </dependency>
  12. <dependency>
  13. <groupId>org.springframework.boot</groupId>
  14. <artifactId>spring-boot-starter-data-jpa</artifactId>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.mybatis.spring.boot</groupId>
  18. <artifactId>mybatis-spring-boot-starter</artifactId>
  19. <version>2.1.0</version>
  20. </dependency>
  21. <dependency>
  22. <groupId>mysql</groupId>
  23. <artifactId>mysql-connector-java</artifactId>
  24. </dependency>
  25. <dependency>
  26. <groupId>org.projectlombok</groupId>
  27. <artifactId>lombok</artifactId>
  28. <scope>provided</scope>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-starter-test</artifactId>
  33. <scope>test</scope>
  34. </dependency>
  35. </dependencies>
  1. @RestController
  2. @Slf4j
  3. public class LockController {
  4. private Lock lock =new ReentrantLock();
  5. @RequestMapping("singleLock")
  6. public String singleLock() {
  7. log.info("进入了方法");
  8. lock.lock();
  9. try {
  10. log.info("进入了锁");
  11. Thread.sleep(60000);
  12. } catch (InterruptedException e) {
  13. e.printStackTrace();
  14. } finally {
  15. lock.unlock();
  16. }
  17. return "执行成功!";
  18. }
  19. }

启动项目,然后通过Postman测试
image.png
可以看到单体项目的多个请求访问,lock能够阻塞住请求。
image.png
等待一分钟,释放锁
image.png
接着,我们再次开启一个项目,复制一个Application,将端口8081启动
image.png
再次测试,访问两个项目
image.png
image.png
image.png
锁就失效了,这就是单体应用的时候会出现的问题。