一键式Spring集成工具 Spring Boot

最近公司使用Spring boot进行开发,稍微了解一下,不过自我感觉把集中式配置applicate.properties搞明白,注解用过Spring MVC的boot绝对没问题的

比如拦截器:@Aspect

public class ControllerAspect {

//对 com.store59.creditmall.controller包下面的所有类的所有带request对象的方法 进行拦截

@Before("execution(* com.store59.creditmall.controller.*.*(javax.servlet.http.HttpServletRequest, ..))")
public void proController(JoinPoint point) {

  Object[] args = point.getArgs();

  if (args.length > 0 && args[0] instanceof HttpServletRequest) {
  HttpServletRequest request = (HttpServletRequest) args[0];//获取request对象

  ...

  }

}

再比如@Controller,方法前加 @RequestMapping注释,可以设置web页面访问该方法的路径...

下面这篇文章写的不错,转载过来

转自http://my.oschina.net/u/1027043/blog/406558

Spring Boot提供了一个强大的一键式Spring的集成开发环境,能够单独进行一个Spring应用的开发,其中:

(1)集中式配置(application.properties)+注解,大大简化了开发流程 
(2)内嵌的Tomcat和Jetty容器,可直接打成jar包启动,无需提供Java war包以及繁琐的Web配置 
(3)提供了Spring各个插件的基于Maven的pom模板配置,开箱即用,便利无比。
(4)可以在任何你想自动化配置的地方,实现可能 
(5)提供更多的企业级开发特性,如何系统监控,健康诊断,权限控制 
(6) 无冗余代码生成和XML强制配置 
(7)提供支持强大的Restfult风格的编码,非常简洁

当然Spring Boot提供的功能,远远比上面的强大,散仙会在后续文章中,逐渐以实际工作中的项目为背景,穿插记录使用Spring Boot的心得体会。

下面看一个入门级的例子:

pom依赖: 

Java代码  

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.spring.boot</groupId>
  7. <artifactId>springboot</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <parent>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-parent</artifactId>
  12. <version>1.2.3.RELEASE</version>
  13. </parent>
  14. <dependencies>
  15. <dependency>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-web</artifactId>
  18. </dependency>
  19. </dependencies>
  20. </project>

核心代码:

Java代码  

    1. package controller;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
    4. import org.springframework.stereotype.Controller;
    5. import org.springframework.web.bind.annotation.RequestBody;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. import org.springframework.web.bind.annotation.ResponseBody;
    8. /**
    9. * Created by 三劫散仙 on 2015/4/24.
    10. */
    11. @Controller
    12. @EnableAutoConfiguration
    13. public class HellowController {
    14. @RequestMapping("/hellow")
    15. @ResponseBody
    16. public String hellow(){
    17. return "哈喽,Spring Boot !";
    18. }
    19. public static void main(String[] args) {
    20. //第一个简单的应用,
    21. SpringApplication.run(HellowController.class,args);
    22. }
    23. }

好了,多说了点废话,下面看下本篇记录Spring Boot的几个知识点:

(一)一个Maven+Spring Boot项目基本的包结构形式 
(二)一个简单的在Spring Boot项目集成安全控制 
(二)如何在Spring Boot中记录log日志 
(四)Spring Boot中几个常用注解介绍

ok下面开始正题:

(一)先看下,官网给出的一个简单的包结构组成:

Java代码   

  1. com
  2. +- example
  3. +- myproject
  4. +- Application.java
  5. |
  6. +- domain
  7. |   +- Customer.java
  8. |   +- CustomerRepository.java
  9. |
  10. +- service
  11. |   +- CustomerService.java
  12. |
  13. +- web
  14. +- CustomerController.java

然后,看下散仙实际工作中的项目结构:

需要注意的地方如下: 
1,在src/main/java包下的第一层结构中,是必须放一个含有main方法的主启动的类,而且只能有一个main方法,如果再出现其他的main方法,在使用maven编译打包时,会报编译错误,当然在src/test/java包下,可以出现多个,但建议最好使用Junit进行单元测试.

这个main方法启动,就会启动内嵌的tomcat或jetty容器,然后加载所有需要加载的或扫描的类或资源文件。上篇博客中,散仙为了测试方便,是直接在当前的Conroller中,启动了一个测试服务,这样做适合单独调试,如果是生产环境下的启动方法,则是散仙前面所讲的,在java包的根目录下建立一个main方法类,负责启动所有的资源。

在本例中,散仙的main代码如下:

Java代码   

