springboot学习笔记1

什么是Spring boot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

Spring Boot特性

1. 创建独立的Spring应用程序

2. 嵌入的Tomcat,无需部署WAR文件

3. 简化Maven配置

4. 自动配置Spring

5. 提供生产就绪型功能,如指标,健康检查和外部配置

6.开箱即用,没有代码生成,也无需XML配置。

Spring Boot特性理解

为基于Spring的开发提供更快的入门体验

开箱即用,没有代码生成,也无需XML配置。同时也可以修改默认值来满足特定的需求。

提供了一些大型项目中常见的非功能特性,如嵌入式服务器、安全、指标,健康检测、外部配置等。

Spring Boot并不是对Spring功能上的增强,而是提供了一种快速使用Spring的方式。

 

eclipse配置springboot

开发准备

开发环境JDK 1.8

开发工具(Eclipse)

项目管理工具( Maven

项目创建

创建Maven Project (springboot1)

 

配置pom.xml

 

 

<!--

spring boot 父节点依赖,引入这个之后相关的引入就不需要添加version配置,spring boot会自动选择最合适的版本进行添加。

 -->

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.4.1.RELEASE</version>

</parent>

 

java.version 指定jdk版本号:

<java.version>1.8</java.version>

 

添加spring-boot-starter-web依赖

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

 

maven依赖添加后会报错

update project即可


测试

创建控制层

RestController (等价于@Controller @RequestBody

@RestController

public class Hello2Controller {

@RequestMapping("/hello")

public String  name() {

return "2018-03-07";

}

}

创建启动类

@SpringBootApplication

public class App  {

public static void main(String[] args) {

SpringApplication.run(App.class, args);

}

}

访问

http://127.0.0.1:8080/hello

注意:

所有的类要与启动类统计或者在启动类统计的包下面,因为只有这样启动类启动时才能扫描到所有的类。

spring boot返回json数据

创建实体类

控制层方法

@RequestMapping("/getDemo")

public Demo getDemo() {

Demo demo = new Demo();

demo.setId(123);

demo.setName("张三");

return demo;

}

访问

http://127.0.0.1:8080/getDemo

Spring Boot使用FastJson解析JSON数据

引入fastjson依赖库

 

 

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>1.2.15</version>

</dependency>

 

这里要说下很重要的话,官方文档说的1.2.10以后,会有两个方法支持HttpMessageconvert,一个是FastJsonHttpMessageConverter,支持4.2以下的版本,一个是FastJsonHttpMessageConverter4支持4.2以上的版本,具体有什么区别暂时没有深入研究。这里也就是说:低版本的就不支持了,所以这里最低要求就是1.2.10+。

配置fastjon(支持两种方法)

第一种方法就是:

1)启动类继承extends WebMvcConfigurerAdapter

2)覆盖方法configureMessageConverters

 

 

 

 

 

 

 

 

 

 

 

第一种方式代码

@Override

public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {

super.configureMessageConverters(converters);

 

// 1、需要先定义一个 convert 转换消息的对象;

// 2、添加fastJson 的配置信息,比如:是否要格式化返回的json数据;

// 3、在convert中添加配置信息.

// 4、将convert添加到converters当中.

 

// 1、需要先定义一个 convert 转换消息的对象;

FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();

 

// 2、添加fastJson 的配置信息,比如:是否要格式化返回的json数据;

FastJsonConfig fastJsonConfig = new FastJsonConfig();

fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);

 

// 处理中文乱码

List<MediaType> mediaTypes = new ArrayList<MediaType>();

mediaTypes.add(MediaType.APPLICATION_JSON_UTF8);

fastConverter.setSupportedMediaTypes(mediaTypes);

 

// 3、在convert中添加配置信息.

fastConverter.setFastJsonConfig(fastJsonConfig);

 

// 4、将convert添加到converters当中.

converters.add(fastConverter);

}

第二种方法

 

 

 

 

 

 

 

 

 

 

 

1)在App.java启动类中,

注入Bean : HttpMessageConverters

@Bean

public HttpMessageConverters fastJsonHttpMessageConverters() {

// 1、需要先定义一个 convert 转换消息的对象;

FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();

 

// 2、添加fastJson 的配置信息,比如:是否要格式化返回的json数据;

FastJsonConfig fastJsonConfig = new FastJsonConfig();

fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);

 

// 3、在convert中添加配置信息.

