Spring Boot 简化了 Spring 应用开发,不需要配置就能运行 Spring 应用,Spring Boot 的自动配置是通过 Spring 4.x 的条件注解 @Conditional 来实现的,@Conditional 根据特定条件来控制 bean 的创建行为。Spring Boot 默认会使用内置的 Tomcat,并支持 Spring MVC、RESTful 服务。新建 Spring Boot 项目很简单,IntelliJ IDEA 在 New Project 中选择 Spring Initializr,然后组件选择 Web (集成 Spring MVC 框架) 即可创建成功。Spring Boot 通过 Starter 来提供系统级服务,Spring Boot 已经提供了一系列的 Starter,下表是 Spring Boot 提供的常用 Starter:

名称 作用
spring-boot-starter-web Web开发支持,默认使用Tomcat8
spring-boot-starter-aop AOP开发支持,使用AspectJ
spring-boot-starter-test 包含JUnit、Spring Test、Hamcrest、Mockito等测试工具
spring-boot-starter-jdbc Spring JDBC
spring-boot-starter-cache 缓存,支持多种缓存方式,如本地的、Redis、Ehcache等
spring-boot-starter-activemq 消息集成ActiveMQ支持
spring-boot-starter-amqp 消息集成AMQP协议支持,如支持RabbitMQ
spring-boot-starter-web-services webservice支持
spring-boot-starter-websocket websocket支持
spring-boot-starter-jersey REST应用和Jersey支持
spring-boot-starter-freemarker Freemarker模板引擎支持
spring-boot-starter-thymeleaf Thymeleaf模板引擎支持
spring-boot-starter-jta-atomikos 分布式事务支持,使用atomikos
spring-boot-starter-jta-bitronix 一个开源的分布式事务支持
spring-boot-starter-data-jpa JPA方式访问数据库,使用Hibernate作为JPA实现
spring-boot-starter-data-elasticsearch 集成Elasticsearch,默认访问localhost:9200
spring-boot-starter-data-redis 集成Redis,使用JRedis,默认连接localhost:6379
spring-boot-starter-data-mongodb 集成MongoDB,默认访问mongodb://localhost/test
spring-boot-starter-data-neo4j 集成neo4j,默认访问localhost:7474
spring-boot-starter-data-gemfire 集成分布式缓存
spring-boot-starter-data-solr 集成solr搜索平台,默认访问http://localhost:8983/solr
spring-boot-starter-data-cassandra 集成Cassandra,默认访问localhost:7474
spring-boot-starter-data-ldap 集成ldap
spring-boot-devtools 页面和代码的热部署,在修改类或者配置文件的时候自动重新加载Spring Boot应用

1.多环境配置

在 resources 下新建全局配置文件 application.properties、开发环境配置文件 application-dev.properties 和生产环境配置文件 application-prod.properties,application.properties 配置如下:

#使用开发环境
spring.profiles.active=dev
#自定义
example.str=hello

其中的 str 可以通过 @Value 获取值:

@Value("${example.str}")
private String str;

生产环境配置文件 application-dev.properties 配置如下:

server.port=8081
  • 1

2.Spring Boot配置类

Spring Boot 通过 @Configuration 注册 bean,例如:

@Configuration
public class HelloConfig {
@Bean
public MessageConverter messageConverter() {
return new Jackson2JsonMessageConverter();
}
}

3.开发Spring MVC应用

使用 Spring Boot 可以高效的开发 Spring MVC 应用,需要注意的是,MVC 和三层架构 (展现层 + 应用层 (Service层) + 数据访问层 (Dao层) ) 是两个不同的概念,MVC 只存在三层架构的展现层,M 是数据模型,V 是视图页面,C 是控制器。MVC 和核心思想是业务数据抽取与业务数据呈现相分离。