  1. package com.dhgate.rate;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  4. import org.springframework.context.annotation.ComponentScan;
  5. import org.springframework.context.annotation.Configuration;
  6. @Configuration//配置控制
  7. @EnableAutoConfiguration//启用自动配置
  8. @ComponentScan//组件扫描
  9. public class ApplicationMain {
  10. public static void main(String[] args) throws Exception {
  11. //启动Spring Boot项目的唯一入口
  12. SpringApplication.run(ApplicationMain.class, args);
  13. }
  14. }

2,在src/main/resource目录下面,是放置一些配置文件,或模板支持的文件,如JSP,Velocity,Freemaker等,这里面比较常用或重要的一个文件,就是Spring Boot的集中式配置文件application.properties这个文件了,这里面给其他大部分的组件,提供了一个可集中管理和配置的中心,包括安全控制,redis,solr,mangodb的连接信息,以及数据库连接池,容器端口号,jmx,java mail,动态模板等。此外这个目录下默认是可以访问静态资源的,比如我们的css,js,或者第三方的一些引用文件等。

(二)关于在Spring Boot的配置简单的安全访问控制,这一点非常容器,我们只需要做如下二步,即可。 
1,在pom文件中,引入spring-boot-starter-security的maven依赖。

Xml代码   

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-security</artifactId>
  4. </dependency>

2,在application.properties中,配置访问的用户名和密码

Java代码   

  1. #用户名 密码配置
  2. security.user.name=admin
  3. security.user.password=test

再次,访问链接时,会出现以下,拦截页面,就代表配置成功:

当然这只是,一个初级的配置,更复杂的配置,可以分不用角色,在控制范围上,能够拦截到方法级别的权限控制。

(三)日志的重要性,不言而喻,Spring Boot支持大部分的log配置,其中包括: 
(1)java util logging 
(2)log4j 
(3)log4j2 
(4)logbak 
默认的情况下spring boot会选择logback作为日志记录的载体,当然要想它正常的工作,需要依赖 Commons Logging, Java Util Logging, Log4J 或 SLF4J,相信大部分同学都是选择使用log4j.properties作为我们的日志配置和管理,但是散仙在Spring Boot中一直没有测试集成成功,所以就放弃使用log4j.properties作为日志载体,而是选择了Spring Boot推荐的logbak作为日志的配置文件,用过之后感觉也不错。

使用步骤:

1,将logbak.xml拷贝至resource目录下的根目录,然后在logbak.xml中,配置相关的log生成规则,log级别,以及日志路径,log的字符编码集,这个非常重要,因为刚开始用这个log记录程序运行的信息时,发现它不支持中文log,后来经查名,需要配置相关的log编码才可以正确记录对应的信息。一个通用的配置如下:

Xml代码   

