当前位置: 首页 > news >正文

Spring Boot 框架总结

Spring Boot 框架总结

1. springboot的引言

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的 初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不 再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应 用开发领域(rapid application development)成为领导者。

springboot(微框架) = springmvc(控制器) + spring(项目管理)


2. springboot的特点

  1. 创建独立的Spring应用程序

  2. 嵌入的Tomcat,无需部署WAR文件

  3. 简化Maven配置

  4. 自动配置Spring

  5. 没有XML配置


3. springboot的环境搭建

环境要求:

  1. MAVEN 3.x+
  2. Spring FrameWork 5.x+
  3. JDK8.x +
  4. Spring Boot 2.2.x+
3.1 项目中引入依赖
    <!--继承springboot的父项目--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.5.RELEASE</version></parent><dependencies><!--引入springboot的web支持--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
3.2 引入配置文件

项目中src/main/resources/application.yml

3.3 建包并创建控制器
//在项目中创建指定的包结构
/*com+| baizhi+| controller */ @Controller@RequestMapping("/hello")public class HelloController {@RequestMapping("/hello")@ResponseBodypublic String hello(){System.out.println("======hello world=======");return "hello";}}
3.4 编写入口类
//在项目中如下的包结构中创建入口类 Application
/*com+| baizhi                  */@SpringBootApplicationpublic class Application {public static void main(String[] args) {SpringApplication.run(Application.class,args);}}
3.5 运行main启动项目
o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8989 (http)
com.baizhi.Application : Started Application in 2.152 seconds (JVM running for 2.611)//说明:  出现以上日志说明启动成功
3.6 访问项目
//注意: springboot的项目默认没有项目名
//访问路径:  http://localhost:8080/hello/hello

4. 启动tomcat端口占用问题

server:port: 8989                 #用来指定内嵌服务器端口号context-path: /springboot  #用来指定项目的访问路径

5. springboot相关注解说明

# Spring boot通常有一个名为 xxxApplication的类,入口类中有一个main方法, 在main方法中使用SpringApplication.run(xxxApplication.class,args)启动springboot应用的项目。# @SpringBootApplication 注解等价于: @SpringBootConfiguration           标识注解,标识这是一个springboot的配置类@EnableAutoConfiguration           自动与项目中集成的第三方技术进行集成@ComponentScan			 							 扫描入口类所在子包以及子包后代包中注解	

6. springboot中配置文件的拆分

#说明: 在实际开发过程中生产环境和测试环境有可能是不一样的 因此将生产中的配置和测试中的配置拆分开,是非常必要的在springboot中也提供了配置文件拆分的方式. 这里以生产中项名名称不一致为例:生产中项目名为: cmfz测试中项目名为: springboot端口同时为:   8080拆分如下:#主配置文件:application.yml	#用来书写相同的的配置server:port: 8080 #生产和测试为同一个端口#生产配置文件:application-pord.ymlserver:context-path: /cmfz#测试配置文件:application-dev.ymlserver:context-path: /springboot

7.springboot中管理对象创建

7.1 管理单个对象

在springboot中可以管理自定义的简单组件对象的创建可以直接使用注解形式创建。

# 1.使用 @Repository  @Service @Controller 以及@Component管理不同简单对象如: 比如要通过工厂创建自定义User对象:
@Component
public class User {private String id;private String name;......
}	
# 2.通过工厂创建之后可以在使用处任意注入该对象如:在控制器中使用自定义简单对象创建
@Controller
@RequestMapping("hello")
public class HelloController {@Autowiredprivate User user;......
}

7.2 管理多个对象

在springboot中如果要管理复杂对象必须使用@Configuration + @Bean注解进行管理

# 1.管理复杂对象的创建
@Configuration(推荐)|@Component(不推荐)
public class Beans {@Beanpublic Calendar getCalendar(){return Calendar.getInstance();}
}
# 2.使用复杂对象
@Controller
@RequestMapping("hello")
public class HelloController {@Autowiredprivate Calendar calendar;......
}
# 注意: 1.@Configuration 配置注解主要用来生产多个组件交给工厂管理  (注册形式)2.@Component     用来管理单个组件             

8. springboot中集成jsp展示

