SpringBoot创建Web应用

工欲善其事必先利其器,SpringBoot应用开发推荐两款开发工具

1. STS(Spring Tool Suit) 是Spring官方推荐的工具,在Eclipse的基础上提供了开发SpringBoot的插件,下载地址为:https://spring.io/tools

2. Idea,这是一个传说中最好用的收费的开发工具,也提供了对SpringBoot的支持。下载地址:https://www.jetbrains.com/idea/

项目搭建

这里选择使用STS来搭建SpringBoot应用,因为SpringBoot就是为了简化Spring繁琐的配置而诞生的,因此新建一个SpringBoot项目非常简单,通过STS提供的插件,直接在新建项目时选择Spring Starter Project就可以了。

Step 1 : 创建新项目

File--> New--> Spring Starter Project

Step 2: 指定坐标

Service URL 这个参数不用关心,使用默认值就可以了。

name 是项目的名字,最终会显示到项目的结构中,一般和后面的Artifact的值保持一致。

group 指定的是maven坐标中的groupId的值。

Artifact 指定的是maven坐标中artifactId的值。

version 指定是项目的版本。

description 指定项目的描述信息。

package 指定的是项目的基础包名。 SpringBoot项目创建完毕之后,会自动创建一个NameApplication的类,这个类就会放到这个package指定的包下,作为整个项目的最顶层的包。

Step 3: 选择依赖

这里就是选择Maven的依赖,SpringBoot项目和传统的Maven项目一样,都可以直接修改pom文件来管理依赖,因为SpringBoot依赖都比较长,开发者可能不太便于记忆,因此提供了一个图形化界面来选择依赖,比如要开发Web应用,选择Web就可以了;要使用Mybatis选择Mybatis的依赖就好。这样在创建项目的时候,就会自动把这些依赖引入到pom中。

点击finish之后,如果是第一次使用,这个过程会比较漫长,因为需要下载所依赖的jar包,耐心等待即可。如果要加快下载速度,可以进行一些Maven项目的配置,具体可以参考《maven下载构件慢》 这篇文章。

最后的目录结构如下

application.properties 配置文件就是Spring Boot的核心配置文件,在这里可以进行配置,默认为空,没有任何配置,这也正是SpringBoot所提倡的,习惯优于配置。当然,后面还需要对具体的内容进行配置,比如要使用的Web容器,再或者指定容器的的端口号等等。

Step 4: 创建Controller

到这里,SpringBoot的项目就创建成功了,下面来创建一个Controller类,并使用RequestMapping进行映射。

package com.example.demo.controller;

import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class IndexController {
	
	@RequestMapping("/")
	public void index(HttpServletResponse response) {
		try {
			response.getWriter().write("Hello World");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

Step 5:启动

任何一个Spring Boot项目都有一个 可以运行的程序。以Application结尾,如上例的DemoApplication。打开这个程序,以java或者以spring Boot的方式就可以运行。

启动日志如下:

Step 6: 浏览器访问

看到Tomcat启动在了8080端口。下面访问 localhost:8080 看浏览器的显示。

配置服务器和端口号

默认给我们使用了Tomcat作为Web容器,默认开启了8080端口,爷看着不爽,想用80端口,怎么办?

你只需要在application.properties中加入下面一句就可以了

server.port=80

我不想用Tomcat,我想用jetty,怎么办?你要用jetty,那首先要引入jetty的依赖吧

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

有了jetty的包,总要把Tomcat的包去掉吧,啥,你说你没引入Tomcat的包,那怎么可能呢,只是它隐藏起来了

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<exclusions>
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
		</exclusion>
	</exclusions>
</dependency>

可以了,把Tomcat给揪出来了,下面启动使用的就是Jetty了。

 

到这里,最简单的Web应用就搭建起来了,但这个Web应用仅具备Web请求与响应,并没有连接数据库,也没有缓存支持,不能记录日志,也不支持消息队列......有时间一个一个整合!

整合Mybatis

---慢慢补上,要上班了....

整合Redis

SpringBoot的核心思想是0配置、0配置、0配置!!! 因此你在传统Spring项目中配置Redis的那一套全不用,全都不用!只需要在SpringBoot中引入SpringBoot-Redis的依赖,就可以使用了!

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

测试代码

package com.example.demo;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class RedisController {
	
	@Autowired
	private RedisTemplate<String, String> redisTemplate;
	
	@RequestMapping("/set")
	public void setKey(String key, String value, HttpServletResponse res) throws Exception {
		redisTemplate.opsForValue().set(key, value);
		res.getWriter().println("Set Success");
	}
	
	
}

Spring中提供的操作Redis的类是RedisTemplate,不需要任何的配置,直接注入就可以使用。

Redis支持的各种数据类型,可以通过RedisTemplate的opsForXxx方法获取,比如string类型,就可以通过上面的opsForValue方法获取。

浏览器测试

当客户端访问/set这个路径时,就会把传入的key和value保存到redis中,如下

Redis中查看查看,数据已经保存到Redis中了。

Redis配置

虽说SpringBoot的核心是0配置,只是说对于繁琐的冗余的配置都不需要了,但有些关键内容还是要进行配置的,比如你要连接到哪台Redis,Redis开放的端口是多少,Redis的密码等等信息。当然,这些都是有默认值的,不满足默认值你就需要自己去配置了。

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
spring.redis.database=0

第一条是指定Redis服务器的地址

第二条是指定Redis服务器的端口

第三条是指定Redis服务器的密码

第四条是指定要连接的Redis库(0-15)

还有一堆的关于Redis连接池的配置,这里就不说了,有需要的自己在网络上搜下就可以了。

使用Redis做方法级别缓存

经常有这样的需求,为了提高性能,某些方法级别需要增加缓存。方法级别的缓存可以直接通过注解支持,非常方便。

先看代码

@RequestMapping("/")
@ResponseBody
public String index(String name) {
	// 进行复杂的计算
	try {
		Thread.sleep(5000);
	} catch (InterruptedException e) {
		// TODO Auto-generated catch block
	}
	return "Hello " + name;
}

这段代码非常简单,就是请求根路径的时候,传入名字,并输出 Hello Name给客户端。中间会有一个非常耗时的计算,且只要name值相同,计算出的结果都是一样的。每次请求都要等待5s这样用户体验非常不好,且浪费系统资源。

我们希望当第一次访问这个方法传入 风清扬 时,需要等待5s后,客户端接收到响应,第二次再请求同样的名字时,可以立刻得到结果。

实现步骤

(1)开启缓存支持 增加 @EnableCaching 这个注解在配置类中

@EnableCaching
@SpringBootApplication
public class RedisApplication {

	public static void main(String[] args) {
		SpringApplication.run(RedisApplication.class, args);
	}

}

(2)指定@CacheConfig  和  @Cacheable

package com.example.demo;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@CacheConfig(cacheNames = "redis:controller")
public class RedisController {

	@RequestMapping("/")
	@Cacheable(key = "#name")
	@ResponseBody
	public String index(String name) {
		// 进行复杂的计算
		try {
			Thread.sleep(5000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
		}
		return "Hello " + name;
	}

}

再次测试的时候,我们就会发现,只要是名字相同的,都可以非常快速的响应,不需要每次都等待5s了。

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值