修正 modbus 超时问题
This commit is contained in:
@ -0,0 +1,106 @@
|
|||||||
|
package com.xzzn.common.core.modbus.config;
|
||||||
|
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@ConfigurationProperties(prefix = "modbus")
|
||||||
|
public class ModbusProperties {
|
||||||
|
|
||||||
|
private PoolConfig pool = new PoolConfig();
|
||||||
|
private TimeoutConfig timeout = new TimeoutConfig();
|
||||||
|
|
||||||
|
public PoolConfig getPool() {
|
||||||
|
return pool;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPool(PoolConfig pool) {
|
||||||
|
this.pool = pool;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TimeoutConfig getTimeout() {
|
||||||
|
return timeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimeout(TimeoutConfig timeout) {
|
||||||
|
this.timeout = timeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class PoolConfig {
|
||||||
|
private int maxTotal = 20;
|
||||||
|
private int maxIdle = 10;
|
||||||
|
private int minIdle = 3;
|
||||||
|
private long maxWait = 5000;
|
||||||
|
private long timeBetweenEvictionRuns = 30000;
|
||||||
|
private long minEvictableIdleTime = 60000;
|
||||||
|
|
||||||
|
public int getMaxTotal() {
|
||||||
|
return maxTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMaxTotal(int maxTotal) {
|
||||||
|
this.maxTotal = maxTotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMaxIdle() {
|
||||||
|
return maxIdle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMaxIdle(int maxIdle) {
|
||||||
|
this.maxIdle = maxIdle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMinIdle() {
|
||||||
|
return minIdle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMinIdle(int minIdle) {
|
||||||
|
this.minIdle = minIdle;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getMaxWait() {
|
||||||
|
return maxWait;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMaxWait(long maxWait) {
|
||||||
|
this.maxWait = maxWait;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTimeBetweenEvictionRuns() {
|
||||||
|
return timeBetweenEvictionRuns;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimeBetweenEvictionRuns(long timeBetweenEvictionRuns) {
|
||||||
|
this.timeBetweenEvictionRuns = timeBetweenEvictionRuns;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getMinEvictableIdleTime() {
|
||||||
|
return minEvictableIdleTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMinEvictableIdleTime(long minEvictableIdleTime) {
|
||||||
|
this.minEvictableIdleTime = minEvictableIdleTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class TimeoutConfig {
|
||||||
|
private int read = 10000;
|
||||||
|
private int write = 5000;
|
||||||
|
|
||||||
|
public int getRead() {
|
||||||
|
return read;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRead(int read) {
|
||||||
|
this.read = read;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getWrite() {
|
||||||
|
return write;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWrite(int write) {
|
||||||
|
this.write = write;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,33 @@
|
|||||||
|
package com.xzzn.quartz.config;
|
||||||
|
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
|
||||||
|
import javax.annotation.PreDestroy;
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Modbus操作执行器配置
|
||||||
|
* 所有Modbus读写操作必须通过此单线程执行器串行执行,避免并发访问导致通讯故障
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
public class ModbusExecutorConfig {
|
||||||
|
|
||||||
|
private final ExecutorService modbusExecutor = Executors.newSingleThreadExecutor(r -> {
|
||||||
|
Thread t = new Thread(r, "modbus-io-thread");
|
||||||
|
t.setDaemon(false);
|
||||||
|
return t;
|
||||||
|
});
|
||||||
|
|
||||||
|
@Bean(name = "modbusExecutor")
|
||||||
|
public ExecutorService modbusExecutor() {
|
||||||
|
return modbusExecutor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreDestroy
|
||||||
|
public void shutdown() {
|
||||||
|
modbusExecutor.shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user