Просмотр исходного кода

增加springboot优雅停止服务接口

weihf лет назад: 5
Родитель
Сommit
af0d35402b

+ 91 - 65
ipu-rest-scaffold/pom.xml

@ -1,70 +1,96 @@
1
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
2
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3
    <modelVersion>4.0.0</modelVersion>
1
<project xmlns="http://maven.apache.org/POM/4.0.0"
2
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4
	<modelVersion>4.0.0</modelVersion>
4 5
5
    <parent>
6
        <groupId>com.ai.ipu.server</groupId>
7
        <artifactId>ipu-rest-libs</artifactId>
8
        <version>3.1-SNAPSHOT</version>
9
    </parent>
10
    
11
    <artifactId>ipu-rest-scaffold</artifactId>
12
    <packaging>jar</packaging>
13
    <name>restful脚手架服务</name>
14
    
15
    <repositories>
16
        <!-- IPU仓库 -->
17
        <repository>
18
            <id>ipu</id>
19
            <name>ipu repository</name>
20
            <url>http://114.215.100.48:9090/nexus/content/groups/public/</url>
21
            <releases>
22
                <enabled>true</enabled>
23
            </releases>
24
            <snapshots>
25
                <enabled>true</enabled>
26
                <updatePolicy>always</updatePolicy>
27
            </snapshots>
28
        </repository>
29
    </repositories>
6
	<parent>
7
		<groupId>com.ai.ipu.server</groupId>
8
		<artifactId>ipu-rest-libs</artifactId>
9
		<version>3.1-SNAPSHOT</version>
10
	</parent>
30 11
31
    <properties>
32
        <start-class>com.ai.ipu.server.RestScaffoldStart</start-class>
33
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
34
        <mongo.java.driver>3.11.2</mongo.java.driver>
35
        <ipu>3.1-SNAPSHOT</ipu>
36
    </properties>
12
	<artifactId>ipu-rest-scaffold</artifactId>
13
	<packaging>jar</packaging>
14
	<name>restful脚手架服务</name>
37 15
38
    <dependencies>
39
        <dependency>
40
            <groupId>com.ai.ipu</groupId>
41
            <artifactId>ipu-sql-mgmt</artifactId>
42
            <version>${ipu}</version>
43
            <!-- 屏蔽以后Idea可能启动报错 -->
44
            <scope>provided</scope>
45
        </dependency>
46
        <dependency>
47
        	<groupId>com.ai.ipu.server</groupId>
48
        	<artifactId>ipu-restful</artifactId>
49
        </dependency>
50
        <dependency>
51
            <groupId>com.ai.ipu</groupId>
52
            <artifactId>ipu-nosql</artifactId>
53
            <version>3.1-SNAPSHOT</version>
54
        </dependency>
55
        <dependency>
56
            <groupId>org.mongodb</groupId>
57
            <artifactId>mongo-java-driver</artifactId>
58
            <version>${mongo.java.driver}</version>
59
        </dependency>
60
    </dependencies>
16
	<repositories>
17
		<!-- IPU仓库 -->
18
		<repository>
19
			<id>ipu</id>
20
			<name>ipu repository</name>
21
			<url>http://114.215.100.48:9090/nexus/content/groups/public/</url>
22
			<releases>
23
				<enabled>true</enabled>
24
			</releases>
25
			<snapshots>
26
				<enabled>true</enabled>
27
				<updatePolicy>always</updatePolicy>
28
			</snapshots>
29
		</repository>
30
	</repositories>
61 31
62
    <build>
63
        <plugins>
64
            <plugin>
65
                <groupId>org.springframework.boot</groupId>
66
                <artifactId>spring-boot-maven-plugin</artifactId>
67
            </plugin>
68
        </plugins>
69
    </build>
32
	<properties>
33
		<start-class>com.ai.ipu.server.RestScaffoldStart</start-class>
34
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
35
		<mongo.java.driver>3.11.2</mongo.java.driver>
36
		<ipu>3.1-SNAPSHOT</ipu>
37
		<jdk>1.8</jdk>
38
		<junit>4.12</junit>
39
		<spring-session.version>1.3.2.RELEASE</spring-session.version>
40
		<nacos-config.version>0.1.1</nacos-config.version>
41
	</properties>
42
43
	<dependencies>
44
		<dependency>
45
			<groupId>com.ai.ipu</groupId>
46
			<artifactId>ipu-sql-mgmt</artifactId>
47
			<version>${ipu}</version>
48
			<!-- 屏蔽以后Idea可能启动报错 -->
49
			<scope>provided</scope>
50
		</dependency>
51
		<dependency>
52
			<groupId>com.ai.ipu.server</groupId>
53
			<artifactId>ipu-restful</artifactId>
54
		</dependency>
55
		<!-- 引入ipu-nosql -->
56
		<dependency>
57
			<groupId>com.ai.ipu</groupId>
58
			<artifactId>ipu-nosql</artifactId>
59
			<version>3.1-SNAPSHOT</version>
60
		</dependency>
61
		<dependency>
62
			<groupId>org.mongodb</groupId>
63
			<artifactId>mongo-java-driver</artifactId>
64
			<version>${mongo.java.driver}</version>
65
		</dependency>
66
		<dependency>
67
			<groupId>org.springframework.boot</groupId>
68
			<artifactId>spring-boot-starter-test</artifactId>
69
			<scope>test</scope>
70
			<exclusions>
