Spring Boot 微服务框架 Part1

Spring Boot 微框架Part1

1.springboot的引言

SpringBoot是由 Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,springboot致力于在蓬勃发展的快速应用开发领域(rapid application devolopment)成为领导者。

springboot(微框架) = spring(项目管理) + springmvc(控制器)

2.SpringBoot的特点

  1. 构建一个独立的spring应用;
  2. springboot开发的应用内嵌tomcat容器,无需部署war文件;
  3. 简化maven的配置;
  4. 自动配置spring应用和springmvc应用,没有xml配置文件。

3.SpringBoot的环境搭建

环境要求:

  1. MAVEN 3.x+
  2. Spring FrameWork 4.x+
  3. JDK7.x +
    . Spring Boot 1.5.x+

3.1 项目中引入依赖

<!-- 继承springboot的父项目 -->
<parent>
  <artifactId>spring-boot-starter-parent</artifactId>
  <groupId>org.springframework.boot</groupId>
  <version>1.5.7.RELEASE</version>
</parent>

<!-- 引入web的支持 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

3.2 引入springboot配置文件

项目中src/main/resources/application.yml

3.3 编写入口类

package com.baizhi;
//入口类必须放在项目的基包下,SpringBoot只有一个入口类,所以这个注解只能出现一次
@SpringBootApplication
public class Application {
    //main函数
    public static void main(String[] args) {
        //启动 springboot应用
        //参数1:入口类类对象 参数2:main函数参数
        SpringApplication.run(Application.class,args);
    }
}

3.4 建包并创建控制器

package com.baizhi.controller;

/**
 * 访问控制器路径:http://localhost:8080/hello/hello
 * 注意:springboot的应用 默认 没有项目名
 */
@Controller
@RequestMapping("hello")
public class HelloController {

    @RequestMapping("hello")
    @ResponseBody
    public String hello(){
        System.out.println("=========hello==========");
        return "hello";
    }
}

注意:使用springboot应用开发的项目默认没有应用名,如果需要使用应用名,必须在配置文件中加入如下配置指定应用名:

server:
  port: 8989 #修改内嵌服务器的端口
  context-path: /ems #设置项目名为ems

4.SpringBoot中相关注解说明

# @SpringBootApplication
    注解作用:用来标识这是一个SpringBoot入口类,这个注解只能出现一次。
    详解:
    	@SpringBootApplication 是一个 派生注解|组合注解,等价于
    		@SpringBootConfiguration:标识注解,标识这是一个springboot入口类
			@EnableAutoConfiguration:核心注解,自动配置spring 以及项目中引入第三方技术的自动配置
			@ComponentScan		:组件扫描注解,默认扫描的是入口类所在的包及其子包
# main函数的作用
	1.通过main函数这种方式启动内部内嵌的tomcat服务器
	2.SpringApplication.run(Application.class,args);
		参数1:入口类的类对象 目的:让@EnableAutoConfiguration注解 自动配置spring时,将	  	 				@ComponentScan扫描到注解,创建对象一并放入工厂。
		参数2:main方法的参数,这个参数通过指定外部虚拟机参数的形式覆盖内部默认参数。
		
# @RestController = @Controller + @ResponseBody
	修饰范围:用在类上,用在所有的控制器上
	作用:	  将控制器中所有的方法的返回值转换为json并相应到前端

5.SpringBoot的配置文件拆分

# 配置文件拆分规则:
	- 将公共配置放入主配置文件中,将不同的配置放入不同环境配置文件中:
	
# 举例:如,
	springboot 	ems   应用名
			端口号:
			测试环境下:8989
			生产环境下:9090
# 主配置文件
	application.yml
		server:
  			context-path: /ems
# 测试环境下配置文件:
	application-dev.yml
		server:
  			port: 8989
# 生产环境下配置文件:
	application-prod.yml
		server:
  			port: 9090
  			
# 激活某个配置文件,在主配置文件中写明:
	spring:
  		profiles:
    		active: prod|dev

6.SpringBoot banner的使用

  • 自定义beanner:

    在 src/main/resources 目录下 自定义banner.txt文件 书写banner的内容即可。
    

7.SpringBoot创建自定义对象

7.1 创建单个对象

# 注解方式:@Component 通用组件对象的创建注解
	@Service		标识业务层组件创建
	@Controller		控制器对象创建
	@Repository		用来创建DAO组件注解

7.2 管理多个对象

在springboot中如果要管理复杂对象必须使用@Configuration + @Bean注解进行管理

# @Configuration 配置注解 修饰范围:用在类上
	作用:相当于曾经的applicationContext.xml配置文件
