马府强
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