grpc-ecosystem / grpc-spring

Spring Boot starter module for gRPC framework.

Home Page:https://grpc-ecosystem.github.io/grpc-spring/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Constructor injects bean "array out of bounds exception" use @Qualifier

805728578 opened this issue · comments

The context

@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ NettyUDPFactory.class})
public class NettyClientStartConfiguration {
	@Bean(value = "nettyUDPClientFactory")
	@ConditionalOnClass({ NettyUDPFactory.class })
	public NettyUDPFactory nettyUDPClientFactory() {
	    return new NettyUDPFactory()
	}
        @Bean(value = "nettyUDPServerFactory")
	@ConditionalOnClass({ NettyUDPFactory.class })
	public NettyUDPFactory nettyUDPServerFactory() {
	    return new NettyUDPFactory()
	}
	@Component
	@Order(value = Integer.MAX_VALUE)
	public class NettyUDPClientStartConfiguration implements ApplicationRunner{
		private NettyUDPFactory factory;
		
		public NettyUDPClientStartConfiguration(@Qualifier("nettyUDPClientFactory")NettyUDPFactory factory) {
			this.factory = factory;
		}

		@Override
		public void run(ApplicationArguments args) throws Exception {
			Executors.newScheduledThreadPool(1).scheduleAtFixedRate(()->{
				if(factory.isEnabled()&&!factory.isSuccess()) {
					factory.start();
				}
			}, 10, 1, TimeUnit.SECONDS);
		}
	}
}

public class NettyUDPFactory extends ConfigurableFactory,DisposableBean, AutoCloseable {
	static AtomicBoolean LOGGER_ENABLED = new AtomicBoolean(true);
	/**
	 * TCP协议
	 */
	static final String SCHEME_TCP = "tcp://";
	/**
	 * SSL协议
	 */
	static final String SCHEME_SSL = "ssl://";
	/**
	 * HTTP协议
	 */
	static final String SCHEME_HTTP = "http://";
	/**
	 * HTTPS协议
	 */
	static final String SCHEME_HTTPS = "https://";
	/**
	 * 描述: 初始化服务
	 * 
	 * @author ZhangYi
	 * @date 2023-09-20 12:30:34
	 */
	public void initialize(){
	};
	/**
	 * 描述: 启动服务
	 * 
	 * @author ZhangYi
	 * @date 2019-10-25 12:30:34
	 */
	public void start(){
	};

	/**
	 * 描述: 关闭(销毁)服务
	 * 
	 * @author ZhangYi
	 * @date 2019-10-25 12:30:34
	 */
	public void reconnect() {
	};

	/**
	 * 描述: 是否延迟加载
	 * 
	 * @author ZhangYi
	 * @date 2023-07-25 12:30:34
	 */
	 public boolean delay() {
		return false;
	};
	/**
	 * 描述: 是否延迟加载
	 * 
	 * @author ZhangYi
	 * @date 2023-07-25 12:30:34
	 */
	@Override
	 public void close() throws Exception {
	}
	@Override
	public void destroy() throws Exception {
		close();
	}
}

What do you wish to achieve?

The bug

What's the problem? What's not working? What do you expect to happen.

Stacktrace and logs

Is there a stacktrace or a hint in the logs? (very important)
Screenshots work as well, but don't screenshot your logs.

Steps to Reproduce

Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

The application's environment

Which versions do you use?

  • Spring (boot): 2.2.13/2.7.16/3.0.12
  • grpc-java:
  • grpc-spring-boot-starter: 2.14.0
  • java: version + architecture (64bit?) java 8/17
  • Other relevant libraries...

Additional context

  • Did it ever work before?
  • Do you have a demo?

array out of bounds exception 这个之前因为使用多线程 出现过

Please provide a full stacktrace and a reproducible example.