Spring Boot开发之流水无情(二)

上篇散仙写了一个很简单的入门级的Spring Boot的例子,没啥技术含量,不过,其实学任何东西只要找到第一个突破口,接下来的事情就好办了,人最怕什么? 我想莫过于干一件事情,没有下手的地方了,而当你一旦找到了这感觉,就可以很喜悦的顺藤摸瓜般的探索你强烈想探索求知的某种事物了,这种冥冥之中玄而又玄的感觉是什么?回想一下: (1) 当你把第一个某种编程语言的Hello World的例子,成功的运行在一个IDE中 (2) 当你第一次从老家出发到达了某个你从未涉足过的地方 (3) 当你成功的完成了第一次网购 一切的不相关的事物之间的,其实都有类似的学习历程,正是所谓的触类旁通,万法归宗! 关于Spring Boot这块,其实里面涉及的内容非常多也非常灵活,散仙的项目中用到的模块也只是冰山一角,不可能完全覆盖所有有关的模块,完全是为了项目而用技术,不是为了技术而诞生了这个项目,所以这次记录的心得,完全是项目有关的,而不是Spring Boot一个学习教程,这一点,希望各位看官明白,如果想专攻学习Spring Boot,推荐点击官网更详细的教程 一个项目是由多种不同层面的技术组成的,所以散仙不会只写有关Spring Boot方面的,虽然Spring Boot是主线。大多数情况下,都会集成多种不同的技术,只有各自发挥自己擅长的优势,才能组合出最优的架构。 好了,多说了点废话,下面看下本篇记录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官方不推荐) 我们可以根据熟悉程度来选择自己喜欢的引擎。

原文发布于微信公众号 - 我是攻城师(woshigcs)

原文发表时间:2015-04-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏清晨我上码

第四节 微服务OTRS SpringCould使用

1.1. 启动一个服务注册中心,只需要一个注解@EnableEurekaServer,这个注解需要在springboot工程的启动application类上...

1033
来自专栏LanceToBigData

Flume(一)Flume原理解析

前言   最近有一点浮躁,遇到了很多不该发生在我身上的事情。没有,忘掉这些。好好的学习,才是正道! 一、Flume简介   flume 作为 cloudera ...

9195
来自专栏王磊的博客

Spring Boot (七)MyBatis代码自动生成和辅助插件

MyBatis Generator 是MyBatis 官方出品的一款,用来自动生成MyBatis的 mapper、dao、entity 的框架,让我们省去规律性...

2681
来自专栏用户2442861的专栏

通过Spring Boot三分钟创建Spring Web项目

作者:David 链接:https://zhuanlan.zhihu.com/p/20637937 来源:知乎 著作权归作者所有。商业转载请联系作者获得授...

782
来自专栏java学习

Spring学习笔记1_Spring的概述

本章目录 Spring学习笔记1_Spring的概述 1.Spring介绍 2.Spring作用 3.Spring起源 4.Spring体系结构 5.Spri...

3086
来自专栏ImportSource

Spring Boot 2.0 新特性和发展方向

以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持。 内嵌容器包结构调整 为了支持react...

4429
来自专栏开发与安全

linux网络编程之进程间通信基础(一):进程间通信概述

一、顺序程序与并发程序特征 顺序程序特征 顺序性 封闭性:(运行环境的封闭性) 确定性 可再现性 并发程序特征 共享性 并发性 随机性 二、进程互斥 ...

1800
来自专栏玩转JavaEE

使用Spring Cloud搭建服务注册中心

我们在之前的博客中已经介绍过阿里的分布式服务框架dubbo【Linux上安装Zookeeper以及一些注意事项】【一个简单的案例带你入门Dubbo分布式框架】,...

2.1K4
来自专栏向治洪

Spring Boot入门

Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用...

3479
来自专栏Java职业技术分享

Spring Boot 面试题精华

Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家.

1.6K4

扫码关注云+社区

领取腾讯云代金券