SpringBoot中使用Redis数据库
Spring Boot中除了对常用的关系型数据库提供了优秀的自动化支持之外,对于很多NoSQL数据库一样提供了自动化配置的支持,包括:Redis, MongoDB, Elasticsearch, Solr和Cassandra。
使用RedisRedis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。
Redis官网
Redis中文社区
引入依赖Spring Boot提供的数据访问框架Spring Data Redis基于Jedis。可以通过引入spring-boot-starter-redis来配置依赖关系。
1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId></dependency>
参数配置按照惯例在application.properties中加入Redis服务端的相 ...
SpringBoot日志管理
Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每种Logger都可以通过配置使用控制台或者文件输出日志内容。
格式化日志默认的日志输出如下:
12016-04-13 08:23:50.120 INFO 37397 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {4.3.11.Final}
输出内容元素具体如下:
时间日期 — 精确到毫秒
日志级别 — ERROR, WARN, INFO, DEBUG or TRACE
进程ID
分隔符 — --- 标识实际日志的开始
线程名 — 方括号括起来(可能会截断控制台输出)
Logger名 — 通常使用源代码的类名
日志内容
控制台输出在Spring Boot中默认配置了ERROR、WARN和INFO级别的日志输出到控制台。
我们可以 ...
SpringBoot中使用Spring-data-jpa让数据访问更简单、更优雅
在上一篇 Spring中使用JdbcTemplate访问数据库 中介绍了一种基本的数据访问方式,结合 构建RESTful API 和 使用Thymeleaf模板引擎渲染Web视图 的内容就已经可以完成App服务端和Web站点的开发任务了。
然而,在实际开发过程中,对数据库的操作无非就“增删改查”。就最为普遍的单表操作而言,除了表和字段不同外,语句都是类似的,开发人员需要写大量类似而枯燥的语句来完成业务逻辑。
为了解决这些大量枯燥的数据操作语句,我们第一个想到的是使用ORM框架,比如:Hibernate。通过整合Hibernate之后,我们以操作Java实体的方式最终将数据改变映射到数据库表中。
为了解决抽象各个Java实体基本的“增删改查”操作,我们通常会以泛型的方式封装一个模板Dao来进行抽象简化,但是这样依然不是很方便,我们需要针对每个实体编写一个继承自泛型模板Dao的接口,再编写该接口的实现。虽然一些基础的数据访问已经可以得到很好的复用,但是在代码结构上针对每个实体都会有一堆Dao的接口和实现。
由于模板Dao的实现,使得这些具体实体的Dao层已经变的非常“薄” ...
SpringBoot中使用JdbcTemplate访问数据库
之前介绍了很多Web层的例子,包括构建RESTful API、使用Thymeleaf模板引擎渲染Web视图,但是这些内容还不足以构建一个动态的应用。通常我们做App也好,做Web应用也好,都需要内容,而内容通常存储于各种类型的数据库,服务端在接收到访问请求之后需要访问数据库获取并处理成展现给用户使用的数据形式。
本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例。
数据源配置在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式。
首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置:
1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId></dependency>
嵌入式数据库支持嵌入式数据库通常用于开发和测试环境,不推荐用于生产环境。Sp ...
SpringBoot中使用Swagger2构建强大的RESTful API文档
由于Spring Boot能够快速开发、便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API。而我们构建RESTful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端。
这样一来,我们的RESTful API就有可能要面对多个开发人员或多个开发团队:IOS开发、Android开发或是Web开发等。为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份RESTful API文档来记录所有接口细节,然而这样的做法有以下几个问题:
由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型、HTTP头部信息、HTTP请求内容等),高质量地创建这份文档本身就是件非常吃力的事,下游的抱怨声不绝于耳。
随着时间推移,不断修改接口实现的时候都必须同步修改接口文档,而文档与代码又处于两个不同的媒介,除非有严格的管理机制,不然很容易导致不一致现象。
为了解决上面这样的问题,本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Sprin ...
SpringBoot构建RESTful API与单元测试
@Controller:修饰class,用来创建处理http请求的对象
@RestController:Spring4之后加入的注解,原来在@Controller中返回json需要@ResponseBody来配合,如果直接用@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式。
@RequestMapping:配置url映射
下面我们尝试使用Spring MVC来实现一组对User对象操作的RESTful API,配合注释详细说明在Spring MVC中如何映射HTTP请求、如何传参、如何编写单元测试。
RESTful API具体设计如下:
User实体定义:
123456789public class User { private Long id; private String name; private Integer age; // 省略setter和getter}
实现对User对象的操作接口
123456789101112131415161718192021 ...
SpringBoot开发Web应用
静态资源访问在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。
默认配置Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:
/static
/public
/resources
/META-INF/resources
举例:我们可以在src/main/resources/目录下创建static,在该位置放置一个图片文件。启动程序后,尝试访问https://localhost:8080/D.jpg。如能显示图片,配置成功。
渲染Web页面在之前的示例中,我们都是通过@RestController来处理请求,所以返回的内容为json对象。那么如果需要渲染html页面的时候,要如何实现呢?
模板引擎在动态HTML实现上Spring Boot依然可以完美胜任,并且提供了多种模板引擎的默认配置支持,所以在推荐的模板引擎下,我们可以很快的上手开发动态网站。
Spring Boot提供了默认配置的模板引擎主要有以下几种:
Thymeleaf
FreeMarker
Velocity
Groovy
Mustache
Sprin ...
SpringBoot快速入门
SpringBoot主要优点
为所有Spring开发者更快的入门
开箱即用,提供各种默认配置来简化项目配置
内嵌式容器简化Web项目
没有冗余代码生成和XML配置的要求
本文所用工具版本
Maven3.6.0
JDK 1.8
SpringBoot 1.5.19
使用Maven构建项目
通过 SPRING INITIALIZR 构建项目
访问: https://start.spring.io/ ;
选择构建工具Maven Project、Spring Boot版本1.5.19以及一些工程基本信息,可参考下图所示 ;
点击 Generate Project下载项目压缩包 ;
解压项目包 , 并用IDE 以Maven项目导入 , 以 IDEA 为例
菜单中选择File–>New–>Project from Existing Sources...
选择解压后的项目文件夹,点击OK
点击Import project from external model并选择Maven,点击Next到底为止。
若你的环境有多个版本的JDK,注意到选择Java SDK的时 ...
Spring加载多个properties文件报错
1. 问题描述启动web项目时保存 , 该问题出现的原因为 spring 加载 properties 文件时无法找到对应的属性值 ;
Caused by : java.lang.IllegalArgumentException: Could not resolve placeholder ‘xxx’ in string value “${xxx}”
2. 问题分析
提示我无法解析占位符 , 导入 log4j 配置文件之后 , 发现并没有加载到所对应的properties文件 ;
这里只是解析了 “redis-config.properties” 但是并没有加载 , 所以导致找不到对应的属性值 ;
3. 问题解决及原因查了下资料发现 spring 容器中仅允许且最多只会扫描一个 properties 文件 , 当扫描到 properties 时 , 后边的 properties 文件会被忽略掉 ;
解决方案一在每个 context:property-placeholder 中添加 ignore-unresolvable=”true” 属性 ;
解决方案二将 properties ...