  1. <!-- Logback configuration. See http://logback.qos.ch/manual/index.html -->
  2. <configuration scan="true" scanPeriod="10 seconds">
  3. <!-- Simple file output -->
  4. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  5. <!-- encoder defaults to ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
  6. <encoder>
  7. <pattern>
  8. [ %-5level] [%date{yyyy-MM-dd HH:mm:ss}] %logger{96} [%line] - %msg%n
  9. </pattern>
  10. <charset>UTF-8</charset> <!-- 此处设置字符集 -->
  11. </encoder>
  12. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  13. <!-- rollover daily 配置日志所生成的目录以及生成文件名的规则 -->
  14. <fileNamePattern>logs/mylog-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
  15. <timeBasedFileNamingAndTriggeringPolicy
  16. class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
  17. <!-- or whenever the file size reaches 64 MB -->
  18. <maxFileSize>64 MB</maxFileSize>
  19. </timeBasedFileNamingAndTriggeringPolicy>
  20. </rollingPolicy>
  21. <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  22. <level>DEBUG</level>
  23. </filter>
  24. <!-- Safely log to the same file from multiple JVMs. Degrades performance! -->
  25. <prudent>true</prudent>
  26. </appender>
  27. <!-- Console output -->
  28. <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
  29. <!-- encoder defaults to ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
  30. <encoder>
  31. <pattern>
  32. [ %-5level] [%date{yyyy-MM-dd HH:mm:ss}] %logger{96} [%line] - %msg%n
  33. </pattern>
  34. <charset>GBK</charset> <!-- 此处设置字符集 -->
  35. </encoder>
  36. <!-- Only log level WARN and above -->
  37. <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  38. <level>WARN</level>
  39. </filter>
  40. </appender>
  41. <!-- Enable FILE and STDOUT appenders for all log messages.
  42. By default, only log at level INFO and above. -->
  43. <root level="INFO">
  44. <appender-ref ref="FILE" />
  45. <appender-ref ref="STDOUT" />
  46. </root>
  47. <!-- For loggers in the these namespaces, log at all levels. -->
  48. <logger name="pedestal" level="ALL" />
  49. <logger name="hammock-cafe" level="ALL" />
  50. <logger name="user" level="ALL" />
  51. </configuration>

2,在application.properties中,指定log文件的加载路径,已经配置通用的log日志级别:

Java代码   

