Spring Boot学习

1、SpringBoot基本配置:
1.使用1.8jdk
2.使用Eclipse
3.使用Maven
HelloWord例子搭建过程:
1.建立Maven项目
2.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>

<!-- 指定jdk 使用1.8 默认使用1.6 -->
        <java.version>1.8</java.version>

<!-- spring-boot-starter-web: MVC,AOP的依赖包.... -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!-- <version></version> 由于我们在上面指定了 parent(spring boot) -->
        </dependency>
3.新建Controller,使用@RestController (这里我们使用RestController  (等待于 @Controller 和 @RequestBody))

4.使用@SpringBootApplication指定这是一个 spring boot的应用程序.
                 SpringApplication.run(App.class, args);

2、SpringBoot返回JSON数据
Spring Boot默认使用的json解析框架是jackson
当返回一个对象数据时,SpringBoot会使用 jackson框架将对象数据进行解析转成JSON格式的数据进行返回。

3. 使用FastJson解析JSON数据
3.1引入 FastJson依赖
<dependency>             
<groupId>com.alibaba</groupId>             
<artifactId>fastjson</artifactId>             
<version>1.2.15</version>
 </dependency>
3.2配置fastjon(支持两种方法)
(1)启动类继承extends WebMvcConfigurerAdapter 
(2)覆盖方法configureMessageConverters

// 覆盖configureMessageConverters方法
    @Override
    public void configureMessageConverters(
            List<HttpMessageConverter<?>> converters) {
        /**
         * 1、需要先定义一个 convert 转换消息的对象; 2、添加fastJson 的配置信息,比如:是否要格式化返回的json数据;
         * 3、在convert中添加配置信息. 4、将convert添加到converters当中.
         */
        super.configureMessageConverters(converters);
        // 1、需要先定义一个 convert 转换消息的对象;
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        // 2、添加fastJson 的配置信息,比如:是否要格式化返回的json数据;
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        //处理中文乱码问题
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
        // 3、在convert中添加配置信息.
        fastConverter.setFastJsonConfig(fastJsonConfig);
        fastConverter.setSupportedMediaTypes(fastMediaTypes);
        // 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);
         //处理中文乱码问题
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        // 3、在convert中添加配置信息.
        fastConverter.setSupportedMediaTypes(fastMediaTypes);
        fastConverter.setFastJsonConfig(fastJsonConfig);

        HttpMessageConverter<?> converter = fastConverter;
        return new HttpMessageConverters(converter);
    }

(2)返回数据指定某一类型数据不返回
在属性前指定:
 @JSONField(serialize=false)
 
