人生苦短,请用Spring Boot

概述

Spring Boot 是一个轻量级框架,它的的目的是提供一组工具,以便快速构建容易配置的 Spring 应用程序。Spring Boot使用户可以“直接运行”独立的、基于生产级的应用程序。这意味着只需极少的配置,就可以快速获得一个正常运行的 Spring 应用程序。

特性

  1. 为基于 Spring 的应用程序开发提供更快的入门体验
  2. 直接集成Tomcat、Jetty、Undertow等Web容器(不需要部署war包)
  3. 提供了自定义的起步依赖,简化pom.xml配置
  4. 在合理的情况下自动配置Spring和第三方库
  5. 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。
  6. 极少的注解配置,绝对不需要XML配置,不需要XML配置,不需要XML配置。重要的事情说三遍。

快速入门

  1. 起步依赖
    创建 Maven 工程 springBootDemo(打包方式 jar),并在pom.xml中添加起步依赖
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.0.RELEASE</version>
</parent>
<dependencies>
	<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
	</dependency>
</dependencies>

{% asset_img 1.png 图片 %}

我们会发现以上 jar 包被自动导入了,而这些正是我们开发时需要导入的 jar 包。

  1. 变更 JDK 版本
    添加jdk版本配置,然后更新工程

    <properties>
    	<java.version>1.7</java.version>
    </properties>
    
  2. 引导类
    创建引导类

package com.prchen.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

执行引导类main方法,控制台出现以下标识:
{% asset_img 2.png 图片 %}

  1. Spring MVC 实现字符串输出
    用过Spring MVC都知道,使用时需要创建web.xml以及springmvc.xml,并配置前端控制器、处理器映射器、处理器适配器以及视图解析器……但是,用了Spring Boot,这一切繁杂的步骤通通都省了! XML拜拜了您嘞! 我们可以直接写Controller
package com.prchen.demo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloWorldController {
	@RequestMapping("/info")
	public String info() {
		return "Hello Spring Boot!";
	}
}
  1. 修改 tomcat 启动端口
    在 src/main/resources 下创建 application.properties,配置端口信息server.port=8089,然后重新运行引导类,地址栏输入http://localhost:8089/info 大功告成!
    {% asset_img 3.png 图片 %}

  2. 读取自定义配置
    在 src/main/resources 下的 application.properties 增加配置url=http://www.prchen.com,然后修改Controller

@RestController
public class HelloWorldController {

	@Autowired
	private Environment env;
	
	@RequestMapping("/info")
	public String info() {
		return "Hello Spring Boot!" + env.getProperty("url");
	}
}

Spring Boot就会读取自定义配置信息并展示
{% asset_img 4.png 图片 %}

  1. 热部署
    在开发中反复修改类、页面等资源,每次修改后都需要重启才能生效,浪费了大量的时间,能不能在修改代码后不重启就能生效呢?能!Spring Boot在pom.xml 中添加如下依赖就可以实现这样的功能,即热部署。
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
</dependency>

依赖添加后,重启引导类,然后将配置改为url=http://prchen.com,直接刷新页面,配置的更改即时生效了!
{% asset_img 5.png 图片 %}

在Controller类中添加一个方法,不重启引导类,直接刷新页面。

@RequestMapping("/info2")
public String info2() {
	return "Hello Spring Boot2!" + env.getProperty("url");
}

你看到了什么?没错,刚刚添加的方法也即时生效了~没错就是这么方便
{% asset_img 6.png 图片 %}

那么,Spring Boot为什么会这么好用呢?

原理

  1. 关于起步依赖
    jar 包被引入的spring-boot-starter-web 所引用了,所以我们引用 spring-boot-starter-web 后会自动把依赖传递过来。
  2. 关于 @SpringBootApplication 注解
    引导类中 @SpringBootApplication 其实是以下三个注解的总和:
    • @Configuration: 用于定义一个配置类
    • @EnableAutoConfiguration :Spring Boot 会自动根据 jar 包依赖来自动配置目。
    • @ComponentScan: 告诉 Spring 哪个包中用注解标识的类会被自动扫描并装入 bean 容器中。
  3. 自动配置关键注解
    • @Configuration&与@Bean->基于java代码的bean配置
    • @Conditional->设置自动配置条件依赖
    • @EnableConfigurationProperties与@ConfigurationProperties->读取配置文件转换为bean。
    • @EnableAutoConfiguration、@AutoConfigurationPackage 与@Import->实现bean发现与加载。

Spring Boot 整合 ActiveMQ

  1. 使用内嵌服务

    引入ActiveMQ起步依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-activemq</artifactId>
    </dependency>
    

    创建消息生产者

    @RestController
    public class QueueController {
    
    	@Autowired
    	private JmsMessagingTemplate jmsMessagingTemplate;
    	
    	@RequestMapping("/send")
    	public void send(String text) {
    		jmsMessagingTemplate.convertAndSend("prchen", text);
    	}
    }
    

    创建消息消费者

    @Component
    public class Consumer {
    	@JmsListener(destination = "prchen")
    	public void getMessage(String text) {
    		System.out.println("接收到消息:" + text);
    	}
    }
    

    测试:启动服务后,在浏览器执行http://localhost:8089/send?text=abc,控制台输出接收到消息:abc。此时登陆之前配置好的ActiveMQ客户端地址(这里)会发现消息并没有显示,原因是Spring Boot 内置了 ActiveMQ 的服务,所以我们不用单独启动也可以执行应用程序

  2. 使用外部服务

    在 src/main/resources 下的 application.properties 增加配置, 指定 ActiveMQ 的地址(ip为ActiveMQ服务器所在地址)

    spring.activemq.broker-url=tcp://192.168.25.128:61616
    

    再次发送消息,然后登陆客户端,发现成功接收到消息
    {% asset_img 7.png 图片 %}

  3. 发送 Map 消息

    QueueController中添加sendMap方法

    @RequestMapping("/sendMap")
    	public void sendMap() {
    		Map map = new HashMap<>();
    		map.put("name", "zhangsan");
    		map.put("gender", "male");
    		jmsMessagingTemplate.convertAndSend("prchen", map);
    	}
    

    Consumer中添加readMapMessage方法

    @JmsListener(destination = "prchen_map")
    public void readMapMessage(Map map) {
    	System.out.println("接收到Map:" + map);
    }
    

    访问http://localhost:8089/sendMap发送消息,访问客户端,发现消息成功接收
    {% asset_img 8.png 图片 %}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值