一、Spring Boot
1. Spring Boot简介
Spring boot特点:只使用一个核心配置文件,取消了一系列xml配置,甚至连web.xml都没有, 全部使用注解的方式完成WEB层的功能。框架内置Tomcat服务器,运行启动类中的Main函数即可启动。
它最重要的是以下四个核心:
- 自动配置:针对很多Spring应用程序常见的应用功能, Spring Boot能自动提供相关配置。
- 起步依赖:告诉Spring Boot需要什么功能,它就能引入需要的库。
- 命令行界面:这是Spring Boot的可选特性,借此你只需写代码就能完成完整的应用程序,
无需传统项目构建。 - Actuator:让你能够深入运行中的Spring Boot应用程序,一探究竟。主要是提供在运行时检视应用程序内部情况的能力。
Spring Boot 具有如下特性:
- 创建独立的 Spring 应用程序,为开发者提供更快的入门体验 。
- 尽可能地 自动配置,开箱 即用 。
- 没有代码生成, 也无须 XML 配置,同时也可以修改默认值来满足特定的需求。
- 提供了一些大型项目中常见的非功能性特性,如嵌入式服务器、安全、指标、健康检测、外部配置等 。
- 并不是对 Spring 功能上的增强,而是提供了 一种快速使用 Spring 的方式。
2. 工程搭建
具体可参考这篇博文:Intellij IDEA 搭建Spring Boot项目
生成的项目中,resources文件夹下,static文件夹下存放静态文件,比如css、js、html和图片等 ;templates下存放html文件,controller默认访问该文件夹下的html文件;这个在application.properties配置文件中是可以修改的。
3. @SpringBootApplication开启了Spring的组件扫描和Spring Boot的自动配置功能。实际上, @SpringBootApplication将三个有用的注解组合在了一起:
- Spring的@Configuration:标明该类使用Spring基于Java的配置。
- Spring的@ComponentScan:启用组件扫描,这样你写的Web控制器类和其他组件才能被自动发现并注册为Spring应用程序上下文里的Bean。
- Spring Boot 的 @EnableAutoConfiguration :这个不起眼的小注解也可以称为@Abracadabra①,就是这一行配置开启了Spring Boot自动配置的魔力,让你不用再写成篇的配置了。
4. 使用spring boot+mybatis,使用IntelliJ IDEA开发,记录一些问题的解决方法:
1)在使用@Mapper注解方式代替XXmapper.xml配置文件,使用@Select等注解配置sql语句的情况下,如何配置数据库字段名到JavaBean实体类属性命的自动驼峰命名转换?
使用spring boot后,越来越喜欢用注解方式进行配置,代替xml配置文件方式。mybatis中也可以完全使用注解,避免使用xml方式配置mapper。
![](/qrcode.jpg)
设置自动驼峰命名转换,在xml中可以直接配置mapUnderscoreToCamelCase属性。但是使用注解方式时,经过一番查找资料才找到比较好的设置方法。如下:
在spring boot的配置文件application.properties中,加入配置项:
mybatis.configuration.mapUnderscoreToCamelCase=true
或
mybatis.configuration.map-underscore-to-camel-case=true
设为true表示开启驼峰转换。经过试验,两种配置方法都可以。但如果同时配置,前者mybatis.configuration.mapUnderscoreToCamelCase的优先级更高。
参考:
SpringBoot之Mybatis - 王念博客 https://my.oschina.net/wangnian/blog/667764
另外查到有通过javaConfig方式,配置org.apache.ibatis.session.SqlSessionFactory的Bean,放入spring的对象池。mapUnderscoreToCamelCase是org.apache.ibatis.session.Configuration的一个属性,实例化Configuration对象并将其mapUnderscoreToCamelCase属性设为true,再使用这个Configuration对象作为SqlSessionFactory的配置即可使mapUnderscoreToCamelCase=true生效。
但是仅仅为了改变一个属性的值,就自己编码生成一个SqlSessionFactory未免太繁琐了些。使用在application.properties中配置的方法更方便。
2)mybatis管理的@Mapper的Dao,在使用@Autowire自动注入时,IDEA有红色报错“could not autowire”,但实际运行时正常,如何去除报错?
按照本人的理解,这个报错是由于Dao接口只添加了mybatis自定义的@Mapper注解,没有添加spring定义的@Component、@Repository等,所以IDEA不认为这是纳入Spring管理的Bean,导致在IDEA找不到autowire的Dao的来源。
查找解决方法,找到了这里的问答:
里面提到安装【MyBatis plugin】插件可以解决,但是我尝试安装这个插件并启用后,仍然有红色报错(插件已经激活,不是license导致的问题),所以猜测这个插件可能是只针对XXmapper.xml配置的方式有效,而对@Mapper注解Dao interface的方式无效(针对后一种情况是否有效,大家尝试了可以反馈下结果)。
所以只好采用一种折中的不算完美的办法,在Dao interface中添加@Mapper的同时,再添加@Repository(或者@Component也可以),如下方代码的第1行:
@Repository
@Mapper
public interface UserDao {
@Select("SELECT phone FROM user WHERE name = #{name}") //动态传入表名,可以使用 ...FROM ${tableName}... ,但需要解决sql注入风险
String getPhoneByUserName(@Param("name") String name);
}
二、Spring Cloud
1. Spring提供了一系列工具,可以帮助开发人员迅速搭建分布式系统中的公共组件(比如:配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁,主节点选举, 分布式session, 集群状态)。协调分布式环境中各个系统,为各类服务提供模板性配置。使用Spring Cloud, 开发人员可以搭建实现了这些样板的应用,并且在任何分布式环境下都能工作得非常好,小到笔记本电脑, 大到数据中心和云平台。
具体部署实践可看考这篇博文:随笔分类 - Spring Cloud