fastConverter.setFastJsonConfig(fastJsonConfig);

 

// 处理中文乱码

List<MediaType> mediaTypes = new ArrayList<MediaType>();

mediaTypes.add(MediaType.APPLICATION_JSON_UTF8);

fastConverter.setSupportedMediaTypes(mediaTypes);

 

HttpMessageConverter<?> converter = fastConverter;

return new HttpMessageConverters(converter);

}

Spring Boot热部署(springloader)

 

第一种方法:

pom.xml文件添加依赖包:

 

<plugin>

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-maven-plugin </artifactId>

           <dependencies>  

           <!--springloaded  hot deploy -->  

           <dependency>  

               <groupId>org.springframework</groupId>  

               <artifactId>springloaded</artifactId>  

               <version>1.2.4.RELEASE</version>

           </dependency>  

        </dependencies>  

        <executions>  

           <execution>  

               <goals>  

                   <goal>repackage</goal>  

               </goals>  

               <configuration>  

                   <classifier>exec</classifier>  

               </configuration>  

           </execution>  

        </executions>

</plugin>

 

使用spring-boot:run


第一种方法运行时出现的错误

springboot热部署spring-bootrun是出现的错误:

No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?

1eclipse菜单 -  Window - Preferences- Java - Installed JREs 将配置的JRE定位到JDK,例如JRE homeD:\Program Files (x86)\Java\jdk1.6.0_45

2ALT+F5 进行  update project

3Debug or Run again.

第一种方法缺点无法关闭进程,需要手动关闭

运行方法二

如果使用的run as java application的话,那么还需要做一些处理。

 

spring-loader-1.2.4.RELEASE.jar下载下来,放到项目的lib目录中,然后把IDEArun参数里VM参数设置为:

-javaagent:.\lib\springloaded-1.2.4.RELEASE.jar -noverify

然后启动就可以了,这样在run as的时候,也能进行热部署



第二种方法缺点:

新建方法无效(就行新增的方法后还是需要重启)

第三种方法(建议使用)

springboot + devtools(热部署)

spring-boot-devtools

spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间。

其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为  restart ClassLoader

,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间(5秒以内)。

 

 

使用方法

添加依赖包:

<dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-devtools</artifactId>

            <optional>true</optional>

           <scope>true</scope>

</dependency>

添加spring-boot-maven-plugin

<build>

<plugins>

    <plugin>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-maven-plugin</artifactId>

            <configuration>

          <!--fork :  如果没有该项配置,devtools不会起作用,即应用不会restart -->

                <fork>true</fork>

            </configuration>

        </plugin>

</plugins>

   </build>

说明

1. devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的。

2. devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实现(这里注意不同的模板配置不一样)

 

测试方法

修改类-->保存:应用会重启

修改配置文件-->保存:应用会重启

