本篇文章介绍Spring Boot中分别返回ResponseEntity<InputStreamResource>
、ResponseEntity<Resource>
、ResponseEntity<StreamingResponseBody>
、HttpServletResponse.getOutputStream()
4种文件下载方法的实现。
前言
SpringMVC4升级为SpringBoot2.6.7,根据SpringBoot的最小配置原则,其升级主要就是将xml的配置方式改为配置文件、Bean配置或者不配置。
该项目原先为一个Spring4+SpringMVC4+JPA+Ehcache配置的Maven多模块项目,打包后使用War包部署,为了不做太大的改动,仅在原先项目上修改,修改后仍然是一个Maven多模块项目,采用SpringBoot方式运行项目部署也只需要部署Jar包。
项目根pom.xml文件处理
相关依赖处理
1.项目根路径下添加spring-boot-starter-parent
:
前言
部署于JBoss5中的Spring应用,现需要判断项目中的某一个文件是否存在。首先需要获取项目部署后的真实路径。在JBoss5中war包放于deploy目录中,启动JBoss后会将war包解压到一个tmp目录中的一个随机命名的文件夹中,这个随机命名的文件夹每次重新启动就会重新生成,所以要在项目中获取文件路径就需要动态的获取到JBoss解压war后的目录。
实践
项目的访问路径为:https://域名/develop/access
在代码中尝试获取真实的部署路径:
String path = this.getClass().getClassLoader().getResource("/").getPath();
logger.info("路径1为:"+path);
String path1 = Thread.currentThread().getContextClassLoader().getResource("/").getPath();
logger.info("路径2为:"+path1);
WebApplicationContext currentWebApplicationContext = ContextLoader.getCurrentWebApplicationContext();
ServletContext servletContext = currentWebApplicationContext.getServletContext();
logger.info("路径3为:"+servletContext.getRealPath("/"));
logger.info("路径4为:"+servletContext.getContextPath());
logger.info("路径5为:"+servletContext.getRealPath(""));
logger.info("路径6为:"+servletContext.getResource("/").getPath());
前言
此前,我们学习了Spring AOP的配置方式:重温Spring---Spring AOP基于XML和注解的配置 | 敲代码的小松鼠 (ycyin.eu.org),本篇旨在记录Spring事务控制的一些概念和基于XML和注解Spring 事务控制的方式。
Spring事务管理的两种方式
前言
上一篇学习了Spring AOP及其基本原理:重温Spring---AOP动态代理和Spring AOP及其基本原理 | 敲代码的小松鼠 (ycyin.eu.org),本篇旨在记录基于XML和注解Spring AOP的方式。
基础代码准备
使用之前有的代码,一个有Service层和DAO层的增删改查例子,之前我们通过基于JDK的动态代理实现了事务管理,这次使用Spring AOP来实现。
前言
本篇旨在记录个人重新回去学习Spring AOP学到的一些东西,在这里记录一下。首先通过一个案例引出两个问题,然后通过依次解决这两个问题来简单了解Spring AOP原理(动态代理),随后了解AOP基础和Spring AOP,最后分别基于XML和注解配置AOP。
案例
我们先来看一个烂大街的转账案例,看看在这个案例中会带来什么问题。我们仍然使用dbutils作为操作数据库的工具。
pom.xml配置:
前言
继上篇重温Spring---使用Spring IOC解决程序耦合 | 敲代码的小松鼠 (ycyin.eu.org),学习了使用Spring IOC,均是采用XML配置文件形式配置的Bean及Bean的注入。本篇会基于XML和注解的方式分别实现一个CRUD,可以通过本篇文章了解XML和注解的方式使用及其异同,同时还可以了解到在Spring中使用Junit的方法。
前言
之前最开始学Spring的时候有写过Spring相关的文章,写得很烂,现在去看基本上没啥帮助了,所以决定重新学习一下重新写点文章记录一下。本篇会从一个Service层依赖DAO层的实例一步步解耦,从而引入对Spring IOC 和DI、BeanFactory 和 ApplicationContext、Spring Bean 的XML配置等学习。
程序的耦合
这个概念在大学的软件工程课程中有过详细学习,不过忘得差不多了。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。耦合性存在于各个领域,而非软件设计中独有的,但是我们只讨论软件工程中的耦合。在软件工程中,耦合指的就是就是对象之间的依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。耦合类型可以由程度由高到低分为:内容耦合>公共耦合>外部耦合>控制耦合>标记耦合>数据耦合>非直接耦合。
环境说明
使用maven3、Spring4.3构建、jdk7编译、运行在tomcat7.0中。
定时任务的基本配置
pom.xml:加入依赖
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<org.springframework.version>4.3.29.RELEASE</org.springframework.version>
</properties>
<dependencies>
<!--SpringMVC依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework.version}</version>
</dependency>
</dependencies>
前言
Spring单元测试中因外键关联导致的失败,每个用例单独运行都没有问题,可是一起运行,就出现下面的异常错误信息:integrity constraint violation: foreign key no action。
出现错误时使用的环境
- spring:3.2.16.RELEASE
- unitils:3.4.2 (unitils-core、unitils-spring、unitils-dbunit、unitils-inject)
- hsqldb:2.3.2
- hibernate3:3.6.5.Final