  1. #指定log的配置文件,以及记录Spring Boot的log级别
  2. logging.config=logback.xml
  3. logging.level.org.springframework.web: INFO

(四)介绍下Spring Boot中几个常用的注解,其中大部分都是来自Spring MVC的注解,这些注解使用的频率一般都在90%之上。

(1)@RestController和@Controller指定一个类,作为控制器的注解 
(2)@RequestMapping方法级别的映射注解,这一个用过Spring MVC的小伙伴相信都很熟悉 
(3)@EnableAutoConfiguration和@SpringBootApplication是类级别的注解,根据maven依赖的jar来自动猜测完成正确的spring的对应配置,只要引入了spring-boot-starter-web的依赖,默认会自动配置Spring MVC和tomcat容器 
(4)@Configuration类级别的注解,一般这个注解,我们用来标识main方法所在的类 
(5)@ComponentScan类级别的注解,自动扫描加载所有的Spring组件包括Bean注入,一般用在main方法所在的类上 
(6)@ImportResource类级别注解,当我们必须使用一个xml的配置时,使用@ImportResource和@Configuration来标识这个文件资源的类。 
(7)@Autowired注解,一般结合@ComponentScan注解,来自动注入一个Service或Dao级别的Bean 
(8)@Component类级别注解,用来标识一个组件,比如我自定了一个filter,则需要此注解标识之后,Spring Boot才会正确识别。

ok,本篇的讲解,就到此结束,这些都是项目工程的基础知识,了解这些,有助于我们快速的上手一个Spring Boot应用。

下篇博客的内容会写: 
(1)如何在Spring Boot项目中集成Spring Loaded框架,来完成模块热加载和代码动态编译,有了这个东西,我们开发的效率会更加高效,大部分情况下我们改了一个类或方法的代码之后,都不需要重启应用,因为Spring Loaded会定时重新编译并加载代码。

(2)如何在Spring Boot项目中集成Velocity,Spring Boot支持多种模板引擎,包括 
1,FreeMarker 
2,Groovy 
3,Thymeleaf 
4,Velocity 
5,JSP (Spring Boot官方不推荐) 
我们可以根据熟悉程度来选择自己喜欢的引擎。

时间: 2024-10-17 17:18:30

一键式Spring集成工具 Spring Boot的相关文章

Spring Cloud和Spring Boot的区别

Spring MVC: Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts 2(一般老项目使用)等. Lifecycle for overriding bindi

Spring MVC 以及 Spring Boot

Spring 框架就像一个家族,有众多衍生产品例如 boot.security.jpa等等.但他们的基础都是Spring 的 ioc和 aop ioc 提供了依赖注入的容器 aop ,解决了面向横切面的编程,然后在此两者的基础上实现了其他延伸产品的高级功能.Spring MVC是基于 Servlet 的一个 MVC 框架 主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种XML. JavaConfig.hin处理起来比较繁琐.于是为了简化开发者的使用,从而创造性地推出了Spr

spring、spring MVC、spring Boot

Spring 是一个"引擎" Spring MVC 是基于 Spring 的一个 MVC 框架 Spring Boot 是基于 Spring4 的条件注册的一套快速开发整合包 Spring 最初利用"工厂模式"( DI )和"代理模式"( AOP )解耦应用组件 Spring 框架是一个分层架构,由 7 个定义良好的模块组成. Spring 模块构建在核心容器之上,核心容器定义了创建.配置和管理 bean 的方式:组成 Spring 框架的每个模

Spring、Spring Boot、Spring Frame、Spring MVC的区别

Spring框架就像一个厂商,其下有很多产品,如Spring Boot.Spring Frame.Spring Cloud等等. Spring Boot用于快速.方便.简单的搭建一个Spring项目.之所以说它快速.方便.简单,是因为Spring Boot融合看来很多第三方库,提供了配置这些库及本身的一些简单的方式,从而进行了简化,避免了我们自己对包的导入和繁琐的XML文件配置.我们来看下官方文档. 我们可以看到Spring内嵌了一些serverse等容器,通过Spring Boot的配置,可以

浅析Spring MVC和Spring BOOT之间的简化小秘密

从Servlet技术到Spring和Spring MVC,开发Web应用变得越来越简捷.但是Spring和Spring MVC的众多配置有时却让人望而却步,相信有过Spring MVC开发经验的朋友能深刻体会到这一痛苦.因为即使是开发一个Hello-World的Web应用,都需要我们在pom文件中导入各种依赖,编写web.xml.spring.xml.springmvc.xml配置文件等.特别是需要导入大量的jar包依赖时,我们需要在网上查找各种jar包资源,各个jar间可能存在着各种依赖关系,

从Spring MVC 到 Spring BOOT的简化道路

背景 从Servlet技术到Spring和Spring MVC,开发Web应用变得越来越简捷.但是Spring和Spring MVC的众多配置有时却让人望而却步,相信有过Spring MVC开发经验的朋友能深刻体会到这一痛苦.因为即使是开发一个Hello-World的Web应用,都需要我们在pom文件中导入各种依赖,编写web.xml.spring.xml.springmvc.xml配置文件等. 特别是需要导入大量的jar包依赖时,我们需要在网上查找各种jar包资源,各个jar间可能存在着各种依

【转】Spring,Spring MVC及Spring Boot区别

对于一个Java开发者来说,Spring可谓如雷贯耳,无论是Spring框架,还是Spring引领的IOC,AOP风格,都对后续Java开发产生的深远的影响,同时,Spring社区总能及时响应开发者的需求,推出适应潮流发展的新功能特定:而对于大部分开发者而言,平时接触最多的应该就是Spring MVC以及Spring Boot了,本文将分别对Spring,Spring MVC以及Spring Boot做总体概述,并分析阐述它们各自想要解决的问题,以便初学者能更好的了解Spring及相关概念 本篇

Spring,Spring MVC及Spring Boot区别

对于一个Java开发者来说,Spring可谓如雷贯耳,无论是Spring框架,还是Spring引领的IOC,AOP风格,都对后续Java开发产生的深远的影响,同时,Spring社区总能及时响应开发者的需求,推出适应潮流发展的新功能特定:而对于大部分开发者而言,平时接触最多的应该就是Spring MVC以及Spring Boot了,本文将分别对Spring,Spring MVC以及Spring Boot做总体概述,并分析阐述它们各自想要解决的问题,以便初学者能更好的了解Spring及相关概念 本篇

RabbitMQ安装和使用(和Spring集成)

一.安装Rabbit MQ Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang.通过下面两个连接下载安装3.2.3 版本: 下载并安装 Eralng OTP For Windows (vR16B03) 运行安装 Rabbit MQ Server Windows Installer (v3.2.3) 具体操作步骤参考:在 Windows 上安装Rabbit MQ 指南 本人遇到的问题 当安装RabbitMQ后,使用rabbitmqctl