Spring Boot 框架总结

2023-11-13

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")
                    @ResponseBody
                    public String hello(){
                      System.out.println("======hello world=======");
                      return "hello";
                    }
                  }
3.4 编写入口类
//在项目中如下的包结构中创建入口类 Application
/*
	com
		+| baizhi                  */
            @SpringBootApplication
            public 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.yml
    			server:
    				context-path: /cmfz
    #测试配置文件:
    		application-dev.yml
    			server:
    				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 {
    @Autowired
    private User user;
  	......
}

7.2 管理多个对象

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

# 1.管理复杂对象的创建
@Configuration(推荐)|@Component(不推荐)
public class Beans {
    @Bean
    public Calendar getCalendar(){
        return Calendar.getInstance();
    }
}
# 2.使用复杂对象
@Controller
@RequestMapping("hello")
public class HelloController {
    @Autowired
    private 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: .jsp
  datasource:
    type: org.apache.commons.dbcp.BasicDataSource   #指定连接池类型
    driver-class-name: com.mysql.jdbc.Driver        #指定驱动
    url: jdbc:mysql://localhost:3306/cmfz           #指定url
    username: 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 {
    @Autowired
    private ClazzDAO clazzDAO;
    
    @Transactional(propagation = Propagation.SUPPORTS)
    @Override
    public 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 {

    @Autowired
    private ClazzService clazzService;

    @Test
    public 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: 8989
  jsp-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: debug
    com.baizhi.dao: debug
  path: /Users/chenyannan/aa.log
  file: 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. 表单提交方式必须是post
	2. 表单的enctype属性必须为multipart/form-data
	3. 后台接受变量名字要与文件选择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 {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
        System.out.println("======1=====");
        return true;//返回true 放行  返回false阻止
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("=====2=====");
    }

    @Override
    public 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 拦截器注册对象
    @Override
    public 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);
    }
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }
}
16.5 打包测试
/* 一旦使用war包部署注意:
	1. application.yml 中配置port context-path 失效
	2. 访问时使用打成war包的名字和外部tomcat端口号进行访问项目
*/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 框架总结 的相关文章

  • Java 比 Xmx 参数消耗更多内存

    我有一个非常简单的 Web 服务器类 基于 Java SEHttpServer class 当我使用此命令启动编译的类来限制内存使用时 java Xmx5m Xss5m Xrs Xint Xbatch Test 现在如果我使用检查内存top
  • 在 Gradle 中运行自定义测试任务而无需重新编译

    我有一个 Gradle 自定义测试任务来运行我的集成测试 我希望能够在 Gradle 不自动完成之前的所有阶段并仅运行测试的情况下运行它 有没有办法在每个构建步骤不使用 x 的情况下执行此操作 None
  • spring中如何一起发送@Requestbody和@Requestpart

    我想使用curl 在控制器中一起传递json 和文件 我在控制器中有以下方法 PostMapping value api campaign headers content type multipart mixed content type
  • 调试器不会停止在 Intellij IDEA 中的源代码处

    我有一个相当奇怪的问题 无法使用 Intellij IDEA 解决 我正在解析电子邮件文件org apache james mime4j包裹 但我的邮件文件格式不兼容Date 标头 因此 我从 mime4j 源创建了模块 并从磁盘中删除了
  • 将更改(永久)保存在数组列表中?

    那可能吗 例如 用户将新的项目 元素添加到数组列表 缓冲读取器进程 中 并且肯定会发生更改 我的问题是 即使用户多次更改数组列表 它也可能会永久存在 即使他们关闭程序并再次打开它 它也会一直存在 注意 不使用 txt 很抱歉问这样的问题 但
  • 图像在 3D 空间中绕 Y 轴旋转

    我有一个 BufferedImage 我想用 theta 角而不是仿射变换绕 Java 中的 Y 轴旋转图像 图片 旋转将如下图所示 矩形将是图像 我可以通过旋转图像的每个像素并绘制图像来做到这一点 因为我必须旋转很多图像 所以我认为这不是
  • Java:Swing:设置JButton的位置

    我想实现以下布局 OK
  • 如何使用Gson将JSONArray转换为List?

    在我的 Android 项目中 我试图将收到的 JSONArray 转换为列表 在 的帮助下这个答案 https stackoverflow com questions 8371274 how to parse json array in
  • 如何防止我的 servlet 被其他网站调用

    好的 我有一个像这样的简单的 servlet public class SimpleServlet extends HttpServlet public void doPost HttpServletRequest req HttpServ
  • Android 的@hide 注解到底有什么作用?

    Android中很多内部API都被标记出来了 hide What exactly这是吗 另一个答案 https stackoverflow com questions 17035271 what does hide mean in the
  • 覆盖乔达一周的第一天?

    是否有可能覆盖乔达弱的第一天sunday 因为 Joda 使用Monday作为一周的第一天 如果有办法的话 谁能解释一下 我在 SOF 中提到了以下主题 乔达时间 一周的第一天 https stackoverflow com questio
  • 是否有适用于 Java 的 CalDAV 客户端库? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想使用 CalDAV 协议与我的日
  • 在 Hibernate 的 XML 配置文件中指定默认值

    我通过映射配置文件配置 Hibernate
  • 如何在列表视图中选择时启用视频序列自动播放?

    大家好 有人可以与我分享一下我如何编写我的 viewvideo java 类 以便它允许自动播放视频功能 自动排序在列表视图中播放所选视频的任务 从当前位置到最新录制的视频 按顺序直到最新的视频播放完毕 这类似于 YouTube 自动播放功
  • Java泛型类型参数中的问号是什么意思? [复制]

    这个问题在这里已经有答案了 这是取自斯坦福解析器附带的一些示例的一小段代码 我已经用 Java 进行了大约 4 年的开发 但从未对这种风格的代码应该表示什么有非常深入的理解 List
  • 使用 ProcessBuilder 启动 CMD

    我尝试使用以下代码在 Windows 中启动 CMD 应用程序 但它无法按预期工作 来自不同网站的几个示例表明 cmd 作为 ProcessBuilder 构造中的参数应该有效 我需要做什么才能让我的 Java 应用程序在 Windows
  • 为什么找不到 getservletcontext?

    我正在尝试使用getServletContext getRealPath 但我不断收到此错误 cannot find symbol symbol method getServletContext location interface jav
  • Java无损保存原始JPEG

    如下所示 我有第一张图像是原始 JPEG 图像 第二张图像用于缓冲图像 然后使用保存http www lac inpe br JIPCookbook 6040 howto compressimages jsp http www lac in
  • 如何将元素添加到通用集合

    我想知道如何将专用对象添加到通用集合中 我正在使用以下代码 Collection
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi

