马府强
2 years ago
15 changed files with 350 additions and 0 deletions
@ -0,0 +1,40 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<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> |
||||
|
<parent> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-starter-parent</artifactId> |
||||
|
<version>2.3.12.RELEASE</version> |
||||
|
<relativePath/> <!-- lookup parent from repository --> |
||||
|
</parent> |
||||
|
<groupId>com.woniu.connection</groupId> |
||||
|
<artifactId>threadconnectiondemo</artifactId> |
||||
|
<version>1.0-SNAPSHOT</version> |
||||
|
|
||||
|
<dependencies> |
||||
|
<dependency> |
||||
|
<groupId>com.alibaba.cloud</groupId> |
||||
|
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> |
||||
|
<version>2.2.6.RELEASE</version> |
||||
|
</dependency> |
||||
|
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-config --> |
||||
|
<dependency> |
||||
|
<groupId>com.alibaba.cloud</groupId> |
||||
|
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> |
||||
|
<version>2.2.6.RELEASE</version> |
||||
|
</dependency> |
||||
|
|
||||
|
|
||||
|
<dependency> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-starter-web</artifactId> |
||||
|
</dependency> |
||||
|
<dependency> |
||||
|
<groupId>org.springframework.boot</groupId> |
||||
|
<artifactId>spring-boot-starter</artifactId> |
||||
|
</dependency> |
||||
|
|
||||
|
</dependencies> |
||||
|
</project> |
@ -0,0 +1,12 @@ |
|||||
|
package com.woniu.connection; |
||||
|
|
||||
|
import org.springframework.boot.SpringApplication; |
||||
|
import org.springframework.boot.autoconfigure.SpringBootApplication; |
||||
|
|
||||
|
@SpringBootApplication |
||||
|
public class MainApplication { |
||||
|
|
||||
|
public static void main(String[] args) { |
||||
|
SpringApplication.run(MainApplication.class, args); |
||||
|
} |
||||
|
} |
@ -0,0 +1,111 @@ |
|||||
|
package com.woniu.connection.config; |
||||
|
|
||||
|
|
||||
|
import com.alibaba.cloud.nacos.NacosConfigManager; |
||||
|
import com.alibaba.cloud.nacos.NacosConfigProperties; |
||||
|
import com.alibaba.nacos.api.config.listener.Listener; |
||||
|
import com.google.common.util.concurrent.ThreadFactoryBuilder; |
||||
|
import org.springframework.beans.factory.InitializingBean; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.beans.factory.annotation.Value; |
||||
|
import org.springframework.cloud.context.config.annotation.RefreshScope; |
||||
|
import org.springframework.context.annotation.Configuration; |
||||
|
|
||||
|
import java.util.concurrent.*; |
||||
|
|
||||
|
/** |
||||
|
* Nacos作为服务配置中心, |
||||
|
* 实现一个简单的动态化线程池。 |
||||
|
* 修改线程池核心线程数、 |
||||
|
* 最大线程数为例, |
||||
|
*/ |
||||
|
@RefreshScope |
||||
|
@Configuration |
||||
|
public class DynamicThreadPool implements InitializingBean { |
||||
|
@Value("${core.size}") |
||||
|
private String coreSize; |
||||
|
|
||||
|
@Value("${max.size}") |
||||
|
private String maxSize; |
||||
|
|
||||
|
private static ThreadPoolExecutor threadPoolExecutor; |
||||
|
|
||||
|
@Autowired |
||||
|
private NacosConfigManager nacosConfigManager; |
||||
|
|
||||
|
@Autowired |
||||
|
private NacosConfigProperties nacosConfigProperties; |
||||
|
|
||||
|
@Override |
||||
|
public void afterPropertiesSet() throws Exception { |
||||
|
//按照nacos配置初始化线程池
|
||||
|
threadPoolExecutor = new ThreadPoolExecutor(Integer.parseInt(coreSize), Integer.parseInt(maxSize), 10L, TimeUnit.SECONDS, |
||||
|
new LinkedBlockingQueue<>(10), |
||||
|
new ThreadFactoryBuilder().setNameFormat("c_t_%d").build(), |
||||
|
new RejectedExecutionHandler() { |
||||
|
@Override |
||||
|
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { |
||||
|
System.out.println("rejected!"); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
//nacos配置变更监听
|
||||
|
nacosConfigManager.getConfigService().addListener("order-service-dev.yml", nacosConfigProperties.getGroup(), |
||||
|
new Listener() { |
||||
|
@Override |
||||
|
public Executor getExecutor() { |
||||
|
return null; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void receiveConfigInfo(String configInfo) { |
||||
|
//配置变更,修改线程池配置
|
||||
|
System.out.println(configInfo); |
||||
|
changeThreadPoolConfig(Integer.parseInt(coreSize), Integer.parseInt(maxSize)); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 打印当前线程池的状态 |
||||
|
*/ |
||||
|
public String printThreadPoolStatus() { |
||||
|
return String.format("core_size:%s,thread_current_size:%s;" + |
||||
|
"thread_max_size:%s;queue_current_size:%s,total_task_count:%s", threadPoolExecutor.getCorePoolSize(), |
||||
|
threadPoolExecutor.getActiveCount(), threadPoolExecutor.getMaximumPoolSize(), threadPoolExecutor.getQueue().size(), |
||||
|
threadPoolExecutor.getTaskCount()); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 给线程池增加任务 |
||||
|
* |
||||
|
* @param count |
||||
|
*/ |
||||
|
public void dynamicThreadPoolAddTask(int count) { |
||||
|
for (int i = 0; i < count; i++) { |
||||
|
int finalI = i; |
||||
|
threadPoolExecutor.execute(new Runnable() { |
||||
|
@Override |
||||
|
public void run() { |
||||
|
try { |
||||
|
System.out.println(finalI); |
||||
|
Thread.sleep(10000); |
||||
|
} catch (InterruptedException e) { |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 修改线程池核心参数 |
||||
|
* |
||||
|
* @param coreSize |
||||
|
* @param maxSize |
||||
|
*/ |
||||
|
private void changeThreadPoolConfig(int coreSize, int maxSize) { |
||||
|
threadPoolExecutor.setCorePoolSize(coreSize); |
||||
|
threadPoolExecutor.setMaximumPoolSize(maxSize); |
||||
|
} |
||||
|
} |
@ -0,0 +1,35 @@ |
|||||
|
package com.woniu.connection.web; |
||||
|
|
||||
|
|
||||
|
import com.woniu.connection.config.DynamicThreadPool; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
|
||||
|
|
||||
|
@RestController |
||||
|
@RequestMapping("/threadpool") |
||||
|
public class ThreadPoolController { |
||||
|
|
||||
|
@Autowired |
||||
|
private DynamicThreadPool dynamicThreadPool; |
||||
|
|
||||
|
/** |
||||
|
* 打印当前线程池的状态 |
||||
|
*/ |
||||
|
@GetMapping("/print") |
||||
|
public String printThreadPoolStatus() { |
||||
|
return dynamicThreadPool.printThreadPoolStatus(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 给线程池增加任务 |
||||
|
* |
||||
|
* @param count |
||||
|
*/ |
||||
|
@GetMapping("/add") |
||||
|
public String dynamicThreadPoolAddTask(int count) { |
||||
|
dynamicThreadPool.dynamicThreadPoolAddTask(count); |
||||
|
return String.valueOf(count); |
||||
|
} |
||||
|
} |
@ -0,0 +1,3 @@ |
|||||
|
spring: |
||||
|
profiles: |
||||
|
active: dev |
@ -0,0 +1,15 @@ |
|||||
|
server: |
||||
|
port: 8010 |
||||
|
# 应用名称(nacos会将该名称当做服务名称) |
||||
|
spring: |
||||
|
application: |
||||
|
name: woniu-service |
||||
|
cloud: |
||||
|
nacos: |
||||
|
discovery: |
||||
|
namespace: public |
||||
|
server-addr: 192.168.56.10:8848 |
||||
|
config: |
||||
|
server-addr: 192.168.56.10:8848 |
||||
|
file-extension: yml |
||||
|
|
@ -0,0 +1,3 @@ |
|||||
|
spring: |
||||
|
profiles: |
||||
|
active: dev |
@ -0,0 +1,15 @@ |
|||||
|
server: |
||||
|
port: 8010 |
||||
|
# 应用名称(nacos会将该名称当做服务名称) |
||||
|
spring: |
||||
|
application: |
||||
|
name: woniu-service |
||||
|
cloud: |
||||
|
nacos: |
||||
|
discovery: |
||||
|
namespace: public |
||||
|
server-addr: 192.168.56.10:8848 |
||||
|
config: |
||||
|
server-addr: 192.168.56.10:8848 |
||||
|
file-extension: yml |
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,116 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"> |
||||
|
<component name="FacetManager"> |
||||
|
<facet type="Spring" name="Spring"> |
||||
|
<configuration /> |
||||
|
</facet> |
||||
|
<facet type="web" name="Web"> |
||||
|
<configuration> |
||||
|
<webroots /> |
||||
|
<sourceRoots> |
||||
|
<root url="file://$MODULE_DIR$/src/main/java" /> |
||||
|
<root url="file://$MODULE_DIR$/src/main/resources" /> |
||||
|
</sourceRoots> |
||||
|
</configuration> |
||||
|
</facet> |
||||
|
</component> |
||||
|
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"> |
||||
|
<output url="file://$MODULE_DIR$/target/classes" /> |
||||
|
<output-test url="file://$MODULE_DIR$/target/test-classes" /> |
||||
|
<content url="file://$MODULE_DIR$"> |
||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /> |
||||
|
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /> |
||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /> |
||||
|
<excludeFolder url="file://$MODULE_DIR$/target" /> |
||||
|
</content> |
||||
|
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" /> |
||||
|
<orderEntry type="sourceFolder" forTests="false" /> |
||||
|
<orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:2.2.6.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-alibaba-commons:2.2.6.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-client:1.4.2" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-common:1.4.2" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: commons-io:commons-io:2.7" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpasyncclient:4.1.4" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.14" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore-nio:4.4.14" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.alibaba.nacos:nacos-api:1.4.2" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.google.guava:guava:30.1-jre" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.google.guava:failureaccess:1.0.1" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.checkerframework:checker-qual:3.5.0" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.google.errorprone:error_prone_annotations:2.3.4" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.google.j2objc:j2objc-annotations:1.3" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.4" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.4" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.4" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: io.prometheus:simpleclient:0.5.0" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.alibaba.spring:spring-context-support:1.0.10" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-commons:2.2.6.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:5.3.9.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-context:2.2.6.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-ribbon:2.2.6.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter:2.2.6.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.security:spring-security-rsa:1.0.9.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.64" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.64" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-ribbon:2.2.6.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-netflix-archaius:2.2.6.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.cloud:spring-cloud-starter-netflix-archaius:2.2.6.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.netflix.archaius:archaius-core:0.7.6" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: commons-configuration:commons-configuration:1.8" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon:2.3.0" level="project" /> |
||||
|
<orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.ribbon:ribbon-transport:2.3.0" level="project" /> |
||||
|
<orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty-contexts:0.4.9" level="project" /> |
||||
|
<orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty-servo:0.4.9" level="project" /> |
||||
|
<orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.hystrix:hystrix-core:1.4.3" level="project" /> |
||||
|
<orderEntry type="library" scope="RUNTIME" name="Maven: javax.inject:javax.inject:1" level="project" /> |
||||
|
<orderEntry type="library" scope="RUNTIME" name="Maven: io.reactivex:rxnetty:0.4.9" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-core:2.3.0" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.6" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-httpclient:2.3.0" level="project" /> |
||||
|
<orderEntry type="library" scope="RUNTIME" name="Maven: commons-collections:commons-collections:3.2.2" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" /> |
||||
|
<orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-client:1.19.1" level="project" /> |
||||
|
<orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey:jersey-core:1.19.1" level="project" /> |
||||
|
<orderEntry type="library" scope="RUNTIME" name="Maven: javax.ws.rs:jsr311-api:1.1.1" level="project" /> |
||||
|
<orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.jersey.contribs:jersey-apache-client4:1.19.1" level="project" /> |
||||
|
<orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.servo:servo-core:0.10.1" level="project" /> |
||||
|
<orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.servo:servo-internal:0.10.1" level="project" /> |
||||
|
<orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.netflix-commons:netflix-commons-util:0.1.1" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.netflix.ribbon:ribbon-loadbalancer:2.3.0" level="project" /> |
||||
|
<orderEntry type="library" scope="RUNTIME" name="Maven: com.netflix.netflix-commons:netflix-statistics:0.1.1" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: io.reactivex:rxjava:1.3.8" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-config:2.2.6.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.3.12.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.3.12.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.4" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.4" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.3.12.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.46" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.46" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.15.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.15.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.15.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.15.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.15.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.15.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.12.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.12.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.12.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.12.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.15.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.15.RELEASE" level="project" /> |
||||
|
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.26" level="project" /> |
||||
|
</component> |
||||
|
</module> |
Loading…
Reference in new issue