4、SpringBoot热部署(使用 springloader解决
热部署:简单修改代码需要重启程序不方便
4.1在pom.xml加入相关依赖:
添加build编译节点
<!-- 构建节点 -->
    <build>
        <plugins>
            <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>
        </plugins>

    </build>

4.2使用spring-boot:run 
好处:不用重启程序,刷新页面即可返回新数据
缺点:关闭程序,进程未关闭,重启程序报Tomcat端口被占用错误
4.3配置Augument
如果使用的run as – java application的话,那么还需要做一些处理。 把spring-loader-1.2.4.RELEASE.jar下载下来,放到项目的lib目录中,然后把IDEA的run参数里VM参数设置为:
 -javaagent:.\lib\springloaded-1.2.4.RELEASE.jar -noverify 然后启动就可以了,
这样在run as的时候,也能进行热部署 

缺点:添加新的方法时无法进行热部署
抛出一下错误:
5、解决添加新的方法时无法进行热部署的问题
5.1使用: springboot + devtools(热部署)
spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间。 其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为  restart ClassLoader ,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间(5秒以内)
5.2添加相关依赖包
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>true</scope>
        </dependency>
5.3构建节点
<plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!--fork : 如果没有该项配置,这个devtools不会起作用,即应用不会restart -->
                    <fork>true</fork>
                </configuration>
  </plugin>
6、JPA、 Spring Data
6.1  JPA
持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。
持久化的主要应用是将内存中的对象存储在的数据库中,或者存储在磁盘文件中、XML数据文件中等等。     持久化是将程序数据在持久状态和瞬时状态间转换的机制。     
JDBC就是一种持久化机制。文件IO也是一种持久化机制。
6.2  Spring Data
用于简化数据库访问,并支持云服务的开源框架
6.3  Spring Data JPA
可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。
除了CRUD外,还包括如分页、排序等一些常用的功能。
spring Data JPA的出现就是为了简化JPA的写法,让你只需要编写一个接口继承一个类就能实现CRUD操作了。
6.4使用
在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

7、Repository接口,不提供任何方法
public interface Repository<T, ID extends Serializable> { }  
有这么几点需要强调下:
 1. Repository是一个空接口,即是一个标记接口;
 2. 若我们定义的接口继承了Repository,则该接口会被IOC容器识别为一个Repository Bean纳入到IOC容器中,进而可以在该接口中定义满足一定规范的方法。 
3. 实际上也可以通过@RepositoryDefinition,注解来替代继承Repository接口。 
4. 查询方法以find | read | get开头; 
5. 涉及查询条件时,条件的属性用条件关键字连接,要注意的是条件属性以首字母大写。 
6.使用@Query注解可以自定义JPQL语句实现更灵活的查询。

7.2CrudRepository接口
 CrudRepository 接口提供了最基本的对实体类的添删改查操作  
--T save(T entity);//保存单个实体      
--Iterable<T> save(Iterable<? extends T> entities);//保存集合          
  --T findOne(ID id);//根据id查找实体            
 --boolean exists(ID id);//根据id判断实体是否存在            
 --Iterable<T> findAll();//查询所有实体,不用或慎用!             
--long count();//查询实体数量             
--void delete(ID id);//根据Id删除实体           
  --void delete(T entity);//删除一个实体      
--void delete(Iterable<? extends T> entities);//删除一个实体的集合             
--void deleteAll();//删除所有实体,不用或慎用!   

7.3PagingAndSortingRepository接口 
该接口提供了分页与排序功能     
--Iterable<T> findAll(Sort sort); //排序     
--Page<T> findAll(Pageable pageable); //分页查询(含排序功能)

7.4其他接口
JpaRepository:查找所有实体,排序、查找所有实体,执行缓存与数据库同步
 JpaSpecificationExecutor:不属于Repository体系,实现一组 JPA Criteria 查询相关的方法,封装  JPA Criteria 查询条件。通常使用匿名内部类的方式来创建该接口的对象。 
 自定义 Repository:可以自己定义一个MyRepository接口。

8.Spring Boot JdbcTemplate
8.1加入依赖
<dependency>             
<groupId>org.springframework.boot</groupId>            
 <artifactId>spring-boot-starter-jdbc</artifactId>
 </dependency>

 如果在JPA已经加入的话,则可以不用引入以上的配置。 
<dependency>            
 <groupId>org.springframework.boot</groupId>             
<artifactId>spring-boot-starter-data-jpa</artifactId>
 </dependency> 

通过 @Resource private JdbcTemplate jdbcTemplate;使用JDBC模板
 public Demo getById(long id){     
                                         String sql = "select *from Demo where id=?";   
                                         RowMapper<Demo> rowMapper = new BeanPropertyRowMapper<Demo>(Demo.class);     
                                          return jdbcTemplate.queryForObject(sql, rowMapper,id);
                                                 }
 

   
9、全局异常处理
 * 1、在方法上添加@ExcetionHandler拦截相应的异常信息;
 * 2、如果返回的是View -- 方法的返回值是ModelAndView;
 * 3、如果返回的是String或者是Json数据,那么需要在方法上添加@ResponseBody注解.
在class注解上@ControllerAdvice, 在方法上注解上@ExceptionHandler(value = Exception.class)

@ControllerAdvice public class GlobalDefaultExceptionHandler{          
@ExceptionHandler(value = Exception.class)     
public void defaultErrorHandler(HttpServletRequest req, Exception e)  { } 

10、配置service配置
#server.port=8080 
#server.address= # bind to a specific NIC
 #server.session-timeout= # session timeout in seconds 
#the context path, defaults to '/' 
#server.context-path=/spring-boot 
#server.servlet-path= # the servlet path, defaults to '/'
 #server.tomcat.access-log-pattern= # log pattern of the access log 
#server.tomcat.access-log-enabled=false # is access logging enabled
 #server.tomcat.protocol-header=x-forwarded-proto # ssl forward headers 
#server.tomcat.remote-ip-header=x-forwarded-for 
#server.tomcat.basedir=/tmp # base dir (usually not needed, defaults to tmp) 
#server.tomcat.background-processor-delay=30; # in seconds 
#server.tomcat.max-threads = 0 # number of threads in protocol handler
 #server.tomcat.uri-encoding = UTF-8 # character encoding to use for URL decoding

11、使用thymeleaf
 11.1 在pom.xml加入thymeleaf的依赖:
 <dependency>             
<groupId>org.springframework.boot</groupId>            
 <artifactId>spring-boot-starter-thymeleaf</artifactId> 
</dependency>

11.2如何关闭thymeleaf缓存
########################################################
 ###THYMELEAF (ThymeleafAutoConfiguration) ######################################################## #spring.thymeleaf.prefix=classpath:/templates/ 
#spring.thymeleaf.suffix=.html
#spring.thymeleaf.mode=HTML5 
#spring.thymeleaf.encoding=UTF-8
# ;charset=<encoding> is added
#spring.thymeleaf.content-type=text/html  
# set to false for hot refresh 
#开发过程建议关闭缓存
spring.thymeleaf.cache=false  

11.3编写模板文件src/main/resouces/templates/hello.html: 
 <!DOCTYPE html> 
<head>        
 <title>Hello World!</title>    
 </head>    
 <body>         
<h1 th:inline="text">Hello.v.2</h1>       
  <p th:text="${hello}"></p>     
</body> 
</html>

11.4
/**      * 返回html模板.      */    
   @RequestMapping("/helloHtml")    
  public String helloHtml(Map<String,Object> map){         
                      map.put("hello","from TemplateController.helloHtml");        
                      return "/helloHtml";    
  } 
 
12.Freemaket
12.1加入依赖
<dependency>             
<groupId>org.springframework.boot</groupId>            
 <artifactId>spring-boot-starter-freemarker</artifactId> 
</dependency>

12.2 配置信息
######################################################## 
###FREEMARKER (FreeMarkerAutoConfiguration) ######################################################## 
spring.freemarker.allow-request-override=false 
spring.freemarker.cache=true 
spring.freemarker.check-template-location=true 
spring.freemarker.charset=UTF-8 
spring.freemarker.content-type=text/html 
spring.freemarker.expose-request-attributes=false 
spring.freemarker.expose-session-attributes=false 
spring.freemarker.expose-spring-macro-helpers=false 
#spring.freemarker.prefix= 
#spring.freemarker.request-context-attribute= 
#spring.freemarker.settings.*= 
#spring.freemarker.suffix=.ftl 
#spring.freemarker.template-loader-path=classpath:/templates/ 
#comma-separated list #spring.freemarker.view-names= 
# whitelist of view names that can be resolved  

12.3编写ftl文件
<!DOCTYPE html> 
<head>        
 <title>Hello World!</title>     
</head>     
<body>        
 <h1>Hello.v.2</h1>         
<p>${hello}</p>     
</body>
 </html> 
 
14.spring boot添加JSP支持
<!-- 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支持: 1、web mvc; 2、restful; 3、jackjson支持; 4、aop ........ -->         
<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>

JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。
 <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>  

添加src/main/resources/application.properties: 
 # 页面默认前缀目录 
spring.mvc.view.prefix=/WEB-INF/jsp/ 
# 响应页面默认后缀 
spring.mvc.view.suffix=.jsp 
# 自定义属性,可以在Controller中读取 
application.hello=Hello Angel From application

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值