Spring Boot(1)--初识篇

主要内容

  • springBoot是什么?
  • 为什么要使用它?
  • 开始自己的编码
  • 测试用例
  • 配置文件说明
  • 自定义过虑器

一、Spring Boot是何物?

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

         Spring Boot是Spring的约定优于配置的解决方案,用于创建可“直接运行”的独立的、生产级的基于Spring的应用程序。它预先配置了Spring的“固执己见的观点”,即最佳配置和Spring平台及第三方库的使用,因此您可以从最小的麻烦开始。大多数Spring引导应用程序只需要很少的Spring配置-----来自wikipedia的翻译

二、为什么要使用它?

        由于SpringBoot使用约定大于配置的思路,使得项目开发中只要约定一套规则,整个项目组就可以简单、方便、快速的完成开发任务。相比于平常的项目搭建简单高效,再一个现在微服务相当流行。仅需要非常少的几个配置就可以迅速方便的搭建起来一套web项目或者是构建一个微服务。用上一次你就会爱上它无法自拔,哈哈。

          吧啦,吧啦,吧啦......................

好吧,多了不说~!自己体会,那种酸爽的感觉。

三、编码实践

让我们开始这趟旅行吧~~~~

        首先,我们使用maven来构建项目,现在还有一个比较流行的构建项目的方式是Gradle,具说是结合了maven和ant的优点。由于本人目前为止也没有使用过所以 还是不用它了。之后再学习。

步骤:

  1. 可以直接访问:https://start.spring.io/填写你的项目名字和group,就可以生成一个StringBoot的项目了,下载下来后放到自己的工作目录中解压即可。
  2. 使用eclipse或idea,导入这个项目。-----OK 了 ,大功告成。

其目录结构大致如下:

生成的包,如上图所示:

  • com.xps.sc.springbootdemo这个是自动生成的包名称,boot建议使用com.example.projectname作为包名
  • SpringBootDemoApplication框架的启动入口,主要做一些工程级的配置
  • service业务服务包(可以根据实际业务自己建立)
  • controller面向请求的服务控制
  • domain使用的实体类,也可以是entity或bean之类的名称。
  • test测试用例包

最后一步,引入web模块,在pom.xml中加入

<!--添加web支持模块begin-->
<dependency>
     <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--添加web支持模块end-->

现在整个框架按默认的方式已经完成了,接下来我们来创建一个服务测试一下

//@RestController的意思就是controller
// 里面的方法都以json格式输出,不用再写什么jackjson配置的了
@RestController
public class HelloBootController {

    private Logger logger = LoggerFactory.getLogger(HelloBootController.class);

    @Autowired
    private ApplicationProperties properties;

    @RequestMapping(value = "/hello/{name}")
    public String hello(@PathVariable String name){
        return "hello,"+name+" this is a hello service!!!";
    }

    /**
     * 自动组装成json
     * {"customerId":1,"customerName":"张三"}
     * @param id
     * @return Customer
     */
    @RequestMapping(value = "/getCustomer/{id}")
    public Customer getCustomer(@PathVariable Long id){
        Customer customer = new Customer();
        customer.setCustomerId(id);
        customer.setCustomerName(properties.getName());
        customer.setDesc(properties.getDescription());
        logger.debug(properties.getDescription());
        return customer;
    }
}

现在,启动工程,如果没有配置则默认8080端口。可以看到它就是一个main方法,所以我们也可以使用传统的java -jar来启动它。

访问:http://localhost:8000/hello/张三

可以看到服务的效果了,是不是很简单(只处有笑脸)~!

四、测试

        一般我们喜欢自己写一个测试用例来测试,而不是每次都启动服务器。我们可以在test目录下编写测试类(默认会生成一个测试类,只要copy它即可),这里我们使用MockMvc:

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloBootControllerTests {

    private MockMvc mvc;
    @Before
    public void setUp() throws Exception {
        mvc = MockMvcBuilders.standaloneSetup(new HelloBootController()).build();
    }


    @Test
    public void hello() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/hello/CelineDion")
                .characterEncoding("UTF-8").contentType(MediaType.APPLICATION_JSON_UTF8))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn();
    }

}

