Spring Boot设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,是为了让开发人员尽可能快的创建并允许Spring 应用程序,尽可能减少项目的配置文件。
从最根本上来讲,Spring Boot 就是一些库的集合,它能够被任意项目的构建系统所使用。它使用 “习惯优于配置” (项目中存在大量的配置,此外还内置一个习惯性的配置)的理念让你的项目快速运行起来。所以 spring boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 maven 整合了所有的 jar 包,spring boot 整合了所有的框架。
总结起来就是:
(1)为所有 Spring 开发提供一个更快更广泛的入门体验。
(2)零配置。无冗余代码生成和XML 强制配置,遵循“约定大于配置” 。
(3)集成了大量常用的第三方库的配置, Spring Boot 应用为这些第三方库提供了几乎可以零配置的开箱即用的能力。
(4)提供一系列大型项目常用的非功能性特征,如嵌入式服务器、安全性、度量、运行状况检查、外部化配置等。
(5)Spring Boot 不是Spring 的替代者,Spring 框架是通过 IOC 机制来管理 Bean 的。Spring Boot 依赖 Spring 框架来管理对象的依赖。Spring Boot 并不是Spring 的精简版本,而是为使用 Spring 做好各种产品级准备。
SpringBoot核心功能1、独立运行Spring项目
Spring boot 可以以jar包形式独立运行,运行一个Spring Boot项目只需要通过java -jar xx.jar来运行。
2、内嵌servlet容器
Spring Boot可以选择内嵌Tomcat、jetty或者Undertow,这样我们无须以war包形式部署项目。
3、提供starter简化Maven配置
spring提供了一系列的start pom来简化Maven的依赖加载,例如,当你使用了spring-boot-starter-web,会自动加入依赖包。
4、自动装配Spring
SpringBoot会根据在类路径中的jar包,类、为jar包里面的类自动配置Bean,这样会极大地减少我们要使用的配置。当然,SpringBoot只考虑大多数的开发场景,并不是所有的场景,若在实际开发中我们需要配置Bean,而SpringBoot灭有提供支持,则可以自定义自动配置。
5、准生产的应用监控
SpringBoot提供基于http ssh telnet对运行时的项目进行监控。
6、无代码生产和xml配置
SpringBoot不是借助与代码生成来实现的,而是通过条件注解来实现的,这是Spring4.x提供的新特性。
SpringBoot优缺点 优点:1、快速构建项目。
2、对主流开发框架的无配置集成。
3、项目可独立运行,无须外部依赖Servlet容器。
4、提供运行时的应用监控。
5、极大的提高了开发、部署效率。
6、与云计算的天然集成。
1、如果你不认同spring框架,也许这就是缺点。
2、SpringBoot特性
3、创建独立的Spring项目
4、内置Tomcat和Jetty容器
5、提供一个starter POMs来简化Maven配置
6、提供了一系列大型项目中常见的非功能性特性,如安全、指标,健康检测、外部配置等
7、完全没有代码生成和xml配置文件
(1)@RestController和@Controller指定一个类,作为控制器的注解 ,并说明其区别
(2)@RequestMapping方法级别的映射注解,这一个用过Spring MVC的小伙伴相信都很熟悉
(3)@EnableAutoConfiguration和@SpringBootApplication是类级别的注解,根据maven依赖的jar来自动猜测完成正确的spring的对应配置,只要引入了spring-boot-starter-web的依赖,默认会自动配置Spring MVC和tomcat容器
(4)@Configuration类级别的注解,一般这个注解,我们用来标识main方法所在的类,完成元数据bean的初始化。
(5)@ComponentScan类级别的注解,自动扫描加载所有的Spring组件包括Bean注入,一般用在main方法所在的类上
(6)@importResource类级别注解,当我们必须使用一个xml的配置时,使用@importResource和@Configuration来标识这个文件资源的类。
(7)@Autowired注解,一般结合@ComponentScan注解,来自动注入一个Service或Dao级别的Bean
(8)@Component类级别注解,用来标识一个组件,比如我自定了一个filter,则需要此注解标识之后,Spring Boot才会正确识别。
(1)让我们来看看默认生成的 pom.xml 文件中到底有些什么:
4.0.0 com.xpwi springboot0.0.1-SNAPSHOT jar springboot Demo project for Spring Boot org.springframework.boot spring-boot-starter-parent2.1.0.RELEASE UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-testtest org.springframework.boot spring-boot-maven-plugin
(2)我们可以看到一个比较陌生一些的标签 ,这个标签是在配置 Spring Boot 的父级依赖:
org.springframework.boot spring-boot-starter-parent2.1.0.RELEASE
有了这个,当前的项目才是 Spring Boot 项目,spring-boot-starter-parent 是一个特殊的 starter ,它用来提供相关的 Maven 默认依赖,使用它之后,常用的包依赖就可以省去 version 标签。
2 使用注解@ConfigurationProperties映射通过注解**@ConfigurationProperties(prefix=“配置文件中的key的前缀”)**可以将配置文件中的配置自动与实体进行映射
application.properties配置如下:
person: name: zhangsan age: 18 或者,application.yml配置如下:
person: name: zhangsan age: 18
实体Bean代码如下:
@Controller @ConfigurationProperties(prefix = "person") public class QuickStartController { private String name; private Integer age; @RequestMapping("/quick") @ResponseBody public String quick(){ return "springboot 访问成功! name="+name+",age="+age; } public void setName(String name) { this.name = name; } public void setAge(Integer age) { this.age = age; }
注意:使用@ConfigurationProperties方式可以进行配置文件与实体字段的自动映射,但需要字段必须提供set方法才可以,而使用@Value注解修饰的字段不需要提供set方法
8.SpringBoot与整合其他技术 1 SpringBoot整合Mybatis 1 .添加Mybatis的起步依赖2.添加数据库驱动坐标org.mybatis.spring.boot mybatis-spring-boot-starter1.1.1
3 添加数据库连接信息mysql mysql-connector-java
在application.properties中添加数据量的连接信息
注意:高版本的url现在需要设置时区等信息
#DB Configuration: spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTCuseUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=1234564 创建user表
在test数据库中创建user表
-- Table structure for `user`-- ----------------------------DROp TABLE IF EXISTS `user`;CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL, `password` varchar(50) DEFAULT NULL, `name` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;-- ------------------------------ Records of user-- ----------------------------INSERT INTO `user` VALUES ('1', 'zhangsan', '123', '张三');INSERT INTO `user` VALUES ('2', 'lisi', '123', '李四');5.创建实体Bean
public class User { // 主键 private Long id; // 用户名 private String username; // 密码 private String password; // 姓名 private String name;
//此处省略getter和setter方法 .. ..6 编写Mapper
@Mapperpublic interface UserMapper { public ListqueryUserList();}
注意:@Mapper标记该类是一个mybatis的mapper接口,可以被spring boot自动扫描到spring上下文中
7 .配置Mapper映射文件在srcmainresourcesmapper路径下加入UserMapper.xml配置文件"
select * from user 8 .在application.properties中添加mybatis的信息
#spring集成Mybatis环境#pojo别名扫描包mybatis.type-aliases-package=com.itheima.domain#加载Mybatis映射文件mybatis.mapper-locations=classpath:mapper/*Mapper.xml9 ,编写测试Controller
@Controllerpublic class MapperController {@Autowiredprivate UserMapper userMapper;@RequestMapping("/queryUser")@ResponseBodypublic List10 测试 3.SpringBoot整合Junit 1 添加Junit的起步依赖queryUser(){ List users = userMapper.queryUserList(); return users;}
2 编写测试类org.springframework.boot spring-boot-starter-testtest
package com.itheima.test;import com.itheima.MySpringBootApplication;import com.itheima.domain.User;import com.itheima.mapper.UserMapper;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;import java.util.List;@RunWith(SpringRunner.class)@SpringBootTest(classes = MySpringBootApplication.class)public class MapperTest {@Autowiredprivate UserMapper userMapper;@Testpublic void test() { Listusers = userMapper.queryUserList(); System.out.println(users);}
其中,SpringRunner继承自SpringJUnit4ClassRunner,使用哪一个Spring提供的测试测试引擎都可以
public final class SpringRunner extends SpringJUnit4ClassRunner
@SpringBootTest的属性指定的是引导类的字节码对象
3 控制台打印信息1.SpringBoot整合Spring Data JPA
3.1 添加Spring Data JPA的起步依赖
org.springframework.boot spring-boot-starter-data-jpa
3.2 添加数据库驱动依赖
mysql mysql-connector-java
3.3 在application.properties中配置数据库和jpa的相关属性
#DB Configuration:spring.datasource.driverClassName=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8spring.datasource.username=rootspring.datasource.password=123456#JPA Configuration:spring.jpa.database=MySQLspring.jpa.show-sql=truespring.jpa.generate-ddl=truespring.jpa.hibernate.ddl-auto=updatespring.jpa.hibernate.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy3.4 创建实体配置实体
@Entitypublic class User { // 主键 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 用户名 private String username; // 密码 private String password; // 姓名 private String name;
//此处省略setter和getter方法... ...3.5 编写UserRepository
public interface UserRepository extends JpaRepository
public List findAll();
}
3.6 编写测试类@RunWith(SpringRunner.class)
@SpringBootTest(classes=MySpringBootApplication.class)
public class JpaTest {
@Autowiredprivate UserRepository userRepository;@Testpublic void test(){ List3.7 控制台打印信息users = userRepository.findAll(); System.out.println(users);}
注意:如果是jdk9,执行报错如下:
原因:jdk缺少相应的jar
解决方案:手动导入对应的maven坐标,如下:
javax.xml.bind jaxb-api2.3.0
jdk8正常
4.SpringBoot整合Redis 1 添加redis的起步依赖2 配置redis的连接信息org.springframework.boot spring-boot-starter-data-redis
#Redisspring.redis.host=127.0.0.1spring.redis.port=63793 注入RedisTemplate测试redis *** 作
@RunWith(SpringRunner.class)@SpringBootTest(classes = SpringbootJpaApplication.class)public class RedisTest {@Autowiredprivate UserRepository userRepository;@Autowiredprivate RedisTemplateredisTemplate;@Testpublic void test() throws JsonProcessingException { //从redis缓存中获得指定的数据 String userListData = redisTemplate.boundValueOps("user.findAll").get(); //如果redis中没有数据的话 if(null==userListData){ //查询数据库获得数据 List all = userRepository.findAll(); //转换成json格式字符串 ObjectMapper om = new ObjectMapper(); userListData = om.writevalueAsString(all); //将数据存储到redis中,下次在查询直接从redis中获得数据,不用在查询数据库 redisTemplate.boundValueOps("user.findAll").set(userListData); System.out.println("===============从数据库获得数据==============="); }else{ System.out.println("===============从redis缓存中获得数据==============="); } System.out.println(userListData);}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)