spring boot2.0 hello world
环境、文档
mvn3.3.9 eclipse4.5 spring boot2.0.3 RELEASE
官方文档首页
第一个spring boot应用 我们主要参考这一章节完成第一个应用。
hello world->step by step
- POM文件参见 第一个spring boot应用 Creating the POM,Adding Classpath Dependencies,Creating an Executable Jar 几个章节中涉及到pom的都加进去。
4.5的eclipse自带的m2e的maven插件,可能会报错。需要更新一下m2e。用传统的eclipse的在线安装插件的办法即可,更新地址是http://repo1.maven.org/maven2/.m2e/connectors/m2eclipse-mavenarchiver/0.17.2/N/LATEST/ - 创建Example类,源码参见文档Writing the Code章节。
- 在你工程目录下执行 mvn spring-boot:run命令。
注意,mvn需要设置JAVA_HOME环境变量,另spring boot2.0需要JDK1.8以上。 所以系统要设置指向JDK1.8
的JAVA_HOME
执行完成后在浏览器中访问http://localhost:8080 就可以看到页面显示Hello World! - 执行
mvn package
打包。
注意两个问题:
一是Example类是否加了注解 @SpringBootApplication,否则会出现 Unable to find main class的错。
二是注意POM文件中packaging标签是否声明成了war,如果这样只会打出war包,不会打出jar包。
java -jar spring_boot_2.0_demo-0.0.1-SNAPSHOT.jar 就可以启动刚才的应用了。
spring boot2.0 从配置tomcat学习spring boot的配置
场景:假设要改变tomcat的http的端口号,日志级别,数据源等
几个特性:
- 支持引用maven/gradle构建工具的属性变量,这和我们用ant打包时为每个环境准备一套配置文件有点相似。
74.1.1 Automatic Property Expansion Using Maven,支持这个特性的前置条件,文档中也有响应说明。 - 支持在src/main/resources/路径下的application.properties文件中覆盖默认配置, 比如:
server.port=9080
表示定义服务的端口监听在9080,如果用的嵌入的tomcat,那么这是tomcat的服务端口就监听在9080。
3.除properties的方式改变配置外,还支持YML、JAVA API的方式。
4.支持spring.config.location配置项、@PropertySource注解、SpringApplication.setSources() API等方式指定配置数据的路径。但是不管如何,application.properties要是存在,其配置信息仍然会被加载。
5.properties文件中的值,支持占位符,占位符的值可以在命令行启动时设置:
server.port=${port:8080}
命令行启动时,指定--port=9000即可。
6.支持profile配套的配置信息
在命令行启动时通过-Dspring.profiles.active=production这样的方式指定prfoile的值,配置信息写在application-${profile}.properties文件中。
我们如何找到spring boot支持的配置项?
文档说加了@ConfigurationProperties注解的都是提供的默认配置项,诸如:ServerProperties、CacheProperties、MultipartProperties等。
另 诸如数据源等配置,均可以以此方式进行。
文档在Appendix A. Common application properties 章节列举了支持的配置项。
另,日志等相关配置请参见 文档26.4章节。
spring boot2.0 rest形式暴露一个简单的增删改查
整合mybatis做了增删改查
controller service dao等与传统的spring开发方式无异。
数据源配置使用spring boot的方式进行配置:
datasource
spring.datasource.name=test
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/baasxx_ase?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=xxxx
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.maximum-pool-size=15
注意 2.0.3版本不要使用淘宝的druid,因为他用了org.springframework.boot.bind.RelaxedDataBinder
spring boot2.0.3不支持
spring boot支持的数据源类型有Commons DBCP2、 tomcat-jdbc、HikariCP,请参见Connection to a Production Database
章节,包括在什么情况下默认使用谁都有说明, 支持的配置项请参见DataSourceProperties类。
mybatis的dao只需写接口,需要配置@MapperScan("org.cnblogs.simoncook.springboot2.demo.comment.dao")
mybatis的配置文件扫描路径配置在application.properties
mybatis.mapper-locations: classpath:mapping/*.xml
contoller接口的json数据形式支持,需要加注解@ResponseBody 和 @RequestBody
调试使用 远程启动调试的方式 java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 -jar target/spring_boot_2.0_demo-0.0.1-SNAPSHOT.jar
spring boot2.0 事务管理
用注解式,与spring的传统方式无异。
spring boot2.0 AOP
用注解式,与spring的传统方式无异。
spring boot2.0缓存
支持的种类:
- Generic
- JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, and others) 3. EhCache 2.x
- Hazelcast
- Infinispan
- Couchbase
- Redis
- Caffeine
- Simple
示例
通过配置项指定缓存类型:spring.cache.type=SIMPLE
在主类上加注解@EnableCaching(我这里Example类,就是那个加了@SpringBootApplication注解的类)
@Cacheable(value="dictItemsCache", key="#dictName")
@Override
public List<DictItem> queryDictItemByName(String dictName)
{
return dictDao.queryDictItemByName(dictName);
}
通过测试发现,第一次访问会发出查询sql(logging.level.org.cnblogs.simoncook.springboot2.demo=DEBUG #可以开启mybatis的sql日志),第二次访问不会。
spring boot2.0 bean装配高级特性
spring boot2.0监控
web形式在2.0.3默认只开启三四个监控指标,其余的需要在application.properties文件中配置开启:
management.endpoints.web.exposure.include=*
参见文档50.2 Exposing Endpoints