修改页面-->保存:应用会重启,页面会刷新(原理是将spring.thymeleaf.cache设为false

如果不能使用spring-boot-devtools原因分析

对应的spring-boot版本是否正确,这里使用的是1.4.1版本;

是否加入plugin以及属性<fork>true</fork>

Eclipse Project 是否开启了Build Automatically(我自己就在这里栽了坑,不知道为什么我的工具什么时候关闭了自动编译的功能)。

如果设置SpringApplication.setRegisterShutdownHook(false),则自动重启将不起作用。

Spring Boot JPA-Hibernate

pom.xml添加mysql,spring-data-jpa依赖

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

</dependency>

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

application.properties文件中配置mysql连接配置文件

########################################################

###datasource

########################################################

spring.datasource.url = jdbc:mysql://localhost:3306/test

spring.datasource.username = root

spring.datasource.password = root

spring.datasource.driverClassName = com.mysql.jdbc.Driver

spring.datasource.max-active=20

spring.datasource.max-idle=8

spring.datasource.min-idle=8

spring.datasource.initial-size=10

application.properties文件中配置JPA配置信息

########################################################

### Java Persistence Api

########################################################

# Specify the DBMS

spring.jpa.database = MYSQL

# Show or not log for each sql query

spring.jpa.show-sql = true

# Hibernate ddl auto (create, create-drop, update)

spring.jpa.hibernate.ddl-auto = update

# Naming strategy

#[org.hibernate.cfg.ImprovedNamingStrategy  #org.hibernate.cfg.DefaultNamingStrategy]

spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy

# stripped before adding them to the entity manager)

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

编写测试例子

(1) 创建实体类Demo

package com.chen.springboot_mybatis;

 

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

 

/**

 * * 如何持久化呢?

 *

 * 1、使用@Entity进行实体类的持久化操作,当JPA检测到我们的实体类当中有

 *

 * @Entity 注解的时候,会在数据库中生成对应的表结构信息。

 *

 *

 * 如何指定主键以及主键的生成策略?

 *

 * 2、使用@Id指定主键.

 * @author chen

 * @date 201837日 下午7:10:03

 */

@Entity

public class Demo {

@Id

@GeneratedValue(strategy = GenerationType.AUTO)

private long id;//主键定义自增长

private String name;

 

public long getId() {

return id;

}

 

public void setId(long id) {

this.id = id;

}

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

 

}

 

(2) 创建jpa repository类操作持久化(CrudRepository)

package com.chen.springboot_mybatis.repository;

 

import org.springframework.data.repository.CrudRepository;

 

import com.chen.springboot_mybatis.Demo;

 

public interface DemoRepository extends CrudRepository<Demo, Integer>{

 

}

 

(3) 创建service类。

(4) 创建restful请求类。

(5) 测试;

Spring Boot添加JSP支持

pom.xml文件添加依赖

<!-- spring boot parent节点,引入这个之后,在下面和spring boot相关的就不需要引入版本了; -->

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>1.4.1.RELEASE</version>

</parent>

 

 <!-- 指定一下jdk的版本 ,这里我们使用jdk 1.8 ,默认是1.6 -->

<java.version>1.8</java.version>

<!-- web支持: 1web mvc; 2restful; 3jackjson支持; 4aop ........ -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

 

<!-- servlet 依赖. -->

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>javax.servlet-api</artifactId>

<scope>provided</scope>

</dependency>

<!--JSTLJSP Standard Tag LibraryJSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apachejakarta小组来维护的。-->

 

<dependency>

<groupId>javax.servlet</groupId>

<artifactId>jstl</artifactId>

</dependency>

 

<!-- tomcat 的支持.-->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-tomcat</artifactId>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>org.apache.tomcat.embed</groupId>

<artifactId>tomcat-embed-jasper</artifactId>

<scope>provided</scope>

</dependency>

 

application.properties配置

添加src/main/resources/application.properties

 

# 页面默认前缀目录

spring.mvc.view.prefix=/WEB-INF/jsp/

# 响应页面默认后缀

spring.mvc.view.suffix=.jsp

# 自定义属性,可以在Controller中读取

application.hello=Hello Angel From application

编写测试Controller

@Controller

public class HelloController {

private String hello;    

@RequestMapping("/helloJsp")

public String helloJsp(Map<String,Object> map){

System.out.println("HelloController.helloJsp().hello=hello");

map.put("hello", hello);

return "helloJsp";

}

}

编写启动类

@SpringBootApplication

public class App {

public static void main(String[] args) {

SpringApplication.run(App.class, args);

}

}

访问

127.0.0.1:8080/helloJsp

注意

特别说明:针对el表达式,类似${hello} 这个对于servlet的版本是有限制的,2.4版本版本以下是不支持的,是无法进行识别的,请注意。

jsp和模板引擎不能同时存在?

不能。

如果使用jsp,将模板引擎依赖注释即可。

Spring Boot建议使用这些模板引擎,避免使用JSP,若一定要使用JSP将无法实现Spring Boot的多种特性

多环境切换

application.properties springboot 在运行中所需要的配置信息。

当我们在开发阶段,使用自己的机器开发,测试的时候需要用的测试服务器测试,上线时使用正式环境的服务器。

这三种环境需要的配置信息都不一样,当我们切换环境运行项目时,需要手动的修改多出配置信息,非常容易出错。

为了解决上述问题,springboot 提供多环境配置的机制,让开发者非常容易的根据需求而切换不同的配置环境。

src/main/resources 目录下创建三个配置文件:

application-dev.properties:用于开发环境

application-test.properties:用于测试环境

application-prod.properties:用于生产环境

我们可以在这个三个配置文件中设置不同的信息,application.properties 配置公共的信息。

application.properties 中配置:

spring.profiles.active=dev

表示激活 application-dev.properties 文件配置, springboot 会加载使用 application.properties application-dev.properties 配置文件的信息。

同理,可将 spring.profiles.active 的值修改成 test prod 达到切换环境的目的。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值