@Configuration
public class BeanConfig {

    /**
     * 创建日期对象
     * @return
     */
    @Bean
    public Calendar getCalendar(){
        return Calendar.getInstance();
    }

    /**
     * 创建数据库连接对象
     * @return
     * @throws ClassNotFoundException
     * @throws SQLException
     */
    @Bean
    public Connection getConnection() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/ssm", "root", "root");
        return connection;
    }
}
# 注意: 
			  1.@Configuration 配置注解主要用来生产多个组件交给工厂管理  (注册形式)
			  2.@Component     用来管理单个组件                      (包扫描形式)

8.springboot中注入

springboot中提供了三种注入方式: 注入基本属性,对象注入

8.1 基本属性注入

# 使用@Value注解进行属性注入
	注入基本类型:string + 日期类型 + 八种基本类型 使用@Value注入
name: xiaohei #字符串类型
age: 23 #整数类型
sex: true #布尔类型
date: 2020/1/1 #日期类型
price: 23.23 #浮点数类型
qqs: xiaofei,xiaofei,xiaowang #数组
strs: abd,dasd,dasd #List集合
maps: "{key1: 'value1', key2: 'value2'}" #Map集合
@Value("${name}")
private String name;
@Value("${age}")
private Integer age;
@Value("${sex}")
private boolean sex;
@Value("${date}")
private Date date;
@Value("${price}")
private float price;
@Value("${qqs}")
private String[] qqs;
@Value("#{'${strs}'.split(',')}")
private List<String> strs;
@Value("#{${maps}}")
private Map<String,String> maps;

8.2 对象属性注入

# @ConfigurationProperties(prefix="前缀")
@Component
@ConfigurationProperties(prefix = "user")
public class User {
    private String name;
    private Integer age;
    private Date date;
    private List<Integer> nums;
<!-- 引入依赖构建自定义注入元数据 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <optional>true</optional>
</dependency>
# yml文件中编写对象信息
user:
  name: 小王
  age: 13
  date: 2020/1/1
  nums:
    - 1111
    - 2222

9.Spring集成jsp模板展示

9.1 引入jsp的集成jar包

<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<!-- 配置内嵌tomcat解析jsp -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

9.2 配置视图解析器

#在配置文件中引入视图解析器
spring:
  mvc:
    view:
      prefix: /   	# /代表访问项目中webapp中页面
      suffix: .jsp 

9.3 IDEA中无法直接访问jsp的解决方案

  1. 使用插件方式启动springboot项目:
<build>
    <!--引入jsp运行插件-->
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
使用插件启动:springboot:run
  1. 修改当前springboot项目的运行目录
在Edit Configurations中设置SpringBoot的启动器Application的Working Directory为$ModuleFileDir$

10.SpringBoot整合mybatis框架

10.1 引入依赖

<!--SpringBoot启动器-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql驱动-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- mybatis整合SpringBoot的启动器 -->
<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>2.1.3</version>
</dependency>
<!-- druid连接池的依赖 -->
<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid-spring-boot-starter</artifactId>
  <version>1.1.24</version>
</dependency>
<!-- SpringBoot整合JSP相关依赖 -->
<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
  <groupId>jstl</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>
<!-- SpringBoot测试相关 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
</dependency>

10.2 配置配置文件

server:
  port: 8080 #设置端口号为8080
  servlet:
    context-path: /ems #设置项目名为ems

spring:
  mvc:
    view: #配置视图解析器
      prefix: / # 设置前缀为/
      suffix: .jsp # 设置后缀为.jsp

  datasource: #设置数据库连接池
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    druid:
      url: jdbc:mysql:///file?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT&allowPublicKeyRetrieval=true
      username: root
      password: root

10.3 增加mybatis整合相关配置

# 指定映射文件的位置,实体类的别名
mybatis:
  mapper-locations: classpath:mapper/*Dao.xml
  type-aliases-package: com.baizhi.entity
@SpringBootApplication
@MapperScan("com.baizhi.dao")//指定dao接口所在的包
public class Application {

10.4 编写测试类

DAO、Service代码都编写好之后,要先对Service实现类对象的代码进行测试:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)//SpringBoot的测试配置类加载器
public class BaseTest {
    @Autowired
    private UserService userService;

    @Test
    public void test(){
        List<User> all = userService.findAll();
        all.forEach(user -> System.out.println("user = " + user));
    }
}

10.5 开启jsp页面的热部署

server:
  port: 8989
  jsp-servlet:
    init-parameters:
      development: true  #开启jsp页面的调试模式
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值