Spring Boot常用注解 释义
@RestController Spring4之后新加的注解,等同于@ResponseBody+@Controller
@RequestMapping url映射,value可以为数组,例如{“/hello”, “/hi”}
@GetMapping GET类型的url映射,还有@PostMapping、@PutMapping、@DeleteMapping
@PathVariable 获取url中的数据
@RequestParam 获取请求参数的值,required属性表示是否必传,defaultValue属性表示默认值
@RequestBody 用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如application/json或application/xml等。

新建 HelloController:

@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello, Spring Boot!";
}
}

运行项目(mvn spring-boot:run 命令),浏览器访问 http://localhost:8081/hello,即可看到输出结果 “Hello, Spring Boot!”。Spring Boot其他常用注解如下:

Spring Boot常用注解 释义
@Component 通用注解,会被注册为bean组件、基于它的还有@Repository、@Service、@Controller
@Autowired 标注在构造方法、类的任何方法上,实现自动装配
@Resource 默认按名称装配,当找不到与名称匹配的bean才会按类型装配
@Lazy(true) 表示延迟初始化
@Import 导入配置类,并支持导入普通的java类,并将其声明成一个bean
@Transactional 标注在类或方法上,声明式事务注解。建议使用@Transactional(rollbackFor = Exception.class)
@Value 使用EL-Spring表达式注入字符、属性、内容等
@JsonSerialize jackson注解,标注在属性或者字段上,指定序列化方式
@JsonProperty(“name”) jackson注解,标注在VO对象的属性上,例如categoryName,返回json中将显示成name
@JsonIgnore jackson注解,标注在POJO对象的属性、方法上,转成json格式时忽略该属性或者方法

4.AOP统一处理请求日志

需要添加 spring-boot-starter-aop 依赖,创建 Aspect 文件即可通过 AOP 统一处理请求日志了:

@Aspect
@Component
public class HttpAspect {
private Logger logger = LoggerFactory.getLogger(getClass());
@Pointcut("execution(public * com.example.server.controller.ContentController.*(..))")
public void log() {
}
//方法执行之前
@Before("log()")
public void doBefore(JoinPoint joinPoint) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); //url
HttpServletRequest request = attributes.getRequest();
logger.info("url={}", request.getRequestURL());
}
//方法执行之后
@After("log()")
public void doAfter() {
logger.info("doAfter");
}
@AfterReturning(returning = "object", pointcut = "log()")
public void doAfterReturning(Object object) {
logger.info("response={}", object);
}
}

5.Spring Boot多线程编程

Spring 通过任务执行器(TaskExecutor)来实现多线程和并发编程。使用 ThreadPoolTaskExecutor 可实现一个基于线程池的 TaskExecutor。而实际开发中任务一般是非阻碍的,即异步的,所以我们要在配置类中通过 @EnableAsync 开启对异步任务的支持,并通过在实际执行的 Bean 的方法中使用 @ Async 注解来声明是一个异步任务,如果注解在类级别,则表示该类所有的方法都是异步方法。

@Configuration
@EnableAsync
public class TaskExecutorConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(5);
taskExecutor.setMaxPoolSize(10);
taskExecutor.setQueueCapacity(25);
taskExecutor.initialize();
return taskExecutor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return null;
}
}

然后声明 @Async 注解,即可并发执行:

@Service
public class AsyncTaskService {
@Async
public void executeAsyncTask(Integer i) {
System.out.println("执行异步任务1:" + i);
}
@Async
public void executeAsyncTask2(Integer i) {
System.out.println("执行异步任务2:" + i);
}
}

6.Spring Boot定时任务

通过在配置类注解 @EnableScheduling 来开启对计划任务的支持,然后在要执行的方法上注解 @Scheduled 声明这是一个计划任务,支持 cron、fixDelay、fixRate 等类型的计划任务。cron 表达式可以去 http://www.pppet.net/ 生成。配置类:

@Configuration
@EnableScheduling
public class TaskSchedulerConfiguration {
}

计划任务执行类:

@Service
public class ScheduledTaskService {
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedRate = 5000)
public void reportCurrentTime() {
System.out.println("每隔5秒执行1次:" + dateFormat.format(new Date()));
}
@Scheduled(cron = "0/10 * * * * ? ")
public void fixTimeExecution() {
System.out.println("在指定时间" + dateFormat.format(new Date()) + "执行");
}
}