8.1 引入jsp的集成jar包
<dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version>
</dependency><!--2.2.5 之后最新版本中无须引入-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId>
</dependency><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId>
</dependency>
8.2 引入jsp运行插件
<build><finalName>springboot_day1</finalName><!--引入jsp运行插件--><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><jvmArguments>-Dfile.encoding=UTF-8</jvmArguments></configuration></plugin></plugins>
</build>
8.3 配置视图解析器
#在配置文件中引入视图解析器
spring:mvc:view:prefix: /   	# /代表访问项目中webapp中页面suffix: .jsp 
8.4 启动访问jsp页面
http://localhost:8989/cmfz/index.jsp

9. springboot集成mybatis

9.1 引入依赖
<!--整合mybatis-->
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.2</version>
</dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version>
</dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version>
</dependency>>说明:由于springboot整合mybatis版本中默认依赖mybatis 因此不需要额外引入mybati版本,否则会出现冲突
9.2 配置配置文件
spring:mvc:view:prefix: /suffix: .jspdatasource:type: org.apache.commons.dbcp.BasicDataSource   #指定连接池类型driver-class-name: com.mysql.jdbc.Driver        #指定驱动url: jdbc:mysql://localhost:3306/cmfz           #指定urlusername: root									#指定用户名password: root								 	#指定密码
9.3 加入mybatis配置
#配置文件中加入如下配置:mybatis:mapper-locations: classpath:com/baizhi/mapper/*.xml  #指定mapper配置文件位置type-aliases-package: com.baizhi.entity              #指定起别名来的类
//入口类中加入如下配置:
@SpringBootApplication
@MapperScan("com.baizhi.dao")   //必须在入口类中加入这个配置
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class,args);}
}
9.4 建表
CREATE TABLE `t_clazz` (`id` varchar(40) NOT NULL,`name` varchar(80) DEFAULT NULL,`no` varchar(90) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
9.5 开发实体类
public class Clazz {private String id;private String name;private String no;//get set 方法省略....
}
9.6 开发DAO接口以及Mapper
public interface ClazzDAO {List<Clazz> findAll();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.baizhi.dao.ClazzDAO"><select id="findAll" resultType="Clazz">select * from t_clazz </select>
</mapper>
9.7 开发Service以及实现
//接口
public interface ClazzService {List<Clazz> findAll();
}
//实现
@Service
@Transactional
public class ClazzServiceImpl implements  ClazzService {@Autowiredprivate ClazzDAO clazzDAO;@Transactional(propagation = Propagation.SUPPORTS)@Overridepublic List<Clazz> findAll() {return clazzDAO.findAll();}
}
9.8 引入测试依赖
 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>
9.9 编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class TestClazzService {@Autowiredprivate ClazzService clazzService;@Testpublic void test(){List<Clazz> all = clazzService.findAll();for (Clazz clazz : all) {System.out.println(clazz);}}
}

10.开启jsp页面热部署

10.1 引言

在springboot中默认对jsp运行为生产模式,不允许修改内容保存后立即生效,因此在开发过程需要调试jsp页面每次需要重新启动服务器这样极大影响了我们的效率,为此springboot中提供了可以将默认的生产模式修改为调试模式,改为调试模式后就可以保存立即生效,如何配置为测试模式需要在配置文件中加入如下配置即可修改为开发模式。

10.2 配置开启测试模式
server:port: 8989jsp-servlet:init-parameters:development: true  #开启jsp页面的调试模式

11.springboot中devtools热部署

11.1 引言

为了进一步提高开发效率,springboot为我们提供了全局项目热部署,日后在开发过程中修改了部分代码以及相关配置文件后,不需要每次重启使修改生效,在项目中开启了springboot全局热部署之后只需要在修改之后等待几秒即可使修改生效。

11.2 开启热部署
11.2.1 项目中引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional>
</dependency>
11.2.2 设置idea中支持自动编译
# 1.开启自动编译Preferences | Build, Execution, Deployment | Compiler -> 勾选上 Build project automatically 这个选项# 2.开启允许在运行过程中修改文件ctrl + alt + shift + / ---->选择1.Registry ---> 勾选 compiler.automake.allow.when.app.running 这个选项
11.2.3 启动项目检测热部署是否生效
# 1.启动出现如下日志代表生效
2019-07-17 21:23:17.566  INFO 4496 --- [  restartedMain] com.baizhi.InitApplication               : Starting InitApplication on chenyannandeMacBook-Pro.local with PID 4496 (/Users/chenyannan/IdeaProjects/ideacode/springboot_day1/target/classes started by chenyannan in /Users/chenyannan/IdeaProjects/ideacode/springboot_day1)
2019-07-17 21:23:17.567  INFO 4496 --- [  restartedMain] com.baizhi.InitApplication               : The following profiles are active: dev
2019-07-17 21:23:17.612  INFO 4496 --- [  restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@66d799c5: startup date [Wed Jul 17 21:23:17 CST 2019]; root of context hierarchy
2019-07-17 21:23:18.782  INFO 4496 --- [  restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8989 (http)
2019-07-17 21:23:18.796  INFO 4496 --- [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2019-07-17 21:23:18.797  INFO 4496 --- [  restartedMain] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.20

注意:日志出现restartedMain代表已经生效,在使用热部署时如果遇到修改之后不能生效,请重试重启项目在试

12. logback日志的集成

12.1 logback简介

Logback是由log4j创始人设计的又一个开源日志组件。目前,logback分为三个模块:logback-core,logback-classic和logback-access。是对log4j日志展示进一步改进

12.2 日志的级别
> DEBUG < INFO < WARN < ERROR   
>
> 日志级别由低到高:  日志级别越高输出的日志信息越少
12.3 项目中日志分类
> 日志分为两类
>
>  一种是rootLogger :  用来监听项目中所有的运行日志 包括引入依赖jar中的日志 
>
>  一种是logger :      用来监听项目中指定包中的日志信息
12.4 java项目中使用
12.4.1 logback配置文件
	> logback的配置文件必须放在项目根目录中 且名字必须为logback.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration><!--定义项目中日志输出位置--><appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"><!--定义项目的日志输出格式--><!--定义项目的日志输出格式--><layout class="ch.qos.logback.classic.PatternLayout"><pattern> [%p] %d{yyyy-MM-dd HH:mm:ss} %m %n</pattern></layout></appender><!--项目中跟日志控制--><root level="INFO"><appender-ref ref="stdout"/></root><!--项目中指定包日志控制--><logger name="com.baizhi.dao" level="DEBUG"/></configuration>
12.4.2 具体类中使用日志
@Controller
@RequestMapping("user")
public class UserController {private Logger logger = org.slf4j.LoggerFactory.getLogger(this.getClass());@RequestMapping("findAll")public String findAll(String name) {logger.debug("debug接收的姓名是: "+name);logger.info("info接收的姓名是: "+name);logger.warn("warn接收的姓名是: "+name);logger.error("error接收的姓名是: "+name);return "index";}
}
12.4.3 使用默认日志配置
logging:level:root: debugcom.baizhi.dao: debugpath: /Users/chenyannan/aa.logfile: bbb.log

13. 切面编程

13.1 引言

springboot是对原有项目中spring框架和springmvc的进一步封装,因此在springboot中同样支持spring框架中AOP切面编程,不过在springboot中为了快速开发仅仅提供了注解方式的切面编程.

13.2 使用
13.2.1 引入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>
13.2.2 相关注解
/**@Aspect 用来类上,代表这个类是一个切面@Before 用在方法上代表这个方法是一个前置通知方法 @After 用在方法上代表这个方法是一个后置通知方法 @Around 用在方法上代表这个方法是一个环绕的方法@Around 用在方法上代表这个方法是一个环绕的方法
**/
13.2.3 前置切面
@Aspect
@Component
public class MyAspect {@Before("execution(* com.baizhi.service.*.*(..))")public void before(JoinPoint joinPoint){System.out.println("前置通知");joinPoint.getTarget();//目标对象joinPoint.getSignature();//方法签名joinPoint.getArgs();//方法参数}
}
13.2.4 后置切面
@Aspect
@Component
public class MyAspect {@After("execution(* com.baizhi.service.*.*(..))")public void before(JoinPoint joinPoint){System.out.println("后置通知");joinPoint.getTarget();//目标对象joinPoint.getSignature();//方法签名joinPoint.getArgs();//方法参数}
}
> **注意: 前置通知和后置通知都没有返回值,方法参数都为joinpoint**
13.2.5 环绕切面
@Aspect
@Component
public class MyAspect {@Around("execution(* com.baizhi.service.*.*(..))")public Object before(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {System.out.println("进入环绕通知");proceedingJoinPoint.getTarget();//目标对象proceedingJoinPoint.getSignature();//方法签名proceedingJoinPoint.getArgs();//方法参数Object proceed = proceedingJoinPoint.proceed();//放行执行目标方法System.out.println("目标方法执行之后回到环绕通知");return proceed;//返回目标方法返回值}
}

注意: 环绕通知存在返回值,参数为ProceedingJoinPoint,如果执行放行,不会执行目标方法,一旦放行必须将目标方法的返回值返回,否则调用者无法接受返回数据


14. 文件上传下载

14.1 文件上传
13.1.1 准备上传页面
<form action="路径...." method="post" enctype="multipart/form-data"><input type="file" name="aa"><input type="submit" value="上传">
</form>
<!--1. 表单提交方式必须是post2. 表单的enctype属性必须为multipart/form-data3. 后台接受变量名字要与文件选择name属性一致
-->
14.1.2 编写控制器
@Controller
@RequestMapping("/file")
public class FileController {@RequestMapping("/upload")public String upload(MultipartFile aa, HttpServletRequest request) throws IOException {String realPath = request.getRealPath("/upload");aa.transferTo(new File(realPath,aa.getOriginalFilename()));//文件上传return "index";}
}
14.1.3 修改文件上传大小
#上传时出现如下异常:  上传文件的大小超出默认配置  默认10M
nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (38443713) exceeds the configured maximum (10485760)
#修改上传文件大小:
spring:http:multipart:max-request-size: 209715200  #用来控制文件上传大小的限制max-file-size: 209715200 #用来指定服务端最大文件大小   
14.2 文件下载
14.2.1 提供下载文件链接
<a href="../file/download?fileName=corejava.txt">corejava.txt</a>
14.2.2 开发控制器
@RequestMapping("/download")
public void download(String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception {String realPath = request.getRealPath("/upload");FileInputStream is = new FileInputStream(new File(realPath, fileName));ServletOutputStream os = response.getOutputStream();response.setHeader("content-disposition","attachment;fileName="+ URLEncoder.encode(fileName,"UTF-8"));IOUtils.copy(is,os);IOUtils.closeQuietly(is);IOUtils.closeQuietly(os);}

15. 拦截器

15.1 开发拦截器
public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {System.out.println("======1=====");return true;//返回true 放行  返回false阻止}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception {System.out.println("=====2=====");}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) throws Exception {System.out.println("=====3=====");}
}
15.2 配置拦截器
@Component
public class InterceptorConfig implements WebMvcConfigurer {//用来加入拦截器相关配置 参数1:InterceptorRegistry 拦截器注册对象@Overridepublic void addInterceptors(InterceptorRegistry registry) {//添加那个拦截器registry.addInterceptor(new MyInterceptor1()).addPathPatterns("/**")//拦截所有控制器请求.excludePathPatterns("/user/findAll");//排除指定的请求;registry.addInterceptor(new MyInterceptor2()).addPathPatterns("/**")//拦截所有控制器请求.excludePathPatterns("/user/findAll");//排除指定的请求;}
}

16. war包部署

16.1 设置打包方式为war

war

16.2 在插件中指定入口类
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!--使用热部署出现中文乱码解决方案--><configuration><fork>true</fork><!--增加jvm参数--><jvmArguments>-Dfile.encoding=UTF-8</jvmArguments><!--指定入口类--><mainClass>com.baizhi.Application</mainClass></configuration></plugin></plugins>
</build>	
16.3 排除内嵌的tomcat
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope>   <!--去掉内嵌tomcat-->
</dependency><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><scope>provided</scope>  <!--去掉使用内嵌tomcat解析jsp-->
</dependency>
16.4 配置入口类
//1.继承SpringBootServletInitializer
//2.覆盖configure方法
public class Application extends SpringBootServletInitializer{public static void main(String[] args) {SpringApplication.run(Application.class,args);}@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(Application.class);}
}
16.5 打包测试
/* 一旦使用war包部署注意:1. application.yml 中配置port context-path 失效2. 访问时使用打成war包的名字和外部tomcat端口号进行访问项目
*/

相关文章:

Spring Boot 框架总结

Spring Boot 框架总结 1. springboot的引言 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化Spring应用的 初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不 再需要定义样板化的配置。通过这种方式&#xff0…...

【数据结构】第五站:带头双向循环链表

目录 一、链表的八种结构 二、带头双向循环链表的实现 1.链表的定义 2.链表的接口定义 3.接口的具体实现 三、带头双向循环链表的完整代码 四、顺序表和链表的区别 一、链表的八种结构 我们已经知道链表可以有以下三种分法 而这三种结构又可以排列组合&#xff0c;形成八…...

Springboot生成二维码

Springboot生成二维码整合 我们使用两种方式&#xff0c;去生成二维码&#xff0c;但是其实&#xff0c;二维码的生成基础&#xff0c;都是zxing包&#xff0c;这是Google开源的一个包&#xff0c;第一种是使用原始的zxing方式去实现&#xff0c;第二种是使用hutool来实现&…...

“独裁者”何小鹏,再造小鹏汽车

文丨智能相对论 作者丨沈浪 如果没有何小鹏&#xff0c;小鹏汽车将失去灵魂。 2014年&#xff0c;夏珩、何涛等人在广州组建小鹏汽车&#xff08;当时还叫“橙子汽车”&#xff09;&#xff0c;何小鹏还只是股权投资人。 夏珩、何涛原任职于广汽&#xff0c;负责新能源汽车…...

数据结构 | 泛型 | 擦除机制| 泛型的上界

目录 ​编辑 1.泛型 1.1Object类引出泛型概念 2.泛型语法 2.1泛型编写代码 3.泛型的机制 3.1擦除机制 4.泛型的上界 4.1泛型上界的语法 4.2泛型上界的使用 5.泛型方法 5.1泛型方法语法 5.2泛型方法的使用 1.泛型 一般的类和方法中&#xff0c;只能使用具体的代码…...

C++拷贝构造函数(复制构造函数)详解

拷贝和复制是一个意思&#xff0c;对应的英文单词都是copy。对于计算机来说&#xff0c;拷贝是指用一份原有的、已经存在的数据创建出一份新的数据&#xff0c;最终的结果是多了一份相同的数据。例如&#xff0c;将 Word 文档拷贝到U盘去复印店打印&#xff0c;将 D 盘的图片拷…...

python学习——多线程

python学习——多线程概念python中线程的开发线程的启动线程的退出和传参threading的属性和方法threading实例的属性和方法多线程daemon线程和non-demone线程daemon线程的应用场景线程的jointhreading.local类线程的延迟执行&#xff1a;Timer线程同步Event 事件Lock ——锁加锁…...

SAP 系统中过账码or记账码

SAP中过账码和记账码是指同一个事物。 在实际业务中&#xff0c;记账码就是只有“借”和“贷”&#xff0c; 而SAP中Posting Code肩负着更多的任务&#xff1a; 1&#xff09;界定科目类型&#xff0c; 2&#xff09;借贷方向&#xff0c; 3&#xff09;凭证输入时画面上的字…...

【FreeRTOS(一)】FreeRTOS新手入门——初识FreeRTOS

初识FreeRTOS一、实时操作系统概述1、概念2、RTOS的必要性3、RTOS与裸机的区别4、FreeRTOS的特点二、FreeRTOS的架构三、FreeRTOS的代码架构一、实时操作系统概述 1、概念 RTOS&#xff1a;根据各个任务的要求&#xff0c;进行资源&#xff08;包括存储器、外设等&#xff09…...

Python中 __init__的通俗解释是什么?

__init__是Python中的一个特殊方法&#xff0c;用于在创建对象时初始化对象的属性。通俗来讲&#xff0c;它就像是一个构造函数&#xff0c;当我们创建一个类的实例时&#xff0c;__init__方法会被自动调用&#xff0c;用于初始化对象的属性。 举个例子&#xff0c;如果我们定义…...

网友真实面试总结出的自动化测试面试题库

目录 常规问题 手工测试部 自动化测试 自动化测试面试题2&#xff1a;selenium篇 常规问题 1、如何快速深入的了解移动互联网领域的应用 &#xff08;答案&#xff1a;看http协议 restful api知识 json加1分&#xff09; 2、对xx应用自己会花多久可以在业务上从入门到精通&…...

2023 年最佳 C++ IDE

文章目录前言1. Visual Studio2. Code::Blocks3. CLion4. Eclipse CDT&#xff08;C/C 开发工具&#xff09;5. CodeLite6. Apache NetBeans7. Qt Creator8. Dev C9. C Builder10. Xcode11. GNAT Programming Studio12. Kite总结前言 要跟踪极佳 IDE&#xff08;集成开发环境&…...

在Ubuntu上使用VSCode编译MySQL Connector/C连接库

首先下载并解压MySQL Connector/C源码&#xff0c;然后执行以下步骤&#xff1a; 1、安装MySQL Connector/C依赖&#xff1a;在终端中输入以下命令来安装MySQL Connector/C的依赖项&#xff1a; sudo apt-get install build-essential cmake 2、下载并解压MySQL Connector/C源…...

单声道数字音频放大器AD87589

AD87589是一种集成音频系统解决方案&#xff0c;嵌入数字音频处理、功率级放大器和立体声2Vrms线路驱动器。 AD87589具有可编程转换速率控制的输出缓冲器&#xff0c;可直接驱动一个&#xff08;单声道&#xff09;或两个&#xff08;立体声&#xff09;扬声器。此外&#xff0…...

网络的UDP协议和TCP协议

协议&#xff1a;数据在网络中的传输规则&#xff0c;常见的协议有 UDP协议和TCP协议 协议&#xff1a;计算机网络中&#xff0c;连接和通信的规则被称为网络通信协议 UDP协议&#xff1a;用户数据报协议&#xff0c;是面向无连接通信协议&#xff0c;速度快&#xff0c;有大小…...

【JaveEE】多线程之阻塞队列(BlockingQueue)

目录 1.了解阻塞队列 2.生产者消费者模型又是什么&#xff1f; 2.1生产者消费者模型的优点 2.1.1降低服务器与服务器之间耦合度 2.1.2“削峰填谷”平衡消费者和生产的处理能力 3.标准库中的阻塞队列&#xff08;BlockingQueue&#xff09; 3.1基于标准库&#xff08;Bloc…...

分布式ELK日志监控系统环境搭建

文章目录1.1为什么需要监控项目日志1.2ELK日志监控系统介绍1.3ELK的工作流程1.4ELK环境搭建1.4.1Elasticsearch的安装1.4.2Kibana的安装1.4.3Logstash的安装1.4.4数据源配置1.4.5日志监测测试1.4.6日志数据可视化展示1.1为什么需要监控项目日志 项目日志是记录项目运行过程中产…...

【数据结构刷题集】链表经典习题

&#x1f63d;PREFACE&#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐ 评论&#x1f4dd;&#x1f4e2;系列专栏&#xff1a;数据结构刷题集&#x1f50a;本专栏涉及到题目是数据结构专栏的补充与应用&#xff0c;只更新相关题目&#xff0c;旨在帮助提高代码熟练度&#x…...

JavaSE(3.27) 异常

学习不要眼高手低&#xff0c;学习是一点点积累的。即使你现在很菜&#xff0c;坚持学一个学期不会差的&#xff01;只要花时间学习&#xff0c;每天都是进步的&#xff0c;这些进步可能你现在看不到&#xff0c;但是不要小瞧了积累效应&#xff0c;30天&#xff0c;60天&#…...

【看门狗】我说的是定时器不是狗啊

单片机在运行中死机了&#xff0c;你或许只能按2下电源键&#xff08;重启&#xff09;或1下复位键。 这里简单说一下重启和复位&#xff1a; 从RESET引脚复位&#xff0c;只有MCU复位。而外设看情况&#xff0c;有的可能会有MCU同步复位或者重新初始化。也有可能一些保持复位…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...