整合springboot(app后台框架搭建四)
springboot可以说是为了适用SOA服务出现,一方面,极大的简便了配置,加速了开发速度;第二方面,也是一个嵌入式的web服务,通过jar包运行就是一个web服务;
还有提供了很多metric,info等度量的初级接口,可以用于监控项目的情况。
以下,将会分三部分,总结springboot的整合:
1,springboot的搭建
2,springboot的默认配置原理
3,springmvc向springboot迁移,整合,基于(app后台框架搭建三)
==================================================================
1,springboot的搭建
我使用的idea是intellij,用intellij搭建springboot 很简单,如果使用eclipse也应该很简单,自己网上搜索教程就用了。但建议最好用intellij,确实功能强大很大。

创建第一个springboot项目:

选择spring initializr 然后选择下一步,spring cloudy项目是跟springboot紧密连在一起的,所以spring cloudy项目也可以这样搭建,只要引入相应的包就可以了。

设置包名,然后下一步:

选择依赖的包:
thymeleaf 模板引擎是springboot 推荐的,也是一个java视图模板,可是我个人不太喜欢,因为它是html严格模式的,例如input标签缺少一个 </input> 也会各种报错的。容错能力比较弱。
Lombok 是一个不错的组件,我们很多的bean类有大量的getting and setting 要我们去写,引入该包就可以不用写,在生成的类中,会自动为我们生成。
session 是spring组件,高度抽象的,可以跟redis整合,集中session管理,更加方便灵活。
还有一个spring组件 spring-reset-docs 是一个测试驱动的api文档生成组件,挺喜欢的一个组件,对我们测试成功的方法生成一个接口文档,当然出来的样式需要做一些微调。
这个spring-reset-docs网上没有什么资料,后面我整理一章。
其他的依赖就是mybatis,aop等就不讲,你们可以根据具体的需求整合进去。

