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. Maven run
2.2.3. Spring Boot maven 插件 build-image
2.2.4. 生成項目信息
2.3. SpringApplication
2.3.1. 運行 Spring boot 項目
2.3.1.1. Linux systemd
2.3.1.2. 傳統 init.d 腳本
2.3.1.3. 編譯用於Tomcat的 War
2.3.2. @SpringBootApplication
2.3.2.1. 排除 @EnableAutoConfiguration 加載項
2.3.3. @EnableAutoConfiguration
2.3.4. @ComponentScan
2.3.5. @EntityScan 實體掃瞄
2.3.6. @EnableJpaRepositories
2.3.7. CharacterEncodingFilter
2.3.8. 隱藏 Banner
2.3.9. 實體與倉庫掃瞄
2.3.10. 列出 Beans
2.3.11. Tomcat 連接埠
2.3.12. 配置項設定
2.3.13.
2.4. Properties 配置檔案
2.4.1. application.properties 配置檔案
2.4.1.1. application.properties 參考
2.4.1.2. 啟動指定參數
2.4.1.2.1. --spring.config.location 指定配置檔案
2.4.1.2.2. --spring.profiles.active 切換配置檔案
2.4.1.3. 加載排除
2.4.1.4. PID FILE
2.4.1.5. server
2.4.1.5.1. 連接埠配置
2.4.1.5.2. Session 配置
2.4.1.5.3. cookie
2.4.1.5.4. error 路徑
2.4.1.5.5. 壓縮傳輸
2.4.1.5.6. ssl
2.4.1.6. logging
2.4.1.7. 內嵌 tomcat server
2.4.1.7.1.
2.4.1.7.2. server.tomcat.basedir
2.4.1.7.3. access.log
2.4.1.7.4. charset
2.4.1.8. servlet
2.4.1.8.1. 上傳限制
2.4.1.8.2. server.servlet.context-path
2.4.1.9. JSON 輸出與日期格式化
2.4.1.10. SMTP 相關配置
2.4.1.11. Redis
2.4.1.12. MongoDB
2.4.1.13. MySQL
2.4.1.14. Oracle
2.4.1.15. default_schema
2.4.1.16. datasource
2.4.1.17. velocity
2.4.1.18. Security 相關配置
2.4.1.19. MVC 配置
2.4.1.20. Kafka 相關配置
2.4.2. Properties 檔案
2.4.2.1. @Value 註解
2.4.2.2. containsProperty 讀取配置檔案
2.4.2.3. @PropertySource 註解載入 properties 檔案
2.4.2.4. @EnableConfigurationProperties 引用自定義 *.properties 配置檔案
2.4.2.5. 手工載入 *.properties 檔案
2.4.2.6. spring.profiles.active 參數切換配置檔案
2.4.2.7. SpringApplicationBuilder.properties() 方法添加配置項
2.4.2.8. 參數引用
2.4.2.9. 產生隨機數
2.4.2.10. List 列表類型
2.4.2.11. Map類型
2.4.2.12. Binder
2.5. Spring boot with Logging
2.5.1. 配置日誌檔案
2.5.1.1. 日誌輸出級別
2.5.1.2. Spring boot 2.1 以後的版本不打印 Mapped 日誌問題
2.5.1.3. 禁止控制台輸出日誌
2.5.1.4. 定製日誌格式
2.5.2. 打印日誌
2.5.2.1. lombok
2.5.3. logback 配置詳解
2.5.3.1. 標準輸出
2.5.3.2. 分隔日誌
2.5.3.3. 按照檔案尺寸分割日誌
2.5.3.4. 指定Class過濾日誌
2.5.3.5. 日誌寫入 MongoDB
2.5.3.6. configuration 屬性配置
2.5.3.7. contextName 設置上下文名稱
2.5.3.8. property 設置變數
2.5.3.9. encoder 日誌格式設置
2.5.3.10. RollingFileAppender
2.6. Spring boot with Jetty
2.7. Spring boot with HTTP2 SSL
2.7.1. 生成自簽名證書
2.7.2. application.properties 配置檔案
2.7.3. 啟動 Spring boot
2.7.4. restTemplate 調用實例
2.7.5. HTTP2
2.8. Spring boot with Webpage
2.8.1. Maven
2.8.2. application.properties
2.8.3. Application
2.8.4. IndexController
2.8.5. src/main/webapp/WEB-INF/jsp/index.jsp
2.8.6. 整合模板引擎
2.9. Spring boot with Velocity template
2.9.1. Maven
2.9.2. Resource
2.9.3. Application
2.9.4. RestController
2.9.5. Test
2.10. Spring boot with Thymeleaf
2.10.1. Maven
2.10.2. application.properties
2.10.3. Controller
2.10.4. HTML5 Template
2.11. Spring boot with Session share
2.11.1. Redis
2.11.1.1. Maven
2.11.1.2. application.properties
2.11.1.3. Application
2.11.2. 測試 Session
2.11.3. JDBC
2.11.4. Springboot 2.1
2.12. Spring boot with Caching
2.12.1. maven
2.12.2. 啟用 Cache
2.12.3. 測試 Controller
2.12.4. @Cacheable 的用法
2.12.5. @CachePut 用法
2.12.6. 解決Expire 和 TTL 過期時間
2.12.7. SpEL表達式
2.13. Spring boot with Email
2.13.1. Maven
2.13.2. Resource
2.13.3. POJO
2.13.4. RestController
2.13.5. Test
2.14. Spring boot with Hessian
2.14.1. Maven
2.14.2. Application
2.14.3. HessianServiceExporter
2.14.4. Service
2.14.5. RestController
2.15. Spring boot with Git version
2.15.1. CommonRestController 公共控製器
2.15.2. VersionRestController 測試控製器
2.15.3. 創建 .gitattributes 檔案
2.16. Spring boot with Data restful
2.16.1. Maven
2.17. Spring boot with ELK(Elasticsearch + Logstash + Kibana)
2.17.1. TCP 方案
2.17.2. Redis 方案
2.17.3. Kafka 方案
2.17.4. Other
2.18. Springboot with Ethereum (web3j)
2.18.1. Maven
2.18.2. application.properties
2.18.3. TestRestController
2.18.4. 測試
2.19. Spring boot with Async
2.19.1. 最簡單的配置
2.19.2. 非同步綫程池
2.20. Spring boot with csv
2.21. Spring boot with Redis
2.21.1. Spring boot with Redis
2.21.1.1. maven
2.21.1.2. application.properties
2.21.1.3. JUnit
2.21.1.4. Controller
2.21.2. Redis Pub/Sub
2.21.2.1. Redis配置類
2.21.2.2. 訂閲和發佈類
2.21.2.3. 消息發佈演示
2.22. Spring boot with MongoDB
2.22.1. Maven
2.22.2. Application
2.22.3. MongoTemplate
2.22.4. Repository
2.23. Spring boot with MySQL
2.23.1. Maven
2.23.2. Resource
2.23.3. Application
2.23.4. JdbcTemplate
2.23.5. CrudRepository
2.24. Spring boot with Oracle
2.24.1. Maven
2.24.2. application.properties
2.24.3. Application
2.24.4. CrudRepository
2.24.5. JdbcTemplate
2.24.6. Controller
2.25. Spring boot with PostgreSQL
2.25.1. pom.xml
2.25.2. application.properties
2.25.3. Application
2.25.4. CrudRepository
2.25.5. JdbcTemplate
2.25.6. Controller
2.25.7. Test
2.26. Spring boot with Datasource
2.26.1. Master / Slave 主從資料庫數據源配置
2.26.1.1. application.properties
2.26.1.2. 配置主從數據源
2.26.1.3. 選擇數據源
2.26.2. 多數據源配置
2.26.3. JPA 多數據源
2.26.4. Connection and Statement Pooling
2.26.4.1. org.apache.tomcat.jdbc.pool.DataSource
2.26.4.2. druid
2.26.4.3. c3p0 - JDBC3 Connection and Statement Pooling
2.26.4.4. dbcp2
2.26.4.5. bonecp
2.26.4.6. dbcp2
2.27. Spring boot with Elasticsearch
2.27.1. Maven
2.27.2. Application
2.27.3. application.properties
2.27.4. Domain
2.27.5. ElasticsearchRepository
2.28. Spring boot with Elasticsearch TransportClient
2.28.1. Maven
2.28.2. Application
2.28.3. application.properties
2.28.4. ElasticsearchConfiguration
2.28.5. RestController
2.29. Spring boot with Apache Hive
2.29.1. Maven
2.29.2. application.properties
2.29.3. Configuration
2.29.4. CURD 操作實例
2.30. Spring boot with Phoenix
2.30.1. Maven
2.30.2. application.properties
2.30.3. Configuration
2.31. Spring boot with RabbitMQ(AMQP)
2.31.1. maven
2.31.2. RabbitMQConfig
2.31.3. 生產者
2.31.4. 消費者
2.32. Spring boot with Apache Kafka
2.32.1. 安裝 kafka
2.32.2. maven
2.32.3. Spring boot Application
2.32.4. EnableKafka
2.32.5. KafkaListener
2.32.6. 測試
2.32.7. 完整的發佈訂閲實例
2.32.7.1. Consumer
2.32.7.2. Producer
2.32.7.3. Test
2.32.8. Spring cloud with Kafka
2.32.8.1. Application 主檔案
2.32.8.2. 資源配置檔案
2.32.8.2.1. application.properties
2.32.8.2.2. bootstrap.properties
2.32.8.2.3. Git 倉庫
2.32.8.3. 啟用 kafka
2.32.8.4. 消息發佈主程序
2.33. Spring boot with Scheduling
2.33.1. Application.java
2.33.2. Component
2.33.3. 查看日誌
2.33.4. 計劃任務控制開關
2.33.5. @Scheduled 詳解
2.33.5.1. 每3秒鐘一運行一次
2.33.5.2. 凌晨23點運行
2.33.6. Timer 例子
2.33.7. ScheduledExecutorService 例子
2.34. Spring boot with Swagger
2.34.1. Maven 檔案
2.34.2. SpringApplication
2.34.3. EnableSwagger2
2.34.4. RestController
2.34.5. @Api()
2.34.6. @ApiOperation()
2.34.7. @ApiResponses
2.34.8. @ApiModel 實體類
2.35. Spring boot with lombok
2.35.1. @Builder
2.35.2. @Slf4j 註解
2.36. Spring boot with Docker
2.36.1. 通過 Docker 命令構建鏡像
2.36.1.1. 手工編譯鏡像
2.36.1.2. Dockerfile 放在 src/main/docker/Dockerfile 下
2.36.1.3. 通過參數指定 Springboot 檔案
2.36.1.4. SPRING_PROFILES_ACTIVE 指定配置檔案
2.36.1.5. 推送鏡像到倉庫
2.36.2. 通過 Maven 構建 Docker 鏡像
2.36.2.1. Maven + Dockerfile 方案一
2.36.2.2. Maven + Dockerfile 方案二
2.36.2.3. Maven 不使用 Dockerfile 檔案
2.36.2.4. 推送鏡像
2.36.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.36.4. curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:8888
2.37. Spring boot with Docker stack
2.37.1. 編譯 Docker 鏡像
2.37.2.
2.38. Spring boot with Kubernetes
2.38.1. Kubernetes 編排腳本
2.38.2. 部署鏡像
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.2.2. 安全配置
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. 測試運行結果
2.45. Spring boot with Grafana
2.45.1. Springboot 整合 InfluxDB
2.45.2. InfluxDB
2.46. Spring Boot with Prometheus
2.46.1. Maven 依賴
2.46.2. application.properties 配置檔案
2.46.3. 啟動類
2.46.4. 測試
2.46.5. 控製器監控
2.46.6. 自定義埋點監控
2.46.6.1. 攔截器
2.46.6.2. 計數器元件
2.46.6.3. 配置類
2.46.6.4. 測試埋點效果

注意以下使用 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/