跳至主要內容
Spring Boot中4种文件下载方法的实现

本篇文章介绍Spring Boot中分别返回ResponseEntity<InputStreamResource>ResponseEntity<Resource>ResponseEntity<StreamingResponseBody>HttpServletResponse.getOutputStream()4种文件下载方法的实现。


ycyin大约 5 分钟SpringSpring Boot
SpringMVC4升级为SpringBoot2实战

前言

SpringMVC4升级为SpringBoot2.6.7,根据SpringBoot的最小配置原则,其升级主要就是将xml的配置方式改为配置文件、Bean配置或者不配置。

该项目原先为一个Spring4+SpringMVC4+JPA+Ehcache配置的Maven多模块项目,打包后使用War包部署,为了不做太大的改动,仅在原先项目上修改,修改后仍然是一个Maven多模块项目,采用SpringBoot方式运行项目部署也只需要部署Jar包。

项目根pom.xml文件处理

相关依赖处理

1.项目根路径下添加spring-boot-starter-parent:


ycyin大约 14 分钟SpringSpringSpringMVCSpring Boot
关于部署于JBoss5中的Spring应用获取项目真实部署路径的问题

前言

部署于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());

ycyin大约 1 分钟SpringSpringJBoss
重温Spring---Spring AOP基于XML和注解的配置

前言

上一篇学习了Spring AOP及其基本原理:重温Spring---AOP动态代理和Spring AOP及其基本原理 | 敲代码的小松鼠 (ladybug.top),本篇旨在记录基于XML和注解Spring AOP的方式。

基础代码准备

使用之前有的代码,一个有Service层和DAO层的增删改查例子,之前我们通过基于JDK的动态代理实现了事务管理,这次使用Spring AOP来实现。


ycyin大约 16 分钟SpringSpringAOPSpring AOP
重温Spring---AOP动态代理和Spring AOP及其基本原理

前言

本篇旨在记录个人重新回去学习Spring AOP学到的一些东西,在这里记录一下。首先通过一个案例引出两个问题,然后通过依次解决这两个问题来简单了解Spring AOP原理(动态代理),随后了解AOP基础Spring AOP,最后分别基于XML和注解配置AOP。

案例

我们先来看一个烂大街的转账案例,看看在这个案例中会带来什么问题。我们仍然使用dbutils作为操作数据库的工具。

pom.xml配置:


ycyin大约 19 分钟SpringSpringAOPSpring AOP事务动态代理切入点表达式
重温Spring---Spring IOC基于XML和注解的配置和比较

前言

继上篇重温Spring---使用Spring IOC解决程序耦合 | 敲代码的小松鼠 (ladybug.top),学习了使用Spring IOC,均是采用XML配置文件形式配置的Bean及Bean的注入。本篇会基于XML和注解的方式分别实现一个CRUD,可以通过本篇文章了解XML和注解的方式使用及其异同,同时还可以了解到在Spring中使用Junit的方法。


ycyin大约 15 分钟SpringSpringIOCSpring IOCAnnotationJunit
重温Spring---使用Spring IOC解决程序耦合

前言

之前最开始学Spring的时候有写过Spring相关的文章,写得很烂,现在去看基本上没啥帮助了,所以决定重新学习一下重新写点文章记录一下。本篇会从一个Service层依赖DAO层的实例一步步解耦,从而引入对Spring IOC 和DI、BeanFactory 和 ApplicationContext、Spring Bean 的XML配置等学习。

程序的耦合

这个概念在大学的软件工程课程中有过详细学习,不过忘得差不多了。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。耦合性存在于各个领域,而非软件设计中独有的,但是我们只讨论软件工程中的耦合。在软件工程中,耦合指的就是就是对象之间的依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。耦合类型可以由程度由高到低分为:内容耦合>公共耦合>外部耦合>控制耦合>标记耦合>数据耦合>非直接耦合。


ycyin大约 16 分钟SpringSpringIOCSpring IOCBean
浅谈Spring定时任务的使用(Scheduled注解)

环境说明

  使用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>

ycyin大约 6 分钟SpringScheduled定时任务
解决Spring单元测试中因外键关联导致的失败integrity constraint violation:foreign key no action

前言

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

ycyin大约 3 分钟Springspring单元测试junit