随机推荐

  • BES2300x笔记(14) -- 提示音模块

    哈喽大家好 这是该系列博文的第十四篇 篇 lt lt 系列博文索引 快速通道 gt gt 一 前言 提示音 的这个模块 代码量确实不小啊 这一篇 我们就来梳理一下 提示音相关接口的调用逻辑吧 二 代码调用逻辑 app voice repor
  • To see the full stack trace of the errors, re-run Maven with the -e switch.

    问题描述 微服务项目中其它模块不能依赖common模块中的依赖 而common中是有依赖的 然后重新对common进行install发现报错 原因分析 经过查找是由于common中的pom xml中有一个依赖被引入了两次 删掉其中一个即可
  • 461. 汉明距离

    题目描述 两个整数间的汉明距离是指 这两个数字对应二进制位不同的位置的数目 给定两个整数 x 和 y 计算它们间的汉明距离 注意 0 x y lt 2 31 样例 示例 输入 x 1 y 4 输出 2 解释 1 0 0 0 1 4 0 1
  • 从0到1,一文掌握用户画像标签体系

    一 标签体系概览 1 什么是对象 2 什么是标签 标签是人为设定的 根据业务场景需求 对目标对象运用一定的算法得到的高度精炼的特征标识 标签是对对象某个维度特征的描述与刻画 是某一种用户特征的符号表示 每一种标签都规定了我们观察认识描述对象
  • Redis第二十二讲 Redis高可用集群节点通信机制

    两个端口 在哨兵系统中 节点分为数据节点和哨兵节点 前者存储数据 后者实现额外的控制功能 在集群中 没有数据节点与非数据节点之分 所有的节点都存储数据 也都参与集群状态的维护 为此 集群中的每个节点 都提供了两个 TCP端口 普通端口 即我
  • 电脑上面的word文档被删除了怎么办?分享四种亲测恢复方法

    不小心把电脑里面的word文档删除了 当你需要用到这些被误删的文档后 怎么找回呢 根本不知道从何入手的小伙伴不用担心 因为办法总比困难多多 下面就让小编为大家分享word文档恢复的方法 方法均以win10系统为例进行操作 大家跟着操作将其恢
  • android.content.res.Resources$NotFoundException: String resource ID #0x1

    在Android开发中如果出现android content res Resources NotFoundException String resource ID 0x1这样的错误 你想也不用想 一定是Textview控件显示数据出了问题
  • 某公众号登录加密(webpack)

    前言 随手记 1 本文章仅作学习参考使用 不做其他使用 网站 aHR0cHM6Ly9tcC53ZWl4aW4ucXEuY29tLw 输入密码 分析抓包信息 如下 可以初步判断是一个md5的密文数据 使用全局搜索Search定位到加密位置下断
  • 使用国内镜像源在线安装QT Mac M1

    参考 使用国内镜像源在线安装QT 2023 3 25更新 qt国内镜像 Iotfsd的博客 CSDN博客 网上搜了一些资料 大多数建议用fiddler代理 Mac M1操作不起来 看到上述windows的方法 尝试了一下 运气很好成功了 大
  • 闭环系统的零极点图判定稳定性_系统的稳定性判别

    pzmap 函数可以绘制连续系统在复平面内的零极点图 其调用格式如下 p z pamap num den 或 p z pzmap A B C D 或 p z pzmap p z 其中列向量 p 为系统的极点 列向量 z 为系统的零点 num
  • SQLilabs的第20关(HTTP请求头-Cookie)——报错注入

    1 判断闭合方式 我们在cookie的后面加上一个 返回页面如下 我们再将 改成 返回页面如下 这说明闭合方式是 2 确定注入方式 我们在判断闭合方式时发现 该网站会返回报错信息 又没有回显 因此适合使用报错注入 3 爆破数据库名 用户名
  • opencv中morphologyEx()函数

    opencv中morphologyEx函数 函数原型 参数解释 例子 相关函数 参考博客 函数原型 CV EXPORTS W void morphologyEx InputArray src OutputArray dst int op I
  • pnpm 构建 Monorepo workspace项目

    pnpm 构建 Monorepo 项目 使用背景 因为公司要做的项目比较多 项目之间又会相互依赖 目前分为pc后台 pc商城 uniapp项目等等 所以为了代码的复用和代码的规范提交 决定引入pnpm来创建Monorepo项目 Monore
  • 每次win10开机需要重启一次系统才能进去,第一次停留在启动画面就不动了。

    这是由于部分电脑的主板不支持快速启动造成的 所以把快速启动功能关闭掉即可 具体操作步骤如下 控制面板 硬件和声音 电源选项 选择电源按钮的功能 选择 更改当前不可用的设置 然后把 启用快速启动 推荐 前面的勾去掉 再点击下面的 保存设置 即
  • Python 自动化测试(三): pytest 参数化测试用例构建

    在之前的文章中主要分享了 pytest 的实用特性 接下来讲 Pytest 参数化用例的构建 如果待测试的输入与输出是一组数据 可以把测试数据组织起来用不同的测试数据调用相同的测试方法 参数化顾名思义就是把不同的参数 写到一个集合里 然后程
  • Jetson Nano复制系统和U盘启动【第三部分】

    一 写在前面 第三部分承接第二部分 由于Nano EMMC容量只有16GB大小 安装系统和SDK后 Nano EMMC只剩下1 4GB容量 几乎没有空间安装其它软件 第三部分的主要内容是将Nano EMMC系统完全复制到U盘中 并修改Nan
  • 经验模式分解(EMD)——简介及Matlab工具箱安装

    最近在做脑电信号分析 在导师的建议下学习了一点经验模式分解 下面简称EMD 的皮毛 期间也是遇到了很多问题 在这里整理出来 一是为了自己备忘 二是为了能尽量帮到有需要的朋友 一 EMD简介 经验模态分解 Empirical Mode Dec
  • Oracle数据库 SQL Plus 命令使用指南

    熟悉oracle的朋友都知道 SQL PLUS是一个重要的和ORACLE打交道的工具 SQL PLUS本身有很多命令 可以帮助我们做很多事情 包括产生一些规格化的报表 提供人机交互等等 下面 我就简单地说明一下 供大家参考 一 帮助命令 H
  • Java有哪些基本数据类型?

    在Java中 有8种基本数据类型 它们分为两种类型 值类型 Primitive types byte 字节型 占用1个字节 表示范围为 128 127 short 短整型 占用2个字节 表示范围为 32768 32767 int 整型 占用
  • Spring Boot 框架总结

    Spring Boot 框架总结 1 springboot的引言 Spring Boot是由Pivotal团队提供的全新框架 其设计目的是用来简化Spring应用的 初始搭建以及开发过程 该框架使用了特定的方式来进行配置 从而使开发人员不