运行 Spring Boot 项目,发现计划任务按照计划依次执行成功。

7.Spring Boot配置SSL

使用 jdk 中的 keytool 生成 keystore:

keytool -genkey -alias tomcat

这时我就生成了 .keystore 证书文件,将证书文件复制到项目的根目录,然后通过 application.properties 中的 server.ssl.* 前缀配置 SSL 属性即可:

server.ssl.key-store=.keystore
server.ssl.key-password=123456
server.ssl.key-store-type=JKS
server.ssl.key-alias=tomcat

8.Spring Boot加载静态资源

静态资源(css、icon、iconfont、images、img、js)放在 resources/static 下,Freemaker 模版页面放在 resources/templates 下。我们将Freemaker 模版页面 index.ftl 放入到 resources/templates 下,编写一个 Controller 测试一下:

@Controller
public class IndexController {
@RequestMapping(value = "index", method = RequestMethod.GET)
public String showIndex() {
return "index";
}
}

运行访问,发现已经可以访问了。替换 favicon 只需要将自己的 favicon.ico 放置在 resources/static 下即可。除了这些,Spring Boot 还可以加载 WebJars,WebJars 将浏览器资源(css,js等)打成 jar 文件,以对资源进行统一依赖管理,例如添加 bootstrap:

<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>3.3.7-1</version>
</dependency>

页面引入就可以正常使用了:

<script type="text/javascript" src="/webjars/bootstrap/3.3.7-1/js/bootstrap.min.js"></script>

9.Spring Boot单元测试

1.Service单元测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class ContentServiceTest {
@Resource
private ContentService contentService;
@Test
public void whenGetContentListSuccess() throws Exception {
Assert.assertNotEquals(0, contentService.getContentList().size());
}
}