五、application.properties配置文件

        项目默认会在src/resources根目录下生成一个application.properties文件,这个是SpringBoot默认加载的配置文件,我们可以在此文件中配置一些内容,比如:日志级别,数据库连接参数或者自己项目中使用的常量。

#设置spring-boot编码格式,防止乱码,如果加上这些还是乱码,可以查看
#自己的工程和工程中的文件是否都是UTF-8编码的,idea的设置位置在
#File---settings---Editor----File Encodings 在最下面有个default encoding for properties 选择utf-8且后面的复选框勾选即可 
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
#---------------------

#myself params
com.xps.user.name=王老五-dev
com.xps.user.age=30
com.xps.user.description=${com.xps.user.name} now is ${com.xps.user.age} years old and 他非常有钱!

logging.path=E:\\workplace\\springCloud\\log
logging.level.com.xps=DEBUG
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=ERROR

这样定义完成后,我们可以使用一个类来保存这些定义,新建立一个类(包自己定义):

@Component//加上此标签让spring能够识别它是一个组件
//@ConfigurationProperties(prefix = "com.xps.p")
public class ApplicationProperties {
//使用spring的@Value即可
    @Value("${com.xps.user.name}")
    private String name;
    @Value("${com.xps.user.age}")
    private int age;
    @Value("${com.xps.user.description}")
    private String description;

   //getter and setter方法

}

这个我们就可以在需要使用的地方,按如下方式引入即可取到配置的参数

@Autowired
private ApplicationProperties properties;

虽说这样使用也没有问题,但一般我们都有开发环境、测试和生产环境,配置参数可能会有区别,那怎么办呢?springBoot也早就想到了这个问题。我们可以在appication.properties同级下新创建三个文件,名称为application-{profile}.properties,其中profile可以为dev\test\prod或其它自己认识的值。然后再application.properties文件中添加

spring.profiles.active=dev

也可以在启动时指定参数。这样我们访问上面的第二个服务时就是:

值得一说的是,springboot也同时支持yml文件配置,可以把上面的application.properties换成application.yml,如果两个同时存在的话,则使用yml文件。

#设置服务端口
server:
  port: 8000
  tomcat:
    uri-encoding: UTF-8
#设置spring-boot编码格式
spring:
    http:
      encoding:
        charset: UTF-8
        enabled: true
        force: true
    messages:
       encoding: UTF-8
    #环境变量
    profiles:
      active: dev

六、添加自己的Filter

       在之前开发的一般项目中,一般要先定义自己的过虑器类实现Filter,然后再到web.xml中配置这个过虑器并指定过虑路径。在springboot中直接使用标签即可,不需要再配置其它。

@Configuration//标签标记是一个配置
public class WebChartConfigration {

    private Logger logger = LoggerFactory.getLogger(WebChartConfigration.class);

    @Bean
    public RemoteIpFilter getRemoteIpFilter(){
        return new RemoteIpFilter();
    }

    //注册自己的过虑器到过虑器链
    @Bean
    public FilterRegistrationBean myFilterRegistration(){
        FilterRegistrationBean registration  = new FilterRegistrationBean();
        registration.setFilter(new ChartFilter());
        registration.setName("ChartFilter");
        registration.setOrder(1);
        registration.addUrlPatterns("/*");//指定过虑路径
        registration.addInitParameter("a","a");
        return registration;
    }

    //实现javax.servlet.Filter即可
    public class ChartFilter implements Filter {
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
                             FilterChain filterChain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            logger.debug("请求的URL:"+request.getRequestURL().toString());
            filterChain.doFilter(servletRequest,servletResponse);
        }

        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            logger.debug("ChartFilter init");
        }

        @Override
        public void destroy() {
            logger.debug("ChartFilter destroy");
        }
    }
}

总结

       可见使用SpringBoot可以很方便的搭建项目工程,可以把主要的精力用在业务处理逻辑上。这些仅仅是一个开始,我们同样也可以像其它工程一样为它加入数据库、缓存处理、消息中间件等等。加油学习吧,路漫漫,任重道远呀。

非常感谢,https://www.cnblogs.com/ityouknow/p/5662753.html这位博主的分享~!

猜你喜欢

转载自blog.csdn.net/xpsallwell/article/details/85006561