springboot单应用脚手架

地址

  脚手架地址

简介

多数据源

  在configuration包里面,我们定义了2个数据源,一个是pgsql,一个是mysql。这边对mysql加了@Primary优先处理,因此mysql可以使用jpa进行操作,而pg由于业务只用其进行批量处理,因此只让其使用springjdbc即可。

  由于jpa对批量处理以及复杂sql的不友好,因此这边建议,简单sql使用jpa,加快开发效率,复杂批量sql使用springjdbc,开发简单高效。我们约定,jpa的dao命名为xxxJpaDao,springjdbc的dao命名为xxxDao。

aop动态代理

  1.非法字符过滤,这个功能主要是检查你的rest接口里面的vo是否存在非法字符,会递归检查到基本类型,但是要检验的vo必须实现一个空接口。支持list,vo,map这3个数据混搭的检查。

  2.任务调度加锁。这个功能主要是用于工程在集群部署的情况下。定时器多次调用做了加锁限制。使用的是redis分布式锁。

  3.数据字段校验,这个主要是使用spring的安全校验来检查表单字段。

  4.ip校验,控制这个游客接口最多访问次数。

上下文

  上下文是用ThreadLocal实现的,默认实现了用户信息的缓存,同时开发也可以自定义往里面丢值进去,但是请记住,我们访问服务的线程是从线程池里面取出来的,因此这个线程里面可能存在旧的值,因此,你需要在代码里面控制,要么每次都覆盖,要么在这个线程或者这个请求结束前将其数据释放。默认使用覆盖策略。

枚举

  常量一律使用枚举。

异常

  使用了全局异常捕捉。

http

  由于是单应用,存在远程调用,为了方便,我们使用http方式调用,采用的是spring的RestTemplate作为接口,httpClient为实现的方式。

拦截器

  拦截器有2个,一个是登录校验的拦截器,一个是基本非法字符校验的拦截器。

国际化

  返回信息需要国际化处理,因为可能是不同国家,需要不同的语言。

分页查询

  基于springjdbc封装了一个分页查询的工具类。ps:可以考虑封装更多的工具类来完全代替jpa。

事务

  定义了2个事务管理器,一个是pgsql的DataSourceTransactionManager,来管理pgsql的springjdbc的事务,一个是JpaTransactionManager的事务管理器,可以管理mysql的jpa和spring jdbc的事务管理。

  ps(This transaction manager also supports direct DataSource access within a transaction
(i.e. plain JDBC code working with the same DataSource).
This allows for mixing services which access JPA and services which use plain JDBC (without being aware of JPA)!
Application code needs to stick to the same simple Connection lookup pattern as with DataSourceTransactionManager
(i.e. DataSourceUtils.getConnection(javax.sql.DataSource) or going through a TransactionAwareDataSourceProxy).
Note that this requires a vendor-specific JpaDialect to be configured.)

返回值

  返回值信息有4个,分别是,是否成功,返回code,返回message,返回vo。