Home | 简体中文 | 繁体中文 | 杂文 | 知乎专栏 | Github | OSChina 博客 | 云社区 | 云栖社区 | Facebook | Linkedin | 视频教程 | 打赏(Donations) | About
知乎专栏多维度架构 | 微信号 netkiller-ebook | QQ群:128659835 请注明“读者”

第 2 章 Spring Boot

目录

2.1. Spring Boot Quick start
2.1.1. 创建项目
2.1.2. pom.xml
2.1.3. Controller
2.2. Springboot with Maven
2.2.1. resource
2.2.2. Spring Boot maven 插件 build-image
2.3. 运行 Spring boot 项目
2.3.1. Maven run
2.3.2. Linux systemd
2.3.3. 传统 init.d 脚本
2.3.4. 编译用于Tomcat的 War
2.4. SpringApplication
2.4.1. @SpringBootApplication
2.4.1.1. 排除 @EnableAutoConfiguration 加载项
2.4.2. @EnableAutoConfiguration
2.4.3. @ComponentScan
2.4.4. @EntityScan 实体扫描
2.4.5. @EnableJpaRepositories
2.4.6. CharacterEncodingFilter
2.4.7. 隐藏 Banner
2.4.8. 实体与仓库扫描
2.4.9. 列出 Beans
2.4.10. Tomcat 端口
2.5. application.properties 配置文件
2.5.1. application.properties 参考
2.5.2. 启动指定参数
2.5.2.1. --spring.config.location 指定配置文件
2.5.2.2. --spring.profiles.active 切换配置文件
2.5.3. 加载排除
2.5.4. PID FILE
2.5.5. 内嵌 tomcat server
2.5.5.1. server.tomcat.basedir
2.5.5.2. server
2.5.5.3. access.log
2.5.5.4. logging
2.5.5.5. charset
2.5.5.6. Session 配置
2.5.5.7. cookie
2.5.5.8. error 路径
2.5.5.9. 压缩传输
2.5.5.10. server.servlet.context-path
2.5.5.11. ssl
2.5.5.12. 上传限制
2.5.6. JSON 输出与日期格式化
2.5.7. SMTP 相关配置
2.5.8. Redis
2.5.9. MongoDB
2.5.10. MySQL
2.5.11. Oracle
2.5.12. default_schema
2.5.13. datasource
2.5.14. velocity
2.5.15. Security 相关配置
2.5.16. MVC 配置
2.5.17. Kafka 相关配置
2.6. Properties 文件
2.6.1. @Value 注解
2.6.2. containsProperty 读取配置文件
2.6.3. @PropertySource 注解载入 properties 文件
2.6.4. @EnableConfigurationProperties 引用自定义 *.properties 配置文件
2.6.5. 手工载入 *.properties 文件
2.6.6. spring.profiles.active 参数切换配置文件
2.6.7. SpringApplicationBuilder.properties() 方法添加配置项
2.6.8. 参数引用
2.6.9. 产生随机数
2.6.10. List 列表类型
2.6.11. Map类型
2.6.12. Binder
2.7. Spring boot with Logging
2.7.1. 打印日志
2.7.2. 日志输出级别
2.7.3. 禁止控制台输出日志
2.7.4. Spring boot 2.1 以后的版本不打印 Mapped 日志问题
2.7.5. 标准输出
2.7.6. 安天分隔日志
2.7.7. 按照文件尺寸分割日志
2.7.8. 指定Class过滤日志
2.7.9. 日志写入 MongoDB
2.7.10. logback 配置详解
2.7.10.1. configuration 属性配置
2.7.10.2. contextName 设置上下文名称
2.7.10.3. property 设置变量
2.7.10.4. encoder 日志格式设置
2.7.10.5. RollingFileAppender
2.8. Spring boot with HTTP2 SSL
2.8.1. 生成自签名证书
2.8.2. application.properties 配置文件
2.8.3. 启动 Spring boot
2.8.4. restTemplate 调用实例
2.8.5. HTTP2
2.9. Spring boot with Jetty
2.10. Spring boot with Webpage
2.10.1. Maven
2.10.2. application.properties
2.10.3. Application
2.10.4. IndexController
2.10.5. src/main/webapp/WEB-INF/jsp/index.jsp
2.10.6. 集成模板引擎
2.11. Spring boot with Velocity template
2.11.1. Maven
2.11.2. Resource
2.11.3. Application
2.11.4. RestController
2.11.5. Test
2.12. Spring boot with Thymeleaf
2.12.1. Maven
2.12.2. application.properties
2.12.3. Controller
2.12.4. HTML5 Template
2.13. Spring boot with Session share
2.13.1. Redis
2.13.1.1. Maven
2.13.1.2. application.properties
2.13.1.3. Application
2.13.2. 测试 Session
2.13.3. JDBC
2.13.4. Springboot 2.1
2.14. Spring boot with Caching
2.14.1. maven
2.14.2. 启用 Cache
2.14.3. 测试 Controller
2.14.4. @Cacheable 的用法
2.14.5. @CachePut 用法
2.14.6. 解决Expire 和 TTL 过期时间
2.14.7. SpEL表达式
2.15. Spring boot with Email
2.15.1. Maven
2.15.2. Resource
2.15.3. POJO
2.15.4. RestController
2.15.5. Test
2.16. Spring boot with Hessian
2.16.1. Maven
2.16.2. Application
2.16.3. HessianServiceExporter
2.16.4. Service
2.16.5. RestController
2.17. Spring boot with Git version
2.17.1. CommonRestController 公共控制器
2.17.2. VersionRestController 测试控制器
2.17.3. 创建 .gitattributes 文件
2.18. Spring boot with Data restful
2.18.1. Maven
2.19. Spring boot with ELK(Elasticsearch + Logstash + Kibana)
2.19.1. TCP 方案
2.19.2. Redis 方案
2.19.3. Kafka 方案
2.19.4. Other
2.20. Springboot with Ethereum (web3j)
2.20.1. Maven
2.20.2. application.properties
2.20.3. TestRestController
2.20.4. 测试
2.21. Spring boot with Async
2.21.1. 最简单的配置
2.21.2. 异步线程池
2.22. Spring boot with csv
2.23. Spring boot with Redis
2.23.1. Spring boot with Redis
2.23.1.1. maven
2.23.1.2. application.properties
2.23.1.3. JUnit
2.23.1.4. Controller
2.23.2. Redis Pub/Sub
2.23.2.1. Redis配置类
2.23.2.2. 订阅和发布类
2.23.2.3. 消息发布演示
2.24. Spring boot with MongoDB
2.24.1. Maven
2.24.2. Application
2.24.3. MongoTemplate
2.24.4. Repository
2.25. Spring boot with MySQL
2.25.1. Maven
2.25.2. Resource
2.25.3. Application
2.25.4. JdbcTemplate
2.25.5. CrudRepository
2.26. Spring boot with Oracle
2.26.1. Maven
2.26.2. application.properties
2.26.3. Application
2.26.4. CrudRepository
2.26.5. JdbcTemplate
2.26.6. Controller
2.27. Spring boot with PostgreSQL
2.27.1. pom.xml
2.27.2. application.properties
2.27.3. Application
2.27.4. CrudRepository
2.27.5. JdbcTemplate
2.27.6. Controller
2.27.7. Test
2.28. Spring boot with Datasource
2.28.1. Master / Slave 主从数据库数据源配置
2.28.1.1. application.properties
2.28.1.2. 配置主从数据源
2.28.1.3. 选择数据源
2.28.2. 多数据源配置
2.28.3. JPA 多数据源
2.28.4. Connection and Statement Pooling
2.28.4.1. org.apache.tomcat.jdbc.pool.DataSource
2.28.4.2. druid
2.28.4.3. c3p0 - JDBC3 Connection and Statement Pooling
2.28.4.4. dbcp2
2.28.4.5. bonecp
2.28.4.6. dbcp2
2.29. Spring boot with Elasticsearch
2.29.1. Maven
2.29.2. Application
2.29.3. application.properties
2.29.4. Domain
2.29.5. ElasticsearchRepository
2.30. Spring boot with Elasticsearch TransportClient
2.30.1. Maven
2.30.2. Application
2.30.3. application.properties
2.30.4. ElasticsearchConfiguration
2.30.5. RestController
2.31. Spring boot with Apache Hive
2.31.1. Maven
2.31.2. application.properties
2.31.3. Configuration
2.31.4. CURD 操作实例
2.32. Spring boot with Phoenix
2.32.1. Maven
2.32.2. application.properties
2.32.3. Configuration
2.33. Spring boot with RabbitMQ(AMQP)
2.33.1. maven
2.33.2. RabbitMQConfig
2.33.3. 生产者
2.33.4. 消费者
2.34. Spring boot with Apache Kafka
2.34.1. 安装 kafka
2.34.2. maven
2.34.3. Spring boot Application
2.34.4. EnableKafka
2.34.5. KafkaListener
2.34.6. 测试
2.34.7. 完整的发布订阅实例
2.34.7.1. Consumer
2.34.7.2. Producer
2.34.7.3. Test
2.34.8. Spring cloud with Kafka
2.34.8.1. Application 主文件
2.34.8.2. 资源配置文件
2.34.8.2.1. application.properties
2.34.8.2.2. bootstrap.properties
2.34.8.2.3. Git 仓库
2.34.8.3. 启用 kafka
2.34.8.4. 消息发布主程序
2.35. Spring boot with Scheduling
2.35.1. Application.java
2.35.2. Component
2.35.3. 查看日志
2.35.4. 计划任务控制开关
2.35.5. @Scheduled 详解
2.35.5.1. 每3秒钟一运行一次
2.35.5.2. 凌晨23点运行
2.35.6. Timer 例子
2.35.7. ScheduledExecutorService 例子
2.36. Spring boot with Swagger2
2.36.1. Maven 文件
2.36.2. SpringApplication
2.36.3. EnableSwagger2
2.36.4. RestController
2.36.5. @Api()
2.36.6. @ApiOperation()
2.36.7. @ApiResponses
2.36.8. @ApiModel 实体类
2.37. Spring boot with lombok
2.37.1. @Builder
2.38. Spring Boot with Docker
2.38.1. 通过 Docker 命令构建镜像
2.38.1.1. 手工编译镜像
2.38.1.2. Dockerfile 放在 src/main/docker/Dockerfile 下
2.38.1.3. 通过参数指定 Springboot 文件
2.38.1.4. SPRING_PROFILES_ACTIVE 指定配置文件
2.38.1.5. 推送镜像到仓库
2.38.2. 通过 Maven 构建 Docker 镜像
2.38.2.1. Maven + Dockerfile 方案一
2.38.2.2. Maven + Dockerfile 方案二
2.38.2.3. Maven 不使用 Dockerfile 文件
2.38.2.4. 推送镜像
2.38.3. [ERROR] No plugin found for prefix 'dockerfile' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (/Users/neo/.m2/repository), central (https://repo.maven.apache.org/maven2)] -> [Help 1]
2.39. Spring boot with command line
2.39.1. Maven
2.39.2. CommandLineRunner 例子
2.39.3. ApplicationRunner 例子
2.40. Spring Boot Actuator
2.40.1. Maven 依赖
2.40.2. 与 Spring Boot Actuator 有关的配置
2.40.2.1. 禁用HTTP端点
2.40.3. actuator 接口
2.40.4. 健康状态
2.40.4.1. 健康状态
2.40.5. 关机
2.40.6. info 配置信息
2.40.7. 计划任务
2.41. String boot with RestTemplate
2.41.1. RestTemplate Example
2.41.1.1. pom.xml
2.41.1.2. web.xml
2.41.1.3. springframework.xml
2.41.1.4. RestController
2.41.1.5. POJO
2.41.1.6. 在控制器中完整实例
2.41.1.7. 测试
2.41.2. GET 操作
2.41.2.1. 返回字符串
2.41.2.2. 传递 GET 参数
2.41.3. POST 操作
2.41.3.1. postForObject
2.41.3.1.1. 传递对象
2.41.3.1.2. 传递数据结构 MultiValueMap
2.41.3.2. postForEntity
2.41.4. PUT 操作
2.41.5. Delete 操作
2.41.6. 上传文件
2.41.7. HTTP Auth
2.41.7.1. Client
2.41.8. PKCS12
2.41.9. Timeout 超时设置
2.41.9.1. JRE 启动参数设置超时时间
2.41.9.2. RestTemplate timeout with SimpleClientHttpRequestFactory
2.41.9.3. @Configuration 方式
2.42. SpringBootTest
2.42.1. Maven 依赖
2.42.2. 测试类
2.42.2.1. Junit基本注解介绍
2.42.3.
2.42.3.1. Assert.assertEquals 判断相等
2.42.3.2. Assert.assertTrue
2.42.4. JPA 测试
2.42.5.
2.42.6. Controller单元测试
2.42.7. WebTestClient
2.43. Spring boot with Aop
2.43.1. Aspect
2.43.1.1. Maven
2.43.1.2. Pojo 类
2.43.1.3. Service 类
2.43.1.4. Aspect 类
2.43.1.5. 控制器
2.43.1.6. Application
2.43.1.7. 测试
2.44. Spring boot with starter
2.44.1. 实现 starter
2.44.1.1. Maven pom.xml 依赖包
2.44.1.2. 配置文件处理
2.44.1.3. 自动配置文件
2.44.1.4. 启用 starter 的自定义注解
2.44.2. 引用 starter
2.44.2.1. Maven pom.xml 引入依赖
2.44.2.2. 通过注解配置 starter
2.44.2.3. 测试运行结果

注意以下使用 Spring boot 2

2.1. Spring Boot Quick start

2.1.1. 创建项目

		
curl https://start.spring.io/starter.tgz  \
  -d artifactId=creds-example-server \
  -d dependencies=security,web \
  -d language=java \
  -d type=maven-project \
  -d baseDir=example-server \
| tar -xzvf -		
		
		

2.1.2. pom.xml

		
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>api.netkiller.cn</groupId>
	<artifactId>api.netkiller.cn</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Skyline</name>
	<description>skylinechencf@gmail.com</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.0.RELEASE</version>
	</parent>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>

	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.3</version>
				<configuration>
					<source />
					<target />
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>		
		
		

2.1.3. Controller

		
package hello;

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;

@Controller
@EnableAutoConfiguration
public class SampleController {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(SampleController.class, args);
    }
}
		
		

测试

curl http://127.0.0.1:8080/