这篇文章我们来学习如何使用 Spring Boot 集成 Apache Shiro 。安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求。在 Java 领域一般有 Spring Security、 Apache Shiro 等安全框架,但是由于 Spring Security 过于庞大和复杂,大多数公司会选择 Apache Shiro 来使用,这篇文章会先介绍一下 Apache Shiro ,在结合 Spring Boot 给出使用案例。
View Details有很多网友会时不时的问我, Spring Boot 项目如何测试,如何部署,在生产中有什么好的部署方案吗?这篇文章就来介绍一下 Spring Boot 如何开发、调试、打包到最后的投产上线。
View DetailsMongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。基于分布式文件存储的数据库。由C++语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个高性能,开源,无模式的文档型数据库,是当前 NoSql 数据库中比较热门的一种。
View Details发送邮件应该是网站的必备功能之一,什么注册验证,忘记密码或者是给用户发送营销信息。最早期的时候我们会使用 JavaMail 相关 api 来写发送邮件的相关代码,后来 Spring 推出了 JavaMailSender 更加简化了邮件发送的过程,在之后 Spring Boot 对此进行了封装就有了现在的 spring-boot-starter-mail ,本章文章的介绍主要来自于此包。
View Details在我们开发项目过程中,经常需要定时任务来帮助我们来做一些内容, Spring Boot 默认已经帮我们实行了,只需要添加相应的注解就可以实现
View DetailsRabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。
消息中间件在互联网公司的使用中越来越多,刚才还看到新闻阿里将 RocketMQ 捐献给了 Apache,当然了今天的主角还是讲 RabbitMQ。消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。在分布式的系统中,消息队列也会被用在很多其它的方面,比如:分布式事务的支持,RPC 的调用等等。
View Details说起多数据源,一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不同的分库来支持业务。我们遇到的情况是后者,网上找了很多,大都是根据 Jpa 来做多数据源解决方案,要不就是老的 Spring 多数据源解决方案,还有的是利用 Aop 动态切换,感觉有点小复杂,其实我只是想找一个简单的多数据支持而已,折腾了两个小时整理出来,供大家参考。
View DetailsJava 2D API 的文本功能包括:
使用抗锯齿处理和微调(hinting)以达到更好的输出质量
可以使用系统安装的所有字体
可以将对图形对象的操作(旋转、缩放、着色、剪切等等)应用到文本上。
支持向字符串添加内嵌属性(如字体、尺寸、深浅,甚至图像)
支持双向文本(启用从右到左的字符顺序,就象您在阿拉伯语和希伯来语中可能遇到的一样)
第一光标和第二光标能够浏览同时包含从右到左和从左到右字符顺序的文本。
先进的字体度量功能,超过旧的 java.awt.FontMetrics 类中的相应功能
排版功能可以实现单词换行和调整多行文本
1 Maven依赖
|
1 2 3 4 5 6 7 8 9 10 11 |
<!--第一种方式导入校验依赖--> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> </dependency> <!--第二种方式导入校验依赖--> <dependency> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> </dependency> |
2 值校验 2.1 @Null注解 被注解的元素必须为null
|
1 2 |
@Null(message = "必须为null") private String username; |
2.2 @NotNull注解 被注解的元素必须不为null
|
1 2 |
@NotNull(message = "必须不为null") private String username; |
2.3 @NotBlank注解 验证注解的元素值不为空(不为null、去除首位空格后长度为0) ,并且类型为String。
|
1 2 |
@NotBlank(message = "必须不为空") private String username; |
2.4 @NotEmpty注解 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0) ,并且类型为String。
|
1 2 |
@NotEmpty(message = "必须不为null且不为空") private String username; |
2.5 @AssertTrue注解 被注解的元素必须为true,并且类型为boolean。
|
1 2 |
@AssertTrue(message = "必须为true") private boolean status; |
2.6 @AssertFalse注解 被注解的元素必须为false,并且类型为boolean。
|
1 2 |
@AssertFalse(message = "必须为false") private boolean status; |
3 范围校验 3.1 @Min注解 被注解的元素其值必须大于等于最小值,并且类型为int,long,float,double。
|
1 2 |
@Min(value = 18, message = "必须大于等于18") private int age; |
3.2 @Max注解 被注解的元素其值必须小于等于最小值,并且类型为int,long,float,double。
|
1 2 |
@Max(value = 18, message = "必须小于等于18") private int age; |
3.3 @DecimalMin注解 验证注解的元素值大于等于@DecimalMin指定的value值,并且类型为BigDecimal。
|
1 2 |
@DecimalMin(value = "150", message = "必须大于等于150") private BigDecimal height; |
3.4 @DecimalMax注解 验证注解的元素值小于等于@DecimalMax指定的value值 ,并且类型为BigDecimal。
|
1 2 |
@DecimalMax(value = "300", message = "必须大于等于300") private BigDecimal height; |
3.5 @Range注解 验证注解的元素值在最小值和最大值之间,并且类型为BigDecimal,BigInteger,CharSequence,byte,short,int,long。
|
1 2 |
@Range(max = 80, min = 18, message = "必须大于等于18或小于等于80") private int age; |
3.6 @Past注解 被注解的元素必须为过去的一个时间,并且类型为java.util.Date。
|
1 2 3 |
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Past(message = "必须为过去的时间") private Date createDate; |
3.7 @Future注解 被注解的元素必须为未来的一个时间,并且类型为java.util.Date。
|
1 2 3 |
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @Future(message = "必须为未来的时间") private Date createDate; |
4 长度校验 4.1 @Size注解 被注解的元素的长度必须在指定范围内,并且类型为String,Array,List,Map。
|
1 2 |
@Size(max = 11, min = 7, message = "长度必须大于等于7或小于等于11") private String mobile; |
4.2 @Length注解 验证注解的元素值长度在min和max区间内 ,并且类型为String。
|
1 2 |
@Length(max = 11, min = 7, message = "长度必须大于等于7或小于等于11") private String mobile; |
5 格式校验 5.1 @Digits注解 验证注解的元素值的整数位数和小数位数上限 ,并且类型为float,double,BigDecimal。
|
1 2 |
@Digits(integer=3,fraction = 2,message = "整数位上限为3位,小数位上限为2位") private BigDecimal height; |
[…]
View Details