点击“finish” 完成项目的创建。
----------------------------------------------------------------------------------------------------------------------------
2,spring 默认配置原理
spring的启动类,需要配注解@SpringBootApplication 该注解是一个组合注解,他的核心功能是@EnableAutoConfiguration类
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({ EnableAutoConfigurationImportSelector.class,
AutoConfigurationPackages.Registrar.class })
public @interface EnableAutoConfiguration { /**
* Exclude specific auto-configuration classes such that they will never be applied.
*/
Class<?>[] exclude() default {}; }
EnableAutoConfigurationImportSelector类使用了Spring Core包的SpringFactoriesLoader类的loadFactoryNamesof()方法。
SpringFactoriesLoader会查询META-INF/spring.factories文件中包含的JAR文件(spring-boot-autoconfigure-1.3.x.jar )。
当找到spring.factories文件后,SpringFactoriesLoader将查询配置文件命名的属性。在例子中,是org.springframework.boot.autoconfigure.EnableAutoConfiguration。
在spring-boot-autoconfigure-1.3.x jar文件里,有一个spring.factories文件,该文件声明有哪些自动配置,内容如下:
# Initializers
org.springframework.context.ApplicationContextInitializer=\
org.springframework.boot.autoconfigure.logging.AutoConfigurationReportLoggingInitializer # Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.data.JpaRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.MongoRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.redis.RedisAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,\
org.springframework.boot.autoconfigure.jms.JmsTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.jmx.JmxAutoConfiguration,\
org.springframework.boot.autoconfigure.mobile.DeviceResolverAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration,\
org.springframework.boot.autoconfigure.mongo.MongoTemplateAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,\
org.springframework.boot.autoconfigure.reactor.ReactorAutoConfiguration,\
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.security.FallbackWebSecurityAutoConfiguration,\
org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration,\
org.springframework.boot.autoconfigure.web.EmbeddedServletContainerAutoConfiguration,\
org.springframework.boot.autoconfigure.web.DispatcherServletAutoConfiguration,\
org.springframework.boot.autoconfigure.web.ServerPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration,\
org.springframework.boot.autoconfigure.web.HttpMessageConvertersAutoConfiguration,\
org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration
对于一些必须配置的项目,可以在appliaction.properties 或者application.yml 中配置,例如数据库连接的驱动,账户密码等
在Spring Boot的org.springframework.boot.autoconfigure.condition包中说明了使用@Conditional注释来加载配置,如果没有自定义配置就根据导入的jar包自动注入默认配置。
简单列举一些:
- @ConditionalOnBean
- @ConditionalOnClass
- @ConditionalOnExpression
- @ConditionalOnMissingBean
- @ConditionalOnMissingClass
- @ConditionalOnNotWebApplication
- @ConditionalOnResource
- @ConditionalOnWebApplication
以@ConditionalOnExpression注释为例,它允许在Spring的EL表达式中写一个条件。
@Conditional(OnExpressionCondition.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
public @interface ConditionalOnExpression { /**
* The SpEL expression to evaluate. Expression should return {@code true} if the
* condition passes or {@code false} if it fails.
*/
String value() default "true"; }
在这个类中,我们想利用@Conditional注释,条件在OnExpressionCondition类中定义:
public class OnExpressionCondition extends SpringBootCondition {
@Override
public ConditionOutcome getMatchOutcome(ConditionContext context, AnnotatedTypeMetadata metadata) {
// ...
// we first get a handle on the EL context via the ConditionContext
boolean result = (Boolean) resolver.evaluate(expression, expressionContext);
// ...
// here we create a message the user will see when debugging
return new ConditionOutcome(result, message.toString());
}
}
在最后,@Conditional通过简单的布尔表达式(即ConditionOutcome方法)来决定。
---------------------------------------------------------------------------------------------------------------------------------
3,整合springboot ------app后台开发框架
3.1 配置application.properties

3.2 把 app后台框架搭建三的代码直接 拷贝过来放到指定的包下

这里,我就不多说了
3.3 springMVC的配置类也可以直接拉过来,不过做一下修改
/**
* Created by ouyangming on 2017/7/4.
* spring mvc configure
*/
@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter { private final static Logger logger = LoggerFactory.getLogger(WebMvcConfig.class); @Bean
public JwtUtil getJwtUtil(){
return new JwtUtil();
} //静态文件
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
logger.info("addResourceHandlers");
registry.addResourceHandler("/static/**").addResourceLocations("/WEB-INF/static/");
} @Bean
public FormatJsonReturnValueHandler JsonReturnHandler(){
FormatJsonReturnValueHandler formatJsonReturnValueHandler=new FormatJsonReturnValueHandler();
return formatJsonReturnValueHandler;
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(getTokenHeader())
.addPathPatterns("/api/*")
.excludePathPatterns(
"/robots.txt");
} @Override
public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {
returnValueHandlers.add(JsonReturnHandler());
} //token 在header的拦截器
public HandlerInterceptor getTokenHeader(){
return new HeaderTokenInterceptor();
} }
-----------------------------------------------------------------------------------------------------------------------------------------------
4* 填坑说明
4.1 拦截器里无法直接注入类,必须要通过bean工厂进行注入
if(jwtUtil==null){
BeanFactory factory = WebApplicationContextUtils.getRequiredWebApplicationContext(httpServletRequest.getServletContext());
jwtUtil = (JwtUtil) factory.getBean("jwtUtil");
}
token=jwtUtil.updateToken(token);
if(token.equals("0")){
dealErrorReturn(httpServletRequest,httpServletResponse,str);
}
4.2 自定义json的统一格式,无法直接返回字符串,因为默认的thymeleaf 的默认配置,会直接识别成默认视图名字,然后就去src/main/resources/templates找模板文件,找不到就直接报错。
例如下面就会直接报错了:
@RequestMapping("/api/liu")
@AppResponsBody
public String loginSuccess(){
return "you are success login";
}
下一章,可能准备说一下springboot自动部署的jenkins的使用;
再后面会讲讲如何使用spring-reset-docs或者其他API的文档生成工具;
接下来就结合spring cloudy 或者dubbox 讲讲微服务的架构;
最后讲讲运维自动化集成, 高并发思路就差不多了。
源码下载链接:源码
QQ交流群:458419464
整合springboot(app后台框架搭建四)的更多相关文章
- springmvc跨域+token验证(app后台框架搭建二)
这是app后台框架搭建的第二课,主要针对app应用是跨域的运用,讲解怎么配置跨域服务:其次讲解怎么进行token验证,通过拦截器设置token验证和把token设置到http报文中.主要有如下: ...
- 自定义统一api返回json格式(app后台框架搭建三)
在统一json自定义格式的方式有多种:1,直接重写@reposeBody的实现,2,自定义一个注解,自己去解析对象成为json字符串进行返回 第一种方式,我就不推荐,想弄得的话,可以自己去研究一下源码 ...
- spring4+srpingmvc+mybatis基本框架(app后台框架搭建一)
前言: 随着spring 越来越强大,用spring4来搭建框架也是很快速,问题是你是对spring了解有多深入.如果你是新手,那么在搭建的过程中可以遇到各种各样奇葩的问题. SSM框架的搭建是作为我 ...
- spring4+springmvc+mybatis基本框架(app后台框架搭建一)
前言: 随着spring 越来越强大,用spring4来搭建框架也是很快速,问题是你是对spring了解有多深入.如果你是新手,那么在搭建的过程中可以遇到各种各样奇葩的问题. SSM框架的搭建是作为我 ...
- .Net Core3.0 WebApi 项目框架搭建 四:JWT权限验证
.Net Core3.0 WebApi 项目框架搭建:目录 什么是JWT 根据维基百科定义,JWT(读作 [/dʒɒt/]),即JSON Web Tokens,是一种基于JSON的.用于在网络上声明某 ...
- 从零开始--Spring项目整合(1)使用maven框架搭建项目
这些年一直在用spring的框架搭建项目,现在开始我们从零开始利用Spring框架来搭建项目,目前我能想到有Spring.SpringMVC.SpringJDBC.Mybatis.WebSockt.R ...
- Unity 游戏框架搭建 (四) 简易有限状态机
为什么用有限状态机? 之前做过一款跑酷游戏,跑酷角色有很多状态:跑.跳.二段跳.死亡等等.一开始是使用if/switch来切换状态,但是每次角色添加一个状态(提前没规划好),所有状态处理相关的代码 ...
- Windows下部署Appium教程(Android App自动化测试框架搭建)
摘要: 1,appium是开源的移动端自动化测试框架: 2,appium可以测试原生的.混合的.以及移动端的web项目: 3,appium可以测试ios.android.firefox os: 4,a ...
- easyui 后台框架搭建
近期公司要搭建一个后台管理项目.因为美工缺少 选择使用easyui jquery 框架 仅仅要懂点html js 这个用起来不是难事,看过API.在网上看了些 将它们组装起来 进行改动.因为本人也是第 ...
随机推荐
- 发布系统Git使用指南 - the Git Way to Use Git
发布系统Git使用指南 --the Git Way to Use Git 背景 有文章曾归纳,Git是一套内容寻址文件系统,意思是,Git的核心是存储键值对^[1]^.显然,这样的形式不利于普通人 ...
- cocos2dx - android环境配置及编译
接上一节内容:cocos2dx - 伤害实现 本节主要讲Android环境配置及编译 在第一节中setup.py的配置里,我们没有配置对应的ndk,sdk,ant的路径,在这里需要先配置好环境变量. ...
- JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 3
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7718741.html ------------------------------------ ...
- dubbo 笔记-XML配置文件简介
<dubbo:service/> 服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心. eg.<dubbo:service r ...
- UNIX发展史(BSD,GNU,linux)
先前的一個理想 UNIX 系统自 1969 年 Ken Thompson 与 Dennis Ritchie 在美国贝尔电话实验室(Bell Telephone Laboratories)发展出雏形至今 ...
- Mysql Show ProcessList命令
每个MySql连接,或者叫线程,在任意一个给定的时间都有一个状态来标识正在进行的事情.可以使用 SHOW [FULL] PROCESSLIST 命令来查看哪些线程正在运行,及其查询状态,Command ...
- C#匹配标签正则,获取标签的值
比如要获取: <color=#50cccc>头盔坐标:(-0.6, 1.0, 1.2)</color><color=#3d85c6>头盔方向(-0.2, 0.1, ...
- 数据库.MongoDB.安装MongoDB数据库
树莓派安装方法 版本: mongodb 2.4.10 sudo apt-get install mongodb -y 安装完成后,检查命令 mongo 看到下图的内容,表示已安装并启动成功 ===== ...
- java实现在线文档浏览
目前发现两种方法: 1.http://dxx23.iteye.com/blog/1947083 FlexPaper+SWFTools ,java实现在线文档浏览 2.webOffice
- LeetCode 81. Search in Rotated Sorted Array II(在旋转有序序列中搜索之二)
Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...