Java

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.

...

Java8日期和时间API

mybatis自 3.4.5 开始,已经支持使用LocaldateTime作为时间查询入参,映射类型为TimeStamp,参考地址: https://mybatis.org/mybatis-3/zh/configuration.html#typeHandlers

1 前言 #

在介绍Java SE 8中新的日期时间库前,先了解下Java 8之前的日期时间工具的诟病。

在Java SE 8前,日期时间工具库在java.util包中,包括:

  • java.util.Date:表示日期和时间
  • java.util.Calendar以及其实现子类:表示各种日历系统,常用的是格林威治日历java.util.GregorianCalendar
  • java.util.TimeZone以及其实现子类:表示时区偏移量和夏令时

以及辅助其进行格式化和解析的工具库在java.text包中,包括:

  • java.text.DateFormat:格式化日期时间和解析日期时间的工具抽象类
  • java.text.SimpleDateFormat:DateDateFormat的实现
...

Java新日期时间包的使用

参考: unable-to-obtain-localdatetime-from-temporalaccessor-when-parsing-localdatetime


快速开始:

 1@SuppressWarnings("all")
 2public class JTSimpleIntro {
 3    static String DATE_TIME_FORM = "yyyy-MM-dd HH:mm:ss";
 4
 5    static void parseDateTimeString(String yyyyMMdd_HHmmss) {
 6        System.out.println(LocalDateTime.parse(yyyyMMdd_HHmmss));
 7    }
 8
 9    static void parseDateTimeStringWithFormat(String yyyyMMdd_HHmmss) {
10        System.out.println(LocalDateTime
11                .parse(yyyyMMdd_HHmmss,
12                        DateTimeFormatter.ofPattern(DATE_TIME_FORM)));
13    }
14
15    static void parseDateString(String yyyyMMdd) {
16        System.out.println(LocalDate.parse(yyyyMMdd));
17    }
18
19    static void parseTimeString(String HHmmss) {
20        System.out.println(LocalTime.parse(HHmmss));
21    }
22
23    public static void main(String[] args) {
24        parseDateTimeString("2012-06-09T13:12:11");
25        parseDateTimeStringWithFormat("2012-06-09 13:12:11");
26        parseDateString("2012-06-06");
27        parseTimeString("13:12:11");
28    }
29}

以下是API示例:

...