71
				<exclusion>
72
					<groupId>org.mockito</groupId>
73
					<artifactId>mockito-core</artifactId>
74
				</exclusion>
75
			</exclusions>
76
		</dependency>
77
		<!-- 提供http接口以便停止springboot应用 -->
78
		<dependency>
79
			<groupId>org.springframework.boot</groupId>
80
			<artifactId>spring-boot-starter-actuator</artifactId>
81
		</dependency>
82
83
	</dependencies>
84
85
	<build>
86
		<plugins>
87
			<plugin>
88
				<groupId>org.springframework.boot</groupId>
89
				<artifactId>spring-boot-maven-plugin</artifactId>
90
				<configuration>
91
                    <fork>true</fork>
92
                </configuration>
93
			</plugin>
94
		</plugins>
95
	</build>
70 96
</project>

+ 24 - 1
ipu-rest-scaffold/readme.md

@ -49,7 +49,30 @@ SQL被统一存放在classpath的sql路径下,如:sql.ipu.demo。
49 49
        <config name="needTranscation" value="true"/>
50 50
        ```
51 51
- 该组件使用案例在:MongoDbController中
52

52
###五、springboot优雅停止服务
53
- 1.组件的引入
54
    - 以maven为例,请在pom.xml中引入spring-boot-starter-actuator组件。
55
        ```xml
56
        <dependency>
57
            <groupId>org.springframework.boot</groupId>
58
            <artifactId>spring-boot-starter-actuator</artifactId>
59
        </dependency>
60
        ```
61
- 2.在application.properties配置(注意以下为springboot1.X的配置,springboot2.X见application2X.properties):
62
        ```properties
63
        #启用shutdown
64
        endpoints.shutdown.enabled=true
65
        #禁用密码验证
66
        endpoints.shutdown.sensitive=false
67
        # 自定义管理端点的前缀(保证安全)
68
        management.context-path=/MyActuator
69
        # 指定管理端口
70
        management.port=12581
71
        # 不允许远程管理连接(不允许外部调用保证安全)
72
        management.address=127.0.0.1
73
        ```
74
- 3.停止springboot应用的http接口只支持POST。在linux下使用命令curl -X POST http://127.0.0.1:12581/MyActuator/shutdown;在windows下使用工具,选择POST方式。
75
- 4.测试案例见GracefulTestController.java。在浏览器里输入http://服务ip:port/ipu/graceful/hello
53 76

54 77
###打包运行
55 78
java -Dipu.lic.path=ipu.lic -jar ipu-rest-scaffold.jar --server.port=8080

+ 32 - 0
ipu-rest-scaffold/src/main/java/com/ai/ipu/server/control/GracefulTestController.java

@ -0,0 +1,32 @@
1
package com.ai.ipu.server.control;
2

3
import java.util.concurrent.atomic.AtomicInteger;
4

5
import org.springframework.stereotype.Controller;
6
import org.springframework.web.bind.annotation.RequestMapping;
7
import org.springframework.web.bind.annotation.ResponseBody;
8

9
@Controller
10
@RequestMapping("/graceful")
11
public class GracefulTestController {
12
	// 计数器
13
	public AtomicInteger started = new AtomicInteger();
14
	public AtomicInteger ended = new AtomicInteger();
15

16
	@RequestMapping("/hello")
17
	@ResponseBody
18
	public String hello() {
19

20
		System.out.println(Thread.currentThread().getName() + " -> " + this + " Get one, got: " + started.addAndGet(1));
21
		try {
22
			Thread.sleep(1000 * 100); // 模拟一个执行时间很长的任务
23
		} catch (InterruptedException e) {
24
			e.printStackTrace();
25
		}
26

27
		System.out.println(
28
				Thread.currentThread().getName() + " -> " + this + "  Finish one, finished: " + ended.addAndGet(1));
29
		return "hello";
30
	}
31

32
}

+ 22 - 0
ipu-rest-scaffold/src/main/resources/dev/application.properties

@ -21,3 +21,25 @@ spring.application.name=${project.artifactId}
21 21

22 22
######session使用默认
23 23
spring.session.store-type=none
24

25
###配置nacos
26
nacos.config.server-addr=10.1.234.70:8848
27

28
#设置开启热部署
29
spring.devtools.restart.enabled=true
30
#重启目录
31
spring.devtools.restart.additional-paths=src/main/java
32
spring.devtools.restart.exclude=WEB-INF/**
33
#页面热加载
34
spring.freemarker.cache=false 
35

36
#启用shutdown
37
endpoints.shutdown.enabled=true
38
#禁用密码验证
39
endpoints.shutdown.sensitive=false
40
# 自定义管理端点的前缀(保证安全)
41
management.context-path=/MyActuator
42
# 指定管理端口
43
management.port=12581
44
# 不允许远程管理连接(不允许外部调用保证安全)
45
management.address=127.0.0.1

+ 10 - 0
ipu-rest-scaffold/src/main/resources/dev/application2X.properties

@ -0,0 +1,10 @@
1
# 启用shutdown
2
management.endpoint.shutdown.enabled=true
3
# 公开所有的端点
4
management.endpoints.web.exposure.include=*
5
# 自定义管理端点的前缀(保证安全)
6
management.endpoints.web.base-path=/MyActuator
7
# 自定义端口
8
management.server.port=12581
9
# 不允许远程管理连接(不允许外部调用保证安全)
10
management.server.address=127.0.0.1