编辑
2022-11-23
学习记录
00

一、事务😀

事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种。 编程式事务:是指在代码中手动的管理事务的提交、回滚等操作,代码侵入性比较强,如下示例:

java
try { //TODO something transactionManager.commit(status); } catch (Exception e) { transactionManager.rollback(status); throw new InvoiceApplyException("异常失败"); }

声明式事务:基于AOP面向切面的,它将具体业务与事务处理部分解耦,代码侵入性很低,所以在实际开发中声明式事务用的比较多。声明式事务也有两种实现方式,一是基于TX和AOP的xml配置文件方式,二种就是基于@Transactional注解了。

java
@Transactional @GetMapping("/test") public String test() { int insert = cityInfoDictMapper.insert(cityInfoDict); }

在工作中常用的方式

java
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class)

二、@Transactional介绍

1、@Transactional注解可以作用于哪些地方?

@Transactional 可以作用在接口、类、类方法。 例子:

作用于类:当把@Transactional 注解放在类上时,表示所有该类的public方法都配置相同的事务属性信息。

作用于方法:当类配置了@Transactional,方法也配置了@Transactional,方法的事务会覆盖类的事务配置信息。

作用于接口:不推荐这种使用方法,因为一旦标注在Interface上并且配置了Spring AOP 使用CGLib动态代理,将会导致@Transactional注解失效

编辑
2022-11-23
学习记录
00

1.声明bean的注解😀

@Component 组件,没有明确的角色

@Service 在业务逻辑层使用(service层)

@Repository 在数据访问层使用(dao层)

@Controller 在展现层使用,控制器的声明(C)

2.注入bean的注解

@Autowired:由Spring提供

@Inject:由JSR-330提供

@Resource:由JSR-250提供

都可以注解在set方法和属性上,推荐注解在属性上(一目了然,少写代码)。

3.java配置类相关注解

@Configuration 声明当前类为配置类,相当于xml形式的Spring配置(类上)

@Bean 注解在方法上,声明当前方法的返回值为一个bean,替代xml中的方式(方法上)

@Configuration 声明当前类为配置类,其中内部组合了

@Component注解,表明这个类是一个bean(类上)

@ComponentScan 用于对Component进行扫描,相当于xml中的(类上)

@WishlyConfiguration 为@Configuration与@ComponentScan的组合注解,可以替代这两个注解

编辑
2022-11-22
遇到的问题
00

需要对List<Map<String,Object>>中的值进行日期格式化返回给前端

for (Map<String,Object> formap:map){ Set keyset = formap.keySet(); Date time=null; String modifykey=null; for(Object key:keyset){ boolean isInstance = formap.get(key) instanceof Date; if (isInstance){ String formatTime=DateUtil.format((Date) formap.get(key),"yyyy-MM-dd HH:mm:ss"); time=DateUtil.parse(formatTime); modifykey=String.valueOf(key); } } if (time!=null) { formap.put(modifykey, time); } }

通过instanceof 判断是否为日期格式,是日期格式则进行时间格式化,然后再用原来的key,重新添加一遍进行覆盖原来的值,实现对于map中对于时间类型的值的格式化。

编辑
2022-11-21
实用工具
00

MessageFormat模式(主要部分)

FormatElement

{ ArgumentIndex }:是从0开始的入参位置索引 { ArgumentIndex , FormatType } { ArgumentIndex , FormatType , FormatStyle }

FormatType:指定使用不同的Format子类对入参进行格式化处理。值范围如下:

number:调用NumberFormat进行格式化 date:调用DateFormat进行格式化 time:调用DateFormat进行格式化 choice:调用ChoiceFormat进行格式化

FormatStyle:设置FormatType中使用的格式化样式。值范围如下:

short、medium、long、full、integer、currency、percent、SubformatPattern (子格式模式,形如#.##) 还以str为例,在这个字符串中: 1、{0}和{1,number,short}和{2,number,#.#};都属于FormatElement,0,1,2是ArgumentIndex。 2、{1,number,short}里面的number属于FormatType,short则属于FormatStyle。 3、{1,number,#.#}里面的#.#就属于子格式模式。 指定FormatType和FormatStyle是为了生成日期格式的值、不同精度的数字、百分比类型等等。

实例:

1、ArgumentIndex必须是非负整数,它的个数不只限于0到9这10个,它可以用0到9的数字组成,因此可以有好多个,如:

String msg = "{0}{1}{2}{3}{4}{5}{6}{7}{8}"; Object [] array = new Object[]{"A","B","C","D","E","F","G","H","I",}; String value = MessageFormat.format(msg, array); System.out.println(value); // 输出:ABCDEFGHI
编辑
2022-11-15
遇到的问题
00

报错内容:

while it seems to fit format ‘yyyy-MM-dd‘T‘HH:mm:ss.SSSZ‘

原因:前端对于时间进行了 yyyy-MM-dd hh:mm

的格式化,后端也需要相应的进行格式化不然会出现识别错误

解决方法:

  • 前端不要对时间进行格式化,就采用国际化时间(默认格式)即可
  • 后端也同时对时间进行格式化