2.Controller单元测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class ContentControllerTest {
@Resource
private ContentController contentController;
private MockMvc mvc;
private Logger logger = LoggerFactory.getLogger(ContentControllerTest.class);
@Before
public void setup() {
mvc = MockMvcBuilders.standaloneSetup(contentController).build();
}
@Test
public void whenGetContentListSuccess() throws Exception {
MvcResult result = mvc.perform(MockMvcRequestBuilders.get("/content/query/list")
.contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(MockMvcResultMatchers.status().isOk())
.andReturn();
logger.info(result.getResponse().getContentAsString());
}
}

Maven 打包跳过单元测试:

mvn clean package -Dmaven.test.skip=true

10.Spring Boot Logback日志配置

Spring Boot 默认使用 SLF4j 和 Logback 输出日志。增加 Logback 配置 resources/logback-spring.xml 即可完成日志文件的生成:

<?xml version="1.0" encoding="UTF-8" ?>
<configuration debug="false">
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
</appender> <!-- 每天生成日志文件,并区分info和error日志输出 -->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>/var/log/tomcat/PROJECT_NAME/info.%d.log</fileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender> <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>/var/log/tomcat/PROJECT_NAME/error.%d.log</fileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender> <root level="info">
<appender-ref ref="consoleLog" />
<appender-ref ref="fileInfoLog" />
<appender-ref ref="fileErrorLog" />
</root>
</configuration>
  • spring boot项目发布

Spring Boot 内置了 tomcat-embed,所以可以直接通过 java -jar 的方式运行:

mvn clean package                               //打包
java -jar xx.jar --server.port=9090
java -jar xx.jar --spring.profiles.active=dev //可以通过java -jar配置参数指定配置文件 转载自:https://blog.csdn.net/smartbetter/article/details/53933096#

【转】Spring Boot 构建应用——快速构建 Spring Boot 应用的更多相关文章

  1. 用 Spring Boot 和 MybatisPlus 快速构建项目

    自动生成 public class MPGenerator { public static void main(String[] args) { AutoGenerator autoGenerator ...

  2. 使用 Spring Boot 快速构建 Spring 框架应用--转

    原文地址:https://www.ibm.com/developerworks/cn/java/j-lo-spring-boot/ Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2 ...

  3. 使用Spring Boot快速构建应用

    http://www.infoq.com/cn/news/2014/01/spring-boot/ 随着Spring 4新版本的发布,Spring Boot这个新的子项目得到了广泛的关注,因为不管是S ...

  4. 使用 Spring Boot 快速构建 Spring 框架应用,PropertyPlaceholderConfigurer

    Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2002 年发布以来,Spring 框架已经成为企业应用开发领域非常流行的基础框架.有大量的企业应用基于 Spring 框架来开发.S ...

  5. Springboot(一):使用Intellij中的Spring Initializr来快速构建Spring Boot工程

    使用Intellij中的Spring Initializr来快速构建Spring Boot工程 New---Project 可以看到图所示的创建功能窗口.其中Initial Service Url指向 ...

  6. 只需两步!Eclipse+Maven快速构建第一个Spring Boot项目

     随着使用Spring进行开发的个人和企业越来越多,Spring从一个单一简介的框架变成了一个大而全的开源软件,最直观的变化就是Spring需要引入的配置也越来越多.配置繁琐,容易出错,让人无比头疼, ...

  7. Spring Boot 基于Spring Initializer 的快速构建 day02

    一.基于Spring Initializr 快速构建Spring Boot项目(快速) 备注:需要联网 这是使用Intellij Idea快速构建可以为我们省去大量的pom.xml配置时间,简单操作, ...

  8. 使用 Spring Boot 快速构建 Spring 框架应用

    Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2002 年发布以来,Spring 框架已经成为企业应用开发领域非常流行的基础框架.有大量的企业应用基于 Spring 框架来开发.S ...

  9. Spring Boot中使用Swagger2构建强大的RESTful API文档

    由于Spring Boot能够快速开发.便捷部署等特性,相信有很大一部分Spring Boot的用户会用来构建RESTful API.而我们构建RESTful API的目的通常都是由于多终端的原因,这 ...

随机推荐

  1. 【Java】JDK/JVM相关工具

    1.JDK自带工具 1)常见的用法参见:https://cloud.tencent.com/developer/article/1379487 2)HSDB,即Hotspot debugger,位置在 ...

  2. sass进阶—函数

    /*内置函数*/ /*1)常规的rgb,rgba函数*/$color:rgb(255,255,162);body{ color: $color; background-color:rgba($colo ...

  3. 金蝶K3 WISE 快速登录

    金蝶K3 WISE 快速登录 "C:\Program Files (x86)\Kingdee\K3ERP\k3main.exe" -LoginUser|账套号|账套密码|用户账号| ...

  4. 【转】Java Socket编程基础及深入讲解

    原文:https://www.cnblogs.com/yiwangzhibujian/p/7107785.html#q2.3.3 Socket是Java网络编程的基础,了解还是有好处的, 这篇文章主要 ...

  5. EHDU-1039 asier Done Than Said?

    Password security is a tricky thing. Users prefer simple passwords that are easy to remember (like b ...

  6. git 从远程仓库获取所有分支

    git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}& ...

  7. centos官网下载地址

    CentOS 7官方下载地址:https://www.centos.org/download/ 源自博友的博客:https://blog.csdn.net/yf9595/article/details ...

  8. Gradle入门与使用

    注:此篇博客主要是看官网的学习笔记:https://docs.gradle.org/current/userguide/installation.html 一.安装: 1.Gradle有内置的groo ...

  9. C/C++中的内存对齐问题和pragma pack命令详解

    这个内存对齐问题,居然影响到了sizeof(struct)的结果值.突然想到了之前写的一个API库里,有个API是向后台服务程序发送socket请求.其中的socket数据包是一个结构体.在发送soc ...

  10. file_get_contents 在本地测试可以, 但在服务器上报错403

    解决方法: Most likely if you don't get any content while accessing an webpage, probably it doesn't want ...