Spring

为Spring-Boot应用程序设置参数的几种方式

除了在application.ymlapplication.properties中配置Spring-Boot应用程序的参数外,还可以通过运行java -jar命令行的方式来配置参数。

比如java -jar -Dspring.profiles.active=dev app.jar就是常使用的命令之一。

当然,java -jar命令不止配置Spring参数,还可以配置JVM参数。本文只以Spring-Boot应用程序为例。

有时候,可能会看见这样的应用启动方式:java -jar --spring.profiles.active=dev app.jar,它也是可行的。这两个分别是什么呢?

...

在RESTful API设计中应用HATEOAS

HATEOAS 是 REST(Representational state transfer) 的约束之一。

HATEOAS 是 Hypermedia As The Engine Of Application State 的缩写,从字面上理解是 “超媒体即是应用状态引擎” 。其原则就是客户端与服务器的交互完全由超媒体动态提供,客户端无需事先了解如何与数据或者服务器交互。相反的,在一些RPC服务或者Redis,Mysql等软件,需要事先了解接口定义或者特定的交互语法。

...

Spring声明式事务的使用

1 从@Transactional注解开始 #

@Transactional注解是使用spring-transaction的最便捷方式。也是使用Spring框架开发最先接触的内容。

当你在一个服务的方法上使用@Transactional注解时,意味着你希望为此方法开启事务支持。如果你的项目成功配置了数据源事务管理器,Spring会为此方法使用如下默认设置开启事务:

...

在SpringBoot中使用MessageSource

几个说明

  1. properties配置文件中,spring.messages.basename必须要加classpath前缀。如 spring.messages.basename=classpath:i18n/messages
  2. 必须要手动配置MessageSource,springboot不会自动配置之
  3. 如果使用MessageSource.getMessage()方法,第一个参数的引用形式为"code",而不是"{code}"或者"${code}"。如messageSource.getMessage("test.msg", null, Locale.getDefault());
  4. 在配置LocalValidatorFactoryBean之后,才可以在javax.validation.constraints包下的注解(@Size@NotNull...)下的message属性中使用"{code}"的形式声明校验提示信息。如 @NotNull(message = "{leftTime.not.null}")
  5. springMVC的locale配置和JVM的locale配置不一样,在application.properties中配置的spring.mvc.locale=zh_CN实际上配置的是WebMvcProperties,在获取消息时,locale信息应该使用webMvcProperties.getLocale()1获取而不是使用Locale.getDefault()获取。

MessageSource is a powerful feature available in Spring applications. This helps application developers handle various complex scenarios with writing much extra code, such as environment-specific configuration, internationalization or configurable values.

One more scenario could be modifying the default validation messages to more user-friendly/custom messages.

In this tutorial, we'll see how to configure and manage custom validation MessageSource in the application using Spring Boot.

...

SpringBoot使用AOP的简单示例

有一个cd接口,其实体类用于播放歌曲,同时我们想在播放歌曲的时候记录每个曲目的播放次数。看起来,记录次数这个事和播放曲目是不相干的事情,当然,我们可以在每首歌曲播放完成之后记录,但是更好的办法是使用一个切面,切入到播放方法中,来完成这件事,这样可以减少无关逻